/ Hex Artifact Content
Login

Artifact a4837c57f9a3e2af100bc59f4be60d16b823f18131f8cef6a6685440f775eebd:


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 42 75 73 79 48 61 6e    int (*xBusyHan
7d90: 64 6c 65 72 29 28 76 6f 69 64 20 2a 2c 69 6e 74  dler)(void *,int
7da0: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
7db0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
7dc0: 69 64 20 2a 70 42 75 73 79 41 72 67 3b 20 20 20  id *pBusyArg;   
7dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7de0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
7df0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
7e00: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e20: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
7e30: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
7e40: 73 79 20 63 61 6c 6c 20 2a 2f 0a 20 20 75 38 20  sy call */.  u8 
7e50: 62 45 78 74 72 61 46 69 6c 65 41 72 67 3b 20 20  bExtraFileArg;  
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7e70: 2a 20 49 6e 63 6c 75 64 65 20 73 71 6c 69 74 65  * Include sqlite
7e80: 33 5f 66 69 6c 65 20 61 73 20 63 61 6c 6c 62 61  3_file as callba
7e90: 63 6b 20 61 72 67 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ck arg */.};../*
7ea0: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
7eb0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
7ec0: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
7ed0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7ee0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
7ef0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
7f00: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
7f10: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
7f20: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
7f30: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
7f40: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
7f50: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
7f60: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
7f70: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
7f80: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
7f90: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
7fa0: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
7fb0: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7fc0: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
7fd0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
7fe0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
7ff0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
8000: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
8010: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
8020: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
8030: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
8040: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
8050: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
8060: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
8070: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
8080: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
8090: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
80a0: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
80b0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
80c0: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
80d0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
80e0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
80f0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
8100: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
8110: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
8120: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
8130: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
8140: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
8150: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
8160: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
8170: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
8180: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
8190: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
81a0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
81b0: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
81c0: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
81d0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a  nstead of the.**
81e0: 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74   one parameter t
81f0: 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20  hat destructors 
8200: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20  normally want.  
8210: 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e  So we have to in
8220: 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73 20  troduce.** this 
8230: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
8240: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
8250: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
8260: 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70  ently.  Any.** p
8270: 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b  ointer will work
8280: 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73   here as long as
8290: 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74 20   it is distinct 
82a0: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54  from SQLITE_STAT
82b0: 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45  IC.** and SQLITE
82c0: 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23  _TRANSIENT..*/.#
82d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59  define SQLITE_DY
82e0: 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65  NAMIC   ((sqlite
82f0: 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70  3_destructor_typ
8300: 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  e)sqlite3MallocS
8310: 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  ize)../*.** When
8320: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
8330: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20   is defined, it 
8340: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 74  means that the t
8350: 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64  arget platform d
8360: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f  oes.** not suppo
8370: 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61 74  rt Writable Stat
8380: 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73 75  ic Data (WSD) su
8390: 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64  ch as global and
83a0: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
83b0: 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62  s..** All variab
83c0: 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72 20  les must either 
83d0: 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20  be on the stack 
83e0: 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  or dynamically a
83f0: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a  llocated from.**
8400: 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e   the heap.  When
8410: 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72   WSD is unsuppor
8420: 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c  ted, the variabl
8430: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73  e declarations s
8440: 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f  cattered.** thro
8450: 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74  ughout the SQLit
8460: 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f  e code must beco
8470: 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73  me constants ins
8480: 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54  tead.  The SQLIT
8490: 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69  E_WSD.** macro i
84a0: 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 20  s used for this 
84b0: 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e  purpose.  And in
84c0: 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e  stead of referen
84d0: 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c  cing the variabl
84e0: 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77  e.** directly, w
84f0: 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61  e use its consta
8500: 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c  nt as a key to l
8510: 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69  ookup the run-ti
8520: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  me allocated.** 
8530: 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64  buffer that hold
8540: 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e  s real variable.
8550: 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69    The constant i
8560: 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69  s also the initi
8570: 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68  alizer.** for th
8580: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8590: 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a  ated buffer..**.
85a0: 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20  ** In the usual 
85b0: 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20 69  case where WSD i
85c0: 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  s supported, the
85d0: 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20   SQLITE_WSD and 
85e0: 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73  GLOBAL.** macros
85f0: 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61   become no-ops a
8600: 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72  nd have zero per
8610: 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e  formance impact.
8620: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
8630: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65  E_OMIT_WSD.  #de
8640: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20  fine SQLITE_WSD 
8650: 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20  const.  #define 
8660: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74  GLOBAL(t,v) (*(t
8670: 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69  *)sqlite3_wsd_fi
8680: 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20  nd((void*)&(v), 
8690: 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64  sizeof(v))).  #d
86a0: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
86b0: 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c  balConfig GLOBAL
86c0: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  (struct Sqlite3C
86d0: 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f  onfig, sqlite3Co
86e0: 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69  nfig).  int sqli
86f0: 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74  te3_wsd_init(int
8700: 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f   N, int J);.  vo
8710: 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f  id *sqlite3_wsd_
8720: 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e  find(void *K, in
8730: 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t L);.#else.  #d
8740: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
8750: 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41  .  #define GLOBA
8760: 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69  L(t,v) v.  #defi
8770: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8780: 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
8790: 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nfig.#endif../*.
87a0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
87b0: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
87c0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d   to suppress com
87d0: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61  piler warnings a
87e0: 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74  nd to.** make it
87f0: 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20   clear to human 
8800: 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66  readers when a f
8810: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
8820: 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c  r is deliberatel
8830: 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64  y.** left unused
8840: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8850: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
8860: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
8870: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
8880: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
8890: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
88a0: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
88b0: 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70  ample the.** imp
88c0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
88d0: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
88e0: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
88f0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
8900: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
8910: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
8920: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
8930: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
8940: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
8950: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
8960: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
8970: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
8980: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
8990: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
89a0: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
89b0: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
89c0: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
89d0: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
89e0: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
89f0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
8a00: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
8a10: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
8a20: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
8a30: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
8a40: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
8a50: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
8a60: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
8a70: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
8a80: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
8a90: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
8aa0: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
8ab0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
8ac0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
8ad0: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
8ae0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
8af0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
8b00: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
8b10: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
8b20: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
8b30: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
8b40: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
8b50: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
8b60: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
8b70: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
8b80: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b90: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
8ba0: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
8bb0: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
8bc0: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
8bd0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8be0: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
8bf0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8c00: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
8c10: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
8c20: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
8c30: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
8c40: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8c50: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
8c60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c70: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
8c80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c90: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
8ca0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
8cb0: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
8cc0: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
8cd0: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
8ce0: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
8cf0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
8d00: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
8d10: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b  ypedef struct FK
8d20: 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66  ey FKey;.typedef
8d30: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74   struct FuncDest
8d40: 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72  ructor FuncDestr
8d50: 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73  uctor;.typedef s
8d60: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75  truct FuncDef Fu
8d70: 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73  ncDef;.typedef s
8d80: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
8d90: 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74  h FuncDefHash;.t
8da0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64  ypedef struct Id
8db0: 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70  List IdList;.typ
8dc0: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
8dd0: 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66  x Index;.typedef
8de0: 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d   struct IndexSam
8df0: 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b  ple IndexSample;
8e00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e10: 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73  KeyClass KeyClas
8e20: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
8e30: 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66  t KeyInfo KeyInf
8e40: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8e50: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b  t Lookaside Look
8e60: 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73  aside;.typedef s
8e70: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
8e80: 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  lot LookasideSlo
8e90: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8ea0: 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b  t Module Module;
8eb0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ec0: 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65  NameContext Name
8ed0: 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66  Context;.typedef
8ee0: 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61   struct Parse Pa
8ef0: 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  rse;.typedef str
8f00: 75 63 74 20 50 72 65 55 70 64 61 74 65 20 50 72  uct PreUpdate Pr
8f10: 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66  eUpdate;.typedef
8f20: 20 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72   struct PrintfAr
8f30: 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72  guments PrintfAr
8f40: 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66  guments;.typedef
8f50: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
8f60: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
8f70: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
8f80: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
8fa0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
8fb0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
8fc0: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
8fd0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
8fe0: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
8ff0: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
9000: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
9010: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
9020: 20 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d   struct StrAccum
9030: 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64   StrAccum;.typed
9040: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20  ef struct Table 
9050: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
9060: 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20  truct TableLock 
9070: 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64  TableLock;.typed
9080: 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  ef struct Token 
9090: 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73  Token;.typedef s
90a0: 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54  truct TreeView T
90b0: 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66  reeView;.typedef
90c0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
90d0: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
90e0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50   struct TriggerP
90f0: 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74  rg TriggerPrg;.t
9100: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
9110: 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65  iggerStep Trigge
9120: 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73  rStep;.typedef s
9130: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
9140: 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63  cord UnpackedRec
9150: 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ord;.typedef str
9160: 75 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c  uct VTable VTabl
9170: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
9180: 74 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74  t VtabCtx VtabCt
9190: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
91a0: 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b  t Walker Walker;
91b0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
91c0: 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49  WhereInfo WhereI
91d0: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
91e0: 75 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a  uct With With;..
91f0: 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63  /* A VList objec
9200: 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70  t records a mapp
9210: 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72 61  ing between para
9220: 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73  meters/variables
9230: 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e  /wildcards.** in
9240: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
9250: 6e 74 20 28 73 75 63 68 20 61 73 20 24 61 62 63  nt (such as $abc
9260: 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29  , @pqr, or :xyz)
9270: 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72   and the integer
9280: 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d  .** variable num
9290: 62 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ber associated w
92a0: 69 74 68 20 74 68 61 74 20 70 61 72 61 6d 65 74  ith that paramet
92b0: 65 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72  er.  See the for
92c0: 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a  mat description.
92d0: 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  ** on the sqlite
92e0: 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74  3VListAdd() rout
92f0: 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66  ine for more inf
9300: 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69  ormation.  A VLi
9310: 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20  st is really.** 
9320: 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66  just an array of
9330: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79   integers..*/.ty
9340: 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b  pedef int VList;
9350: 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f  ../*.** Defer so
9360: 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e  urcing vdbe.h an
9370: 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20  d btree.h until 
9380: 61 66 74 65 72 20 74 68 65 20 22 75 38 22 20 61  after the "u8" a
9390: 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c  nd.** "BusyHandl
93a0: 65 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64  er" typedefs. vd
93b0: 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72  be.h also requir
93c0: 65 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20  es a few of the 
93d0: 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65  opaque.** pointe
93e0: 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75  r types (i.e. Fu
93f0: 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61  ncDef) defined a
9400: 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  bove..*/.#includ
9410: 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63  e "btree.h".#inc
9420: 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69  lude "vdbe.h".#i
9430: 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22  nclude "pager.h"
9440: 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68  .#include "pcach
9450: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f  e.h".#include "o
9460: 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d  s.h".#include "m
9470: 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20  utex.h"../* The 
9480: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
9490: 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  ABLE compile-tim
94a0: 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f  e option used to
94b0: 20 73 65 74 20 74 68 65 20 64 65 66 61 75 6c 74   set the default
94c0: 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  .** synchronous 
94d0: 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41  setting to EXTRA
94e0: 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67  .  It is no long
94f0: 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f  er supported..*/
9500: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
9510: 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77  XTRA_DURABLE.# w
9520: 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54  arning Use SQLIT
9530: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9540: 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20  ONOUS=3 instead 
9550: 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f  of SQLITE_EXTRA_
9560: 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65  DURABLE.# define
9570: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9580: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65  SYNCHRONOUS 3.#e
9590: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61  ndif../*.** Defa
95a0: 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  ult synchronous 
95b0: 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  levels..**.** No
95c0: 74 65 20 74 68 61 74 20 28 66 6f 72 20 68 69 73  te that (for his
95d0: 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20  torcal reasons) 
95e0: 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52  the PAGER_SYNCHR
95f0: 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64  ONOUS_* macros d
9600: 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68  iffer.** from th
9610: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
9620: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c  _SYNCHRONOUS val
9630: 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20  ue by 1..**.**  
9640: 20 20 20 20 20 20 20 20 20 50 41 47 45 52 5f 53           PAGER_S
9650: 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20  YNCHRONOUS      
9660: 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f   DEFAULT_SYNCHRO
9670: 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20  NOUS.**   OFF   
9680: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
9690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96a0: 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20    0.**   NORMAL 
96b0: 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20         2        
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96d0: 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20   1.**   FULL    
96e0: 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20        3         
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9700: 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20  2.**   EXTRA    
9710: 20 20 20 20 20 34 20 20 20 20 20 20 20 20 20 20       4          
9720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33                 3
9730: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47  .**.** The "PRAG
9740: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20  MA synchronous" 
9750: 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75  statement also u
9760: 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73  ses the zero-bas
9770: 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49  ed numbers..** I
9780: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
9790: 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75  he zero-based nu
97a0: 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66  mbers are used f
97b0: 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20  or all external 
97c0: 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e  interfaces.** an
97d0: 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20  d the one-based 
97e0: 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20  values are used 
97f0: 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23  internally..*/.#
9800: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
9810: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
9820: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
9830: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9840: 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23  ONOUS 2.#endif.#
9850: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
9860: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
9870: 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53  ONOUS.# define S
9880: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
9890: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51  L_SYNCHRONOUS SQ
98a0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
98b0: 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a  CHRONOUS.#endif.
98c0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
98d0: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20  base file to be 
98e0: 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20  accessed by the 
98f0: 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73  system is an ins
9900: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20  tance.** of the 
9910: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
9920: 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20  ure.  There are 
9930: 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20  normally two of 
9940: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
9950: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74  .** in the sqlit
9960: 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20  e.aDb[] array.  
9970: 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61  aDb[0] is the ma
9980: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
9990: 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69   and.** aDb[1] i
99a0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
99b0: 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ile used to hold
99c0: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
99d0: 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a  s.  Additional.*
99e0: 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20  * databases may 
99f0: 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a  be attached..*/.
9a00: 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68  struct Db {.  ch
9a10: 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20  ar *zDbSName;   
9a20: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
9a30: 69 73 20 64 61 74 61 62 61 73 65 2e 20 28 73 63  is database. (sc
9a40: 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66  hema name, not f
9a50: 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74  ilename) */.  Bt
9a60: 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
9a70: 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65     /* The B*Tree
9a80: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74   structure for t
9a90: 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c  his database fil
9aa0: 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79  e */.  u8 safety
9ab0: 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48  _level;     /* H
9ac0: 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74  ow aggressive at
9ad0: 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f   syncing data to
9ae0: 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53   disk */.  u8 bS
9af0: 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20 20  yncSet;         
9b00: 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52 41 47  /* True if "PRAG
9b10: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e  MA synchronous=N
9b20: 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a  " has been run *
9b30: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
9b40: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ema;     /* Poin
9b50: 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20  ter to database 
9b60: 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79  schema (possibly
9b70: 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a   shared) */.};..
9b80: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
9b90: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
9ba0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f  ng structure sto
9bb0: 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73  res a database s
9bc0: 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73  chema..**.** Mos
9bd0: 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  t Schema objects
9be0: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20   are associated 
9bf0: 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54  with a Btree.  T
9c00: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a  he exception is.
9c10: 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f  ** the Schema fo
9c20: 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
9c30: 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62  aes (sqlite3.aDb
9c40: 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72  [1]) which is fr
9c50: 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20  ee-standing..** 
9c60: 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  In shared cache 
9c70: 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53  mode, a single S
9c80: 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e  chema object can
9c90: 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75   be shared by mu
9ca0: 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73  ltiple.** Btrees
9cb0: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
9cc0: 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69  he same underlyi
9cd0: 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65  ng BtShared obje
9ce0: 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61  ct..**.** Schema
9cf0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
9d00: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
9d10: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
9d20: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
9d30: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
9d40: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
9d50: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
9d60: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
9d70: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
9d80: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
9d90: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
9da0: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
9db0: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
9dc0: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
9dd0: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
9de0: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
9df0: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
9e00: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
9e10: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
9e20: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
9e30: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
9e40: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
9e50: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
9e60: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
9e70: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
9e80: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
9e90: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
9ea0: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
9eb0: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
9ec0: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
9ed0: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
9ee0: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
9ef0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
9f00: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
9f10: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
9f20: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
9f30: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
9f40: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
9f50: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
9f60: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
9f70: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
9f80: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
9f90: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
9fa0: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
9fb0: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
9fc0: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
9fd0: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
9fe0: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
9ff0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
a000: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
a010: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
a020: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
a030: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
a040: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
a050: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
a060: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
a070: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
a080: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
a090: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
a0a0: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
a0b0: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
a0c0: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
a0d0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
a0e0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
a0f0: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
a100: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
a110: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
a120: 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20  schemaFlags;    
a130: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
a140: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
a150: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
a160: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
a170: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
a180: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
a190: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
a1a0: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
a1b0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
a1c0: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
a1d0: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
a1e0: 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66  ** Db.pSchema->f
a1f0: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
a200: 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70  define DbHasProp
a210: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
a220: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
a230: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a240: 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
a250: 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72  efine DbHasAnyPr
a260: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28  operty(D,I,P)  (
a270: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
a280: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a290: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
a2a0: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
a2b0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
a2c0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a2d0: 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50  >schemaFlags|=(P
a2e0: 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61  ).#define DbClea
a2f0: 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  rProperty(D,I,P)
a300: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
a310: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a320: 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a  ags&=~(P)../*.**
a330: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
a340: 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65  for the DB.pSche
a350: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
a360: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63  .**.** The DB_Sc
a370: 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20  hemaLoaded flag 
a380: 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65  is set after the
a390: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
a3a0: 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61   has been.** rea
a3b0: 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20  d into internal 
a3c0: 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  hash tables..**.
a3d0: 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ** DB_UnresetVie
a3e0: 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e  ws means that on
a3f0: 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20  e or more views 
a400: 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  have column name
a410: 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62  s that.** have b
a420: 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20  een filled out. 
a430: 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   If the schema c
a440: 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f  hanges, these co
a450: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74  lumn names might
a460: 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20  .** changes and 
a470: 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c  so the view will
a480: 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65   need to be rese
a490: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  t..*/.#define DB
a4a0: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20  _SchemaLoaded   
a4b0: 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20   0x0001  /* The 
a4c0: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20  schema has been 
a4d0: 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e  loaded */.#defin
a4e0: 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  e DB_UnresetView
a4f0: 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  s    0x0002  /* 
a500: 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20  Some views have 
a510: 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e  defined column n
a520: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
a530: 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20  DB_Empty        
a540: 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68     0x0004  /* Th
a550: 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20  e file is empty 
a560: 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29  (length 0 bytes)
a570: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52   */.#define DB_R
a580: 65 73 65 74 57 61 6e 74 65 64 20 20 20 20 20 30  esetWanted     0
a590: 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20  x0008  /* Reset 
a5a0: 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20  the schema when 
a5b0: 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a  nSchemaLock==0 *
a5c0: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  /../*.** The num
a5d0: 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74  ber of different
a5e0: 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73   kinds of things
a5f0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d   that can be lim
a600: 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68  ited.** using th
a610: 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28  e sqlite3_limit(
a620: 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a  ) interface..*/.
a630: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
a640: 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c  _LIMIT (SQLITE_L
a650: 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
a660: 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f  ADS+1)../*.** Lo
a670: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69  okaside malloc i
a680: 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64  s a set of fixed
a690: 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68  -size buffers th
a6a0: 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a  at can be used.*
a6b0: 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61  * to satisfy sma
a6c0: 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d  ll transient mem
a6d0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
a6e0: 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65  equests for obje
a6f0: 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65  cts.** associate
a700: 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  d with a particu
a710: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
a720: 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73  nection.  The us
a730: 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  e of.** lookasid
a740: 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65  e malloc provide
a750: 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20  s a significant 
a760: 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61  performance enha
a770: 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72  ncement.** (appr
a780: 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64  ox 10%) by avoid
a790: 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c  ing numerous mal
a7a0: 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74  loc/free request
a7b0: 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  s while parsing.
a7c0: 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ** SQL statement
a7d0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f  s..**.** The Loo
a7e0: 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65  kaside structure
a7f0: 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61   holds configura
a800: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
a810: 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f   about the.** lo
a820: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73  okaside malloc s
a830: 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20  ubsystem.  Each 
a840: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
a850: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a   allocation in.*
a860: 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20  * the lookaside 
a870: 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f  subsystem is sto
a880: 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20  red on a linked 
a890: 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64  list of Lookasid
a8a0: 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73  eSlot.** objects
a8b0: 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ..**.** Lookasid
a8c0: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
a8d0: 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66  e only allowed f
a8e0: 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  or objects that 
a8f0: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a  are associated.*
a900: 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  * with a particu
a910: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
a920: 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c  nection.  Hence,
a930: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
a940: 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65  ion cannot.** be
a950: 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61   stored in looka
a960: 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20  side because in 
a970: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
a980: 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66  e the schema inf
a990: 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73  ormation.** is s
a9a0: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
a9b0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
a9c0: 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f  ctions.  Therefo
a9d0: 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e  re, while parsin
a9e0: 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f  g.** schema info
a9f0: 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f  rmation, the Loo
aa00: 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20  kaside.bEnabled 
aa10: 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20  flag is cleared 
aa20: 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61  so that.** looka
aa30: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
aa40: 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f   are not used to
aa50: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73   construct the s
aa60: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a  chema objects..*
aa70: 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  /.struct Lookasi
aa80: 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61  de {.  u32 bDisa
aa90: 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
aaa0: 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74  * Only operate t
aab0: 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65  he lookaside whe
aac0: 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20  n zero */.  u16 
aad0: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
aae0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
aaf0: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
ab00: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c  tes */.  u8 bMal
ab10: 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20  loced;          
ab20: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61   /* True if pSta
ab30: 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  rt obtained from
ab40: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
ab50: 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74  ) */.  u32 nSlot
ab60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
ab70: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b  * Number of look
ab80: 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f  aside slots allo
ab90: 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61  cated */.  u32 a
aba0: 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20  nStat[3];       
abb0: 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20     /* 0: hits.  
abc0: 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20  1: size misses. 
abd0: 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20   2: full misses 
abe0: 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  */.  LookasideSl
abf0: 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20  ot *pInit;   /* 
ac00: 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72 73 20  List of buffers 
ac10: 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
ac20: 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69  sed */.  Lookasi
ac30: 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20  deSlot *pFree;  
ac40: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69   /* List of avai
ac50: 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f  lable buffers */
ac60: 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b  .  void *pStart;
ac70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
ac80: 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69  rst byte of avai
ac90: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61  lable memory spa
aca0: 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45  ce */.  void *pE
acb0: 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
acc0: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61  /* First byte pa
acd0: 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61  st end of availa
ace0: 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  ble space */.};.
acf0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
ad00: 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69  Slot {.  Lookasi
ad10: 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20  deSlot *pNext;  
ad20: 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72    /* Next buffer
ad30: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
ad40: 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  free buffers */.
ad50: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68  };../*.** A hash
ad60: 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74   table for built
ad70: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  -in function def
ad80: 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c  initions.  (Appl
ad90: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a  ication-defined.
ada0: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65  ** functions use
adb0: 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65   a regular table
adc0: 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68   table from hash
add0: 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  .h.).**.** Hash 
ade0: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
adf0: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
ae00: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
ae10: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
ae20: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
ae30: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75  on the FuncDef.u
ae40: 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f  .pHash chain..*/
ae50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ae60: 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a  FUNC_HASH_SZ 23.
ae70: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
ae80: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
ae90: 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  a[SQLITE_FUNC_HA
aea0: 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a  SH_SZ];       /*
aeb0: 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   Hash table for 
aec0: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
aed0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
aee0: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
aef0: 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61  ON./*.** Informa
af00: 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65  tion held in the
af10: 20 22 73 71 6c 69 74 65 33 22 20 64 61 74 61 62   "sqlite3" datab
af20: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  ase connection o
af30: 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a  bject and used.*
af40: 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72  * to manage user
af50: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e   authentication.
af60: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
af70: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
af80: 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uth sqlite3_user
af90: 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c  auth;.struct sql
afa0: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a  ite3_userauth {.
afb0: 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20    u8 authLevel; 
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afd0: 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68 65  /* Current authe
afe0: 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20  ntication level 
aff0: 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57  */.  int nAuthPW
b000: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b010: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
b020: 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74  e zAuthPW in byt
b030: 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  es */.  char *zA
b040: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
b050: 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72        /* Passwor
b060: 64 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e  d used to authen
b070: 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72  ticate */.  char
b080: 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20   *zAuthUser;    
b090: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
b0a0: 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61  r name used to a
b0b0: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d  uthenticate */.}
b0c0: 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
b0d0: 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33  lues for sqlite3
b0e0: 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65  _userauth.authLe
b0f0: 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  vel */.#define U
b100: 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20  AUTH_Unknown    
b110: 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   0     /* Authen
b120: 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74  tication not yet
b130: 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66   checked */.#def
b140: 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20  ine UAUTH_Fail  
b150: 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55        1     /* U
b160: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
b170: 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65  on failed */.#de
b180: 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20  fine UAUTH_User 
b190: 20 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20         2     /* 
b1a0: 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73  Authenticated as
b1b0: 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a   a normal user *
b1c0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
b1d0: 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20  Admin       3   
b1e0: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
b1f0: 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73  ed as an adminis
b200: 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75  trator */../* Fu
b210: 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c  nctions used onl
b220: 79 20 62 79 20 75 73 65 72 20 61 75 74 68 6f 72  y by user author
b230: 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f  ization logic */
b240: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
b250: 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20  AuthTable(const 
b260: 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
b270: 74 65 33 55 73 65 72 41 75 74 68 43 68 65 63 6b  te3UserAuthCheck
b280: 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63  Login(sqlite3*,c
b290: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b  onst char*,u8*);
b2a0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65  .void sqlite3Use
b2b0: 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65  rAuthInit(sqlite
b2c0: 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
b2d0: 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74  3CryptFunc(sqlit
b2e0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
b2f0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
b300: 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  ;..#endif /* SQL
b310: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
b320: 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a  ICATION */../*.*
b330: 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20 74 68  * typedef for th
b340: 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  e authorization 
b350: 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f  callback functio
b360: 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  n..*/.#ifdef SQL
b370: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
b380: 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65  ICATION.  typede
b390: 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f  f int (*sqlite3_
b3a0: 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74  xauth)(void*,int
b3b0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b3c0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b3d0: 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  har*,.          
b3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3f0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
b400: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
b410: 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
b420: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
b430: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
b440: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b450: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b460: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
b470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b480: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b     const char*);
b490: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
b4a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50   SQLITE_OMIT_DEP
b4b0: 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20  RECATED./* This 
b4c0: 69 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49  is an extra SQLI
b4d0: 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74  TE_TRACE macro t
b4e0: 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c  hat indicates "l
b4f0: 65 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a  egacy" tracing.*
b500: 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f  * in the style o
b510: 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  f sqlite3_trace(
b520: 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ).*/.#define SQL
b530: 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
b540: 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65    0x80.#else.#de
b550: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43  fine SQLITE_TRAC
b560: 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64  E_LEGACY  0.#end
b570: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
b580: 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a  T_DEPRECATED */.
b590: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
b5a0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
b5b0: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
b5c0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
b5d0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
b5e0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a  truct sqlite3 {.
b5f0: 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70    sqlite3_vfs *p
b600: 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Vfs;            
b610: 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20  /* OS Interface 
b620: 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65  */.  struct Vdbe
b630: 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
b640: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
b650: 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63  tive virtual mac
b660: 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53  hines */.  CollS
b670: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
b680: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
b690: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
b6a0: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
b6b0: 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  RY) */.  sqlite3
b6c0: 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20  _mutex *mutex;  
b6d0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
b6e0: 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20  tion mutex */.  
b6f0: 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20  Db *aDb;        
b700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b710: 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f   All backends */
b720: 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20  .  int nDb;     
b730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b740: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61   /* Number of ba
b750: 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79  ckends currently
b760: 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32   in use */.  u32
b770: 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20   mDbFlags;      
b780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c             /* fl
b790: 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e  ags recording in
b7a0: 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a  ternal state */.
b7b0: 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c  /* flags settabl
b7e0: 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65  e by pragmas. Se
b7f0: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
b800: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
b810: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
b820: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
b830: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
b840: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
b850: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
b860: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
b870: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
b880: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e  tting */.  u32 n
b890: 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20  SchemaLock;     
b8a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
b8b0: 6f 74 20 72 65 73 65 74 20 74 68 65 20 73 63 68  ot reset the sch
b8c0: 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72  ema when non-zer
b8d0: 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  o */.  unsigned 
b8e0: 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20  int openFlags;  
b8f0: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61       /* Flags pa
b900: 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f  ssed to sqlite3_
b910: 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20  vfs.xOpen() */. 
b920: 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20   int errCode;   
b930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b940: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
b950: 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45  ror code (SQLITE
b960: 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  _*) */.  int err
b970: 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Mask;           
b980: 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75         /* & resu
b990: 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68  lt codes with th
b9a0: 69 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  is before return
b9b0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79  ing */.  int iSy
b9c0: 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20  sErrno;         
b9d0: 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20         /* Errno 
b9e0: 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20  value from last 
b9f0: 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a  system error */.
ba00: 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73    u16 dbOptFlags
ba10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ba20: 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62  /* Flags to enab
ba30: 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d  le/disable optim
ba40: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  izations */.  u8
ba50: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
ba60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
ba70: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ext encoding */.
ba80: 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b    u8 autoCommit;
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
baa0: 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d  /* The auto-comm
bab0: 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38  it flag. */.  u8
bac0: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20   temp_store;    
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
bae0: 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79  : file 2: memory
baf0: 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20   0: default */. 
bb00: 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64   u8 mallocFailed
bb10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
bb20: 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76  * True if we hav
bb30: 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20  e seen a malloc 
bb40: 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20  failure */.  u8 
bb50: 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20  bBenignMalloc;  
bb60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
bb70: 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d   not require OOM
bb80: 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  s if true */.  u
bb90: 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20  8 dfltLockMode; 
bba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bbb0: 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d  Default locking-
bbc0: 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65  mode for attache
bbd0: 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65  d dbs */.  signe
bbe0: 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76  d char nextAutov
bbf0: 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f  ac;      /* Auto
bc00: 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65  vac setting afte
bc10: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20  r VACUUM if >=0 
bc20: 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73  */.  u8 suppress
bc30: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
bc40: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73     /* Do not iss
bc50: 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ue error message
bc60: 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  s if true */.  u
bc70: 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  8 vtabOnConflict
bc80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
bc90: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
bca0: 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63  for s3_vtab_on_c
bcb0: 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75  onflict() */.  u
bcc0: 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  8 isTransactionS
bcd0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20  avepoint;    /* 
bce0: 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65  True if the oute
bcf0: 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20  rmost savepoint 
bd00: 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20  is a TS */.  u8 
bd10: 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20  mTrace;         
bd20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65             /* ze
bd30: 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54  ro or more SQLIT
bd40: 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f  E_TRACE flags */
bd50: 0a 20 20 75 38 20 73 6b 69 70 42 74 72 65 65 4d  .  u8 skipBtreeM
bd60: 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
bd70: 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73   /* True if no s
bd80: 68 61 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b  hared-cache back
bd90: 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71  ends */.  u8 nSq
bda0: 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20  lExec;          
bdb0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
bdc0: 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f  r of pending OP_
bdd0: 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20  SqlExec opcodes 
bde0: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
bdf0: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
be00: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
be10: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
be20: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
be30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
be40: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
be50: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
be60: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
be70: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
be80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be90: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
bea0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
beb0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
bec0: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
bee0: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
bef0: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
bf00: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
bf10: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
bf20: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
bf30: 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  imits */.  int n
bf40: 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20  MaxSorterMmap;  
bf50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
bf60: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69  mum size of regi
bf70: 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f  ons mapped by so
bf80: 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74  rter */.  struct
bf90: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
bfa0: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
bfb0: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
bfc0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
bfd0: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
bfe0: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
bff0: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
c000: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
c010: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
c020: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c040: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
c050: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
c060: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
c070: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
c080: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
c090: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
c0a0: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
c0b0: 20 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61 6e   unsigned orphan
c0c0: 54 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a 20  Trigger : 1; /* 
c0d0: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
c0e0: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
c0f0: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75  trigger */.    u
c100: 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65 72  nsigned imposter
c110: 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42 75  Table : 1; /* Bu
c120: 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74  ilding an impost
c130: 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  er table */.    
c140: 75 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e 4d  unsigned reopenM
c150: 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20 41  emdb : 1;   /* A
c160: 54 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79 20  TTACH is really 
c170: 61 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20 4d  a reopen using M
c180: 65 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  emDB */.  } init
c190: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
c1a0: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
c1b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
c1c0: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
c1d0: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
c1e0: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
c1f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c200: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
c210: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
c220: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
c230: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
c240: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c250: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
c260: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
c270: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
c280: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
c290: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c2a0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
c2b0: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
c2c0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65  () */.  int nVDe
c2d0: 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20  stroy;          
c2e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c2f0: 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65  of active OP_VDe
c300: 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
c310: 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e   */.  int nExten
c320: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
c330: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c340: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
c350: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
c360: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
c370: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
c380: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
c390: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e   handles */.  in
c3a0: 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c  t (*xTrace)(u32,
c3b0: 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64  void*,void*,void
c3c0: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65  *);     /* Trace
c3d0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c3e0: 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20  oid *pTraceArg; 
c3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c400: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
c410: 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63  ment to the trac
c420: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
c430: 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29  void (*xProfile)
c440: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
c450: 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f  r*,u64);  /* Pro
c460: 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  filing function 
c470: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66  */.  void *pProf
c480: 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  ileArg;         
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c4a0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72  * Argument to pr
c4b0: 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a  ofile function *
c4c0: 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69  /.  void *pCommi
c4d0: 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  tArg;           
c4e0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
c4f0: 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c  t to xCommitCall
c500: 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20  back() */.  int 
c510: 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  (*xCommitCallbac
c520: 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a  k)(void*);    /*
c530: 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72   Invoked at ever
c540: 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76  y commit. */.  v
c550: 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72  oid *pRollbackAr
c560: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c570: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c580: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
c590: 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  k() */.  void (*
c5a0: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
c5b0: 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e  k)(void*); /* In
c5c0: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
c5d0: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
c5e0: 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20   *pUpdateArg;.  
c5f0: 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61  void (*xUpdateCa
c600: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
c610: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t, const char*,c
c620: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
c630: 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66  e_int64);.#ifdef
c640: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
c650: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
c660: 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65  void *pPreUpdate
c670: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Arg;          /*
c680: 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
c690: 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c  to xPreUpdateCal
c6a0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
c6b0: 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  (*xPreUpdateCall
c6c0: 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69  back)(   /* Regi
c6d0: 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c  stered using sql
c6e0: 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68  ite3_preupdate_h
c6f0: 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69  ook() */.    voi
c700: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  d*,sqlite3*,int,
c710: 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72  char const*,char
c720: 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f   const*,sqlite3_
c730: 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e  int64,sqlite3_in
c740: 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70  t64.  );.  PreUp
c750: 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65  date *pPreUpdate
c760: 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ;        /* Cont
c770: 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70  ext for active p
c780: 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61  re-update callba
c790: 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  ck */.#endif /* 
c7a0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
c7b0: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a  EUPDATE_HOOK */.
c7c0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
c7d0: 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a  MIT_WAL.  int (*
c7e0: 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f  xWalCallback)(vo
c7f0: 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c  id *, sqlite3 *,
c800: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
c810: 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61  nt);.  void *pWa
c820: 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76  lArg;.#endif.  v
c830: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
c840: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
c850: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
c860: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
c870: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31  id(*xCollNeeded1
c880: 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  6)(void*,sqlite3
c890: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
c8a0: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
c8b0: 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64  oid *pCollNeeded
c8c0: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Arg;.  sqlite3_v
c8d0: 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20  alue *pErr;     
c8e0: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
c8f0: 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ent error messag
c900: 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
c910: 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20     volatile int 
c920: 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f  isInterrupted; /
c930: 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65  * True if sqlite
c940: 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20  3_interrupt has 
c950: 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20  been called */. 
c960: 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65     double notUse
c970: 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  d1;            /
c980: 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20  * Spacer */.  } 
c990: 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20  u1;.  Lookaside 
c9a0: 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  lookaside;      
c9b0: 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65      /* Lookaside
c9c0: 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72   malloc configur
c9d0: 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66  ation */.#ifndef
c9e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
c9f0: 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c  HORIZATION.  sql
ca00: 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68  ite3_xauth xAuth
ca10: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63  ;          /* Ac
ca20: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
ca30: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
ca40: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ca60: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
ca70: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
ca80: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
ca90: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
caa0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
cab0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
cac0: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
cad0: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
cae0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
caf0: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
cb00: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
cb10: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
cb20: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
cb30: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
cb40: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
cb50: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
cb60: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
cb70: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
cb80: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
cb90: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
cba0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
cbb0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
cbc0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
cbd0: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
cbe0: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
cbf0: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
cc00: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
cc10: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
cc20: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
cc30: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
cc40: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
cc50: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
cc60: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
cc70: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
cc80: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
cc90: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ccb0: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
ccc0: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
ccd0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
cce0: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
ccf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63           /* Disc
cd00: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
cd10: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
cd20: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
cd30: 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20  .  Hash aFunc;  
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd50: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
cd60: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
cd70: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
cd80: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
cd90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
cda0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
cdb0: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
cdc0: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
cdd0: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
cde0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
cdf0: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
ce10: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
ce20: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
ce30: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
ce40: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
ce50: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
ce60: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
ce70: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
ce80: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
ce90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
cea0: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
ceb0: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
cec0: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
ced0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cee0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
cef0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
cf00: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
cf10: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
cf20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
cf30: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
cf40: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
cf50: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
cf60: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
cf70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
cf80: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
cf90: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
cfa0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
cfb0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
cfc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
cfd0: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
cfe0: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
cff0: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
d000: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
d010: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
d020: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
d030: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
d040: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
d050: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
d060: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
d070: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
d080: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
d090: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
d0a0: 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65  MASTER.  ** mute
d0b0: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
d0c0: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
d0d0: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
d0e0: 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a  n notify.c..  **
d0f0: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e  .  ** When X.pUn
d100: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  lockConnection==
d110: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
d120: 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20  at X is waiting 
d130: 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e  for Y to.  ** un
d140: 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20  lock so that it 
d150: 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a  can proceed..  *
d160: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42  *.  ** When X.pB
d170: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
d180: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
d190: 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20   that something 
d1a0: 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a  that X tried.  *
d1b0: 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65  * tried to do re
d1c0: 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69  cently failed wi
d1d0: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  th an SQLITE_LOC
d1e0: 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f  KED error due to
d1f0: 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64   locks.  ** held
d200: 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71   by Y..  */.  sq
d210: 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67  lite3 *pBlocking
d220: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43  Connection; /* C
d230: 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63  onnection that c
d240: 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43  aused SQLITE_LOC
d250: 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  KED */.  sqlite3
d260: 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74   *pUnlockConnect
d270: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ion;           /
d280: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  * Connection to 
d290: 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b  watch for unlock
d2a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c   */.  void *pUnl
d2b0: 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ockArg;         
d2c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
d2d0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f  rgument to xUnlo
d2e0: 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f  ckNotify */.  vo
d2f0: 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69  id (*xUnlockNoti
d300: 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  fy)(void **, int
d310: 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f  );  /* Unlock no
d320: 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  tify callback */
d330: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78  .  sqlite3 *pNex
d340: 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20  tBlocked;       
d350: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74   /* Next in list
d360: 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20   of all blocked 
d370: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23  connections */.#
d380: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
d390: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
d3a0: 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  ICATION.  sqlite
d3b0: 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b  3_userauth auth;
d3c0: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
d3d0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69  authentication i
d3e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65  nformation */.#e
d3f0: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
d400: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
d410: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
d420: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
d430: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
d440: 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e  _ENC(db) ((db)->
d450: 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[0].pSchema->
d460: 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43  enc).#define ENC
d470: 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62  (db)        ((db
d480: 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50  )->enc)../*.** P
d490: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
d4a0: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66  or the sqlite3.f
d4b0: 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  lags..**.** Valu
d4c0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
d4d0: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
d4e0: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53  rt()):.**      S
d4f0: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
d500: 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c      == PAGER_FUL
d510: 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53  LFSYNC.**      S
d520: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
d530: 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50  ync == PAGER_CKP
d540: 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20  T_FULLFSYNC.**  
d550: 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65      SQLITE_Cache
d560: 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45  Spill    == PAGE
d570: 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f  R_CACHE_SPILL.*/
d580: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d590: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
d5a0: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b  x00000001  /* OK
d5b0: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
d5c0: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
d5d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
d5e0: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
d5f0: 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20  0002  /* Create 
d600: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
d610: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
d620: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
d630: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
d640: 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66  00004  /* Show f
d650: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
d660: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
d670: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
d680: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
d690: 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66  000008  /* Use f
d6a0: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
d6b0: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
d6c0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
d6d0: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
d6e0: 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c  0010  /* Use ful
d6f0: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
d700: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
d710: 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  e SQLITE_CacheSp
d720: 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30  ill     0x000000
d730: 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69  20  /* OK to spi
d740: 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a  ll pager cache *
d750: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d760: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
d770: 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53  0x00000040  /* S
d780: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
d790: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
d7a0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
d7b0: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
d7c0: 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  080  /* Count ro
d7d0: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
d7e0: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d810: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
d820: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
d830: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
d840: 20 20 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 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
d870: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
d880: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
d890: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
d8a0: 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20  k   0x00000100  
d8b0: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
d8c0: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
d8d0: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
d8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d900: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
d910: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
d920: 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72  ine SQLITE_Ignor
d930: 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30  eChecks   0x0000
d940: 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  0200  /* Do not 
d950: 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f  enforce check co
d960: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
d970: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64  fine SQLITE_Read
d980: 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30  Uncommit   0x000
d990: 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55  00400  /* READ U
d9a0: 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68  NCOMMITTED in sh
d9b0: 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64  ared-cache */.#d
d9c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43  efine SQLITE_NoC
d9d0: 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30  kptOnClose  0x00
d9e0: 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68  000800  /* No ch
d9f0: 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73  eckpoint on clos
da00: 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64  e()/DETACH */.#d
da10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
da20: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
da30: 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72  001000  /* Rever
da40: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
da50: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
da60: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
da70: 72 73 20 20 20 20 30 78 30 30 30 30 32 30 30 30  rs    0x00002000
da80: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
da90: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
daa0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dab0: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
dac0: 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45  0x00004000  /* E
dad0: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
dae0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
daf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
db00: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
db10: 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20   0x00008000  /* 
db20: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
db30: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
db40: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
db50: 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31  xtension  0x0001
db60: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
db70: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a  load_extension *
db80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
db90: 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20  _LoadExtFunc    
dba0: 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45  0x00020000  /* E
dbb0: 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e  nable load_exten
dbc0: 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20  sion() SQL func 
dbd0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dbe0: 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20  E_EnableTrigger 
dbf0: 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20   0x00040000  /* 
dc00: 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74  True to enable t
dc10: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
dc20: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46  ne SQLITE_DeferF
dc30: 4b 73 20 20 20 20 20 20 20 30 78 30 30 30 38 30  Ks       0x00080
dc40: 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c  000  /* Defer al
dc50: 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  l FK constraints
dc60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dc70: 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20  TE_QueryOnly    
dc80: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
dc90: 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73   Disable databas
dca0: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
dcb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c  fine SQLITE_Cell
dcc0: 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32  SizeCk     0x002
dcd0: 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20  00000  /* Check 
dce0: 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73  btree cell sizes
dcf0: 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66   on load */.#def
dd00: 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54  ine SQLITE_Fts3T
dd10: 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30  okenizer  0x0040
dd20: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
dd30: 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32  fts3_tokenizer(2
dd40: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
dd50: 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20  ITE_EnableQPSG  
dd60: 20 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f     0x00800000  /
dd70: 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20  * Query Planner 
dd80: 53 74 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e  Stability Guaran
dd90: 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  tee*/.#define SQ
dda0: 4c 49 54 45 5f 54 72 69 67 67 65 72 45 51 50 20  LITE_TriggerEQP 
ddb0: 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20      0x01000000  
ddc0: 2f 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72 20  /* Show trigger 
ddd0: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
dde0: 41 4e 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20  AN */../* Flags 
ddf0: 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65 62  used only if deb
de00: 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64 65 66  ugging */.#ifdef
de10: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64   SQLITE_DEBUG.#d
de20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
de30: 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30 38  Trace       0x08
de40: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
de50: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
de60: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
de70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
de80: 4c 69 73 74 69 6e 67 20 20 20 20 30 78 31 30 30  Listing    0x100
de90: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
dea0: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
deb0: 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65   programs */.#de
dec0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
ded0: 54 72 61 63 65 20 20 20 20 20 20 30 78 32 30 30  Trace      0x200
dee0: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
def0: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
df00: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
df10: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
df20: 6f 70 54 72 61 63 65 20 30 78 34 30 30 30 30 30  opTrace 0x400000
df30: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
df40: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
df50: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
df60: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
df70: 20 20 20 20 20 20 20 30 78 38 30 30 30 30 30 30         0x8000000
df80: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
df90: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
dfa0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
dfb0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
dfc0: 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c  or sqlite3.mDbFl
dfd0: 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ags.*/.#define D
dfe0: 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e  BFLAG_SchemaChan
dff0: 67 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  ge   0x0001  /* 
e000: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68  Uncommitted Hash
e010: 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a   table changes *
e020: 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47  /.#define DBFLAG
e030: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
e040: 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65 66 65  0x0002  /* Prefe
e050: 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69  rence to built-i
e060: 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69  n funcs */.#defi
e070: 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75 6d  ne DBFLAG_Vacuum
e080: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
e090: 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e   /* Currently in
e0a0: 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 0a 2f 2a   a VACUUM */../*
e0b0: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
e0c0: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
e0d0: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
e0e0: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
e0f0: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
e100: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
e110: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
e120: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
e130: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
e140: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
e150: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
e160: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
e170: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
e180: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
e190: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
e1a0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
e1b0: 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20  ITE_ColumnCache 
e1c0: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43     0x0002   /* C
e1d0: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
e1e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
e1f0: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
e200: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
e210: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
e220: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
e230: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
e240: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
e250: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
e260: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
e270: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
e280: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a 20 44     0x0010   /* D
e290: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
e2a0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
e2b0: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
e2c0: 53 63 61 6e 20 20 20 30 78 30 30 32 30 20 20 20  Scan   0x0020   
e2d0: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
e2e0: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
e2f0: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
e300: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 34 30 20  yIdxJoin 0x0040 
e310: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
e320: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
e330: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e340: 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20  TE_Transitive   
e350: 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20 54 72    0x0080   /* Tr
e360: 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61  ansitive constra
e370: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
e380: 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a  SQLITE_OmitNoopJ
e390: 6f 69 6e 20 20 20 30 78 30 31 30 30 20 20 20 2f  oin   0x0100   /
e3a0: 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61  * Omit unused ta
e3b0: 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f  bles in joins */
e3c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e3d0: 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20 20 30  CountOfView    0
e3e0: 78 30 32 30 30 20 20 20 2f 2a 20 54 68 65 20 63  x0200   /* The c
e3f0: 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74  ount-of-view opt
e400: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
e410: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73  fine SQLITE_Curs
e420: 6f 72 48 69 6e 74 73 20 20 20 20 30 78 30 34 30  orHints    0x040
e430: 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75  0   /* Add OP_Cu
e440: 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73  rsorHint opcodes
e450: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e460: 54 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20  TE_Stat34       
e470: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
e480: 65 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34  e STAT3 or STAT4
e490: 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54   data */.   /* T
e4a0: 48 33 20 65 78 70 65 63 74 73 20 74 68 65 20 53  H3 expects the S
e4b0: 74 61 74 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61  tat34  ^^^^^^ va
e4c0: 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38 30 30  lue to be 0x0800
e4d0: 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65 20  .  Don't change 
e4e0: 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  it */.#define SQ
e4f0: 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20 20 20  LITE_PushDown   
e500: 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20      0x1000   /* 
e510: 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20 6f 70  The push-down op
e520: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
e530: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 69 6d  efine SQLITE_Sim
e540: 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78 32 30  plifyJoin   0x20
e550: 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20  00   /* Convert 
e560: 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49  LEFT JOIN to JOI
e570: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
e580: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
e590: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
e5a0: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
e5b0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
e5c0: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
e5d0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
e5e0: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
e5f0: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
e600: 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ed..*/.#define O
e610: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
e620: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28  led(db, mask)  (
e630: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
e640: 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64  s&(mask))!=0).#d
e650: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
e660: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
e670: 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62  sk)   (((db)->db
e680: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
e690: 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ==0)../*.** Retu
e6a0: 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b  rn true if it OK
e6b0: 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74   to factor const
e6c0: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
e6d0: 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  into the initial
e6e0: 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e  ization.** code.
e6f0: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   The argument is
e700: 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20   a Parse object 
e710: 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e  for the code gen
e720: 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69  erator..*/.#defi
e730: 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b  ne ConstFactorOk
e740: 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73  (P) ((P)->okCons
e750: 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20  tFactor)../*.** 
e760: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
e770: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
e780: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
e790: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
e7a0: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
e7b0: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
e7c0: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
e7d0: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
e7e0: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
e7f0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
e800: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e810: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
e820: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
e830: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
e840: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e850: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
e860: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
e870: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
e880: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
e890: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
e8a0: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
e8b0: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
e8c0: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
e8d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e8e0: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
e8f0: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
e900: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
e910: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
e920: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
e930: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
e940: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
e950: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
e960: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
e970: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
e980: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
e990: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
e9a0: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
e9b0: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
e9c0: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
e9d0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
e9e0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
e9f0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
ea00: 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67  tructure.  For g
ea10: 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66  lobal built-in f
ea20: 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75  unctions (ex: su
ea30: 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63  bstr(), max(), c
ea40: 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69  ount()).** a poi
ea50: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
ea60: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
ea70: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69  n the sqlite3Bui
ea80: 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62  ltinFunctions ob
ea90: 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72  ject..** For per
eaa0: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c  -connection appl
eab0: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
eac0: 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69  functions, a poi
ead0: 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20  nter to this.** 
eae0: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
eaf0: 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61  d in the db->aHa
eb00: 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  sh hash table..*
eb10: 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68  *.** The u.pHash
eb20: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
eb30: 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69  y the global bui
eb40: 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70  lt-ins.  The u.p
eb50: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69  Destructor.** fi
eb60: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70  eld is used by p
eb70: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70  er-connection ap
eb80: 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e  p-def functions.
eb90: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
eba0: 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20  ef {.  i8 nArg; 
ebb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ebc0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
ebd0: 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e  ts.  -1 means un
ebe0: 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36  limited */.  u16
ebf0: 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20   funcFlags;     
ec00: 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e    /* Some combin
ec10: 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f  ation of SQLITE_
ec20: 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64  FUNC_* */.  void
ec30: 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20   *pUserData;    
ec40: 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61   /* User data pa
ec50: 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e  rameter */.  Fun
ec60: 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20  cDef *pNext;    
ec70: 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69    /* Next functi
ec80: 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d  on with same nam
ec90: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  e */.  void (*xS
eca0: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
ecb0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
ecc0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
ecd0: 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70  func or agg-step
ece0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69   */.  void (*xFi
ecf0: 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f  nalize)(sqlite3_
ed00: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
ed20: 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  gg finalizer */.
ed30: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
ed40: 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61  ame;   /* SQL na
ed50: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
ed60: 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  on. */.  union {
ed70: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48  .    FuncDef *pH
ed80: 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ash;      /* Nex
ed90: 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  t with a differe
eda0: 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20  nt name but the 
edb0: 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20  same hash */.   
edc0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
edd0: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
ede0: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
edf0: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
ee00: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20  function */.  } 
ee10: 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  u;.};../*.** Thi
ee20: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
ee30: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
ee40: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
ee50: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
ee60: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
ee70: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
ee80: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
ee90: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
eea0: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
eeb0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
eec0: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
eed0: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
eee0: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
eef0: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
ef00: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
ef10: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
ef20: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
ef30: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a  nRef is set to.*
ef40: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
ef50: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
ef60: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
ef70: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
ef80: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
ef90: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
efa0: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
efb0: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
efc0: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
efd0: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
efe0: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
eff0: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
f000: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
f010: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
f020: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
f030: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
f040: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
f050: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
f060: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
f070: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
f080: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
f090: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
f0a0: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
f0b0: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
f0c0: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
f0d0: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
f0e0: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
f0f0: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
f100: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
f110: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
f120: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
f130: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
f140: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
f150: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
f160: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
f170: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
f180: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
f190: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
f1a0: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
f1b0: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
f1c0: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
f1d0: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
f1e0: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e  G_TYPEOFARG.  An
f1f0: 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
f200: 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62  _CONSTANT must b
f210: 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51  e the same as SQ
f220: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
f230: 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  IC.  There.** ar
f240: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
f250: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
f260: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
f270: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
f280: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
f290: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
f2a0: 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ):.**     SQLITE
f2b0: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20  _FUNC_MINMAX    
f2c0: 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ==  NC_MinMaxAgg
f2d0: 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d        == SF_MinM
f2e0: 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c  axAgg.**     SQL
f2f0: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
f300: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45     ==  OPFLAG_LE
f310: 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53  NGTHARG.**     S
f320: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
f330: 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f  F    ==  OPFLAG_
f340: 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20  TYPEOFARG.**    
f350: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
f360: 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54  STANT  ==  SQLIT
f370: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20  E_DETERMINISTIC 
f380: 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20  from the API.** 
f390: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
f3a0: 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64  ENCMASK   depend
f3b0: 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a  s on SQLITE_UTF*
f3c0: 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41   macros in the A
f3d0: 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  PI.*/.#define SQ
f3e0: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
f3f0: 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c  K  0x0003 /* SQL
f400: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
f410: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
f420: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
f430: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
f440: 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61      0x0004 /* Ca
f450: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
f460: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
f470: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f480: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
f490: 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65    0x0008 /* Case
f4a0: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
f4b0: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
f4c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f4d0: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
f4e0: 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  0010 /* Ephemera
f4f0: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
f500: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
f510: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
f520: 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73  COLL 0x0020 /* s
f530: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
f540: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
f550: 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65  called*/.#define
f560: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
f570: 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20  GTH   0x0040 /* 
f580: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
f590: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
f5a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f5b0: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38  C_TYPEOF   0x008
f5c0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
f5d0: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
f5e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f5f0: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
f600: 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0100 /* Built-
f610: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
f620: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
f630: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
f640: 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20  LESCE 0x0200 /* 
f650: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
f660: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
f670: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f680: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
f690: 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0400 /* Built-
f6a0: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
f6b0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
f6c0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
f6d0: 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a  NSTANT 0x0800 /*
f6e0: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
f6f0: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
f700: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
f710: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
f720: 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f  INMAX   0x1000 /
f730: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
f740: 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
f750: 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  gates */.#define
f760: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
f770: 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20  CHNG  0x2000 /* 
f780: 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56  "Slow Change". V
f790: 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75  alue constant du
f7a0: 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20  ring a.         
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69             ** si
f7d0: 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67  ngle query - mig
f7e0: 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74  ht change over t
f7f0: 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ime */.#define S
f800: 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e  QLITE_FUNC_AFFIN
f810: 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75  ITY 0x4000 /* Bu
f820: 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28  ilt-in affinity(
f830: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
f840: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f850: 43 5f 4f 46 46 53 45 54 20 20 20 30 78 38 30 30  C_OFFSET   0x800
f860: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71  0 /* Built-in sq
f870: 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75  lite_offset() fu
f880: 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nction */../*.**
f890: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
f8a0: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
f8b0: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
f8c0: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
f8d0: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
f8e0: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
f8f0: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
f900: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
f910: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
f920: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
f930: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
f940: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
f950: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
f960: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
f970: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
f980: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
f990: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
f9a0: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
f9b0: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
f9c0: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
f9d0: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
f9e0: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
f9f0: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
fa00: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
fa10: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
fa20: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
fa30: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
fa40: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
fa50: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20  function. If.** 
fa60: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
fa70: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
fa80: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
fa90: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
faa0: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
fab0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
fac0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
fad0: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
fae0: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
faf0: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
fb00: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
fb10: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
fb20: 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    DFUNCTION(zNam
fb30: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
fb40: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
fb50: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
fb60: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
fb70: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
fb80: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e  CONSTANT flag an
fb90: 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68  d.**     adds th
fba0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
fbb0: 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65  OCHNG flag.  Use
fbc0: 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d  d for date & tim
fbd0: 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  e functions.**  
fbe0: 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73     and functions
fbf0: 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72   like sqlite_ver
fc00: 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20  sion() that can 
fc10: 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20  change, but not 
fc20: 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20  during.**     a 
fc30: 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 20 20 54  single query.  T
fc40: 68 65 20 69 41 72 67 20 69 73 20 69 67 6e 6f 72  he iArg is ignor
fc50: 65 64 2e 20 20 54 68 65 20 75 73 65 72 2d 64 61  ed.  The user-da
fc60: 74 61 20 69 73 20 61 6c 77 61 79 73 20 73 65 74  ta is always set
fc70: 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e 55 4c  .**     to a NUL
fc80: 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20  L pointer.  The 
fc90: 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69 73  bNC parameter is
fca0: 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
fcb0: 20 20 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61     PURE_DATE(zNa
fcc0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
fcd0: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
fce0: 20 20 20 55 73 65 64 20 66 6f 72 20 22 70 75 72     Used for "pur
fcf0: 65 22 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e  e" date/time fun
fd00: 63 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63  ctions, this mac
fd10: 72 6f 20 69 73 20 6c 69 6b 65 20 44 46 55 4e 43  ro is like DFUNC
fd20: 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65  TION.**     exce
fd30: 70 74 20 74 68 61 74 20 69 74 20 64 6f 65 73 20  pt that it does 
fd40: 73 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 46  set the SQLITE_F
fd50: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
fd60: 67 73 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a 20  gs.  iArg is.** 
fd70: 20 20 20 20 69 67 6e 6f 72 65 64 20 61 6e 64 20      ignored and 
fd80: 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 66 6f  the user-data fo
fd90: 72 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e  r these function
fda0: 73 20 69 73 20 73 65 74 20 74 6f 20 61 6e 20 0a  s is set to an .
fdb0: 2a 2a 20 20 20 20 20 61 72 62 69 74 72 61 72 79  **     arbitrary
fdc0: 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65   non-NULL pointe
fdd0: 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72 61  r.  The bNC para
fde0: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
fdf0: 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45  d..**.**   AGGRE
fe00: 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
fe10: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74  , iArg, bNC, xSt
fe20: 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20  ep, xFinal).**  
fe30: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
fe40: 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  e an aggregate f
fe50: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
fe60: 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  on implemented b
fe70: 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66  y.**     the C f
fe80: 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61  unctions xStep a
fe90: 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66  nd xFinal. The f
fea0: 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65  irst four parame
feb0: 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20  ters.**     are 
fec0: 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74  interpreted in t
fed0: 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74  he same way as t
fee0: 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d  he first 4 param
fef0: 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20  eters to.**     
ff00: 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a  FUNCTION()..**.*
ff10: 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  *   LIKEFUNC(zNa
ff20: 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
ff30: 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73  flags).**     Us
ff40: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
ff50: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
ff60: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
ff70: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
ff80: 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74       that accept
ff90: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
ffa0: 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e   and is implemen
ffb0: 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f  ted by a call to
ffc0: 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69   C.**     functi
ffd0: 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67  on likeFunc. Arg
ffe0: 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61  ument pArg is ca
fff0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29  st to a (void *)
10000 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20   and made.**    
10010 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68   available as th
10020 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d  e function user-
10030 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
10040 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a  er_data()). The.
10050 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66  **     FuncDef.f
10060 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73  lags variable is
10070 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
10080 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  e passed as the 
10090 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72  flags.**     par
100a0 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  ameter..*/.#defi
100b0 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  ne FUNCTION(zNam
100c0 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
100d0 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
100e0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
100f0 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
10100 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
10110 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10120 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
10130 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
10140 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
10150 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
10160 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e  ine VFUNCTION(zN
10170 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10180 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10190 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
101a0 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
101b0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
101c0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
101d0 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
101e0 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
101f0 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
10200 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   DFUNCTION(zName
10210 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10220 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10230 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10240 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
10250 55 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c  UTF8, \.   0, 0,
10260 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
10270 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
10280 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65   PURE_DATE(zName
10290 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
102a0 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
102b0 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
102c0 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
102d0 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43  UTF8|SQLITE_FUNC
102e0 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20  _CONSTANT, \.   
102f0 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65 33 43  (void*)&sqlite3C
10300 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c  onfig, 0, xFunc,
10310 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
10320 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
10330 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
10340 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
10350 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
10360 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f  .  {nArg,SQLITE_
10370 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
10380 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
10390 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
103a0 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
103b0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
103c0 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
103d0 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
103e0 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
103f0 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e   STR_FUNCTION(zN
10400 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
10410 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10420 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10430 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
10440 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10450 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10460 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30  L), \.   pArg, 0
10470 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
10480 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49  me, }.#define LI
10490 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
104a0 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20  rg, arg, flags) 
104b0 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
104c0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
104d0 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67  SQLITE_UTF8|flag
104e0 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29  s, \.   (void *)
104f0 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
10500 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10510 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45   }.#define AGGRE
10520 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
10530 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
10540 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e  , xFinal) \.  {n
10550 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
10560 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
10570 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
10580 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10590 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
105a0 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
105b0 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47   {0}}.#define AG
105c0 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
105d0 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
105e0 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
105f0 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
10600 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
10610 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
10620 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
10630 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
10640 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
10650 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
10660 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  nal,#zName, {0}}
10670 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72  ../*.** All curr
10680 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61  ent savepoints a
10690 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  re stored in a l
106a0 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
106b0 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65  ing at.** sqlite
106c0 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68  3.pSavepoint. Th
106d0 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
106e0 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74  in the list is t
106f0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
10700 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70  .** opened savep
10710 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73  oint. Savepoints
10720 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
10730 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64  e list by the vd
10740 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69  be.** OP_Savepoi
10750 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
10760 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f  */.struct Savepo
10770 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  int {.  char *zN
10780 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
10790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
107a0 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e  avepoint name (n
107b0 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a  ul-terminated) *
107c0 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
107d0 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
107e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
107f0 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b  r of deferred fk
10800 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20   violations */. 
10810 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
10820 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  mCons;          
10830 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10840 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66  f deferred imm f
10850 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  k. */.  Savepoin
10860 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
10870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
10880 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  arent savepoint 
10890 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a  (if any) */.};..
108a0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
108b0 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20  ing are used as 
108c0 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d  the second param
108d0 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53  eter to sqlite3S
108e0 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61  avepoint(),.** a
108f0 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67  nd as the P1 arg
10900 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f  ument to the OP_
10910 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
10920 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ction..*/.#defin
10930 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  e SAVEPOINT_BEGI
10940 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  N      0.#define
10950 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
10960 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20  SE    1.#define 
10970 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
10980 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45  CK   2.../*.** E
10990 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c  ach SQLite modul
109a0 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65  e (virtual table
109b0 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20   definition) is 
109c0 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a  defined by an.**
109d0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
109e0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
109f0 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20  ture, stored in 
10a00 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64  the sqlite3.aMod
10a10 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  ule.** hash tabl
10a20 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64  e..*/.struct Mod
10a30 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71  ule {.  const sq
10a40 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
10a50 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20  odule;       /* 
10a60 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72  Callback pointer
10a70 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
10a80 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
10a90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
10aa0 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72  ame passed to cr
10ab0 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
10ac0 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20  .  void *pAux;  
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ae0 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20          /* pAux 
10af0 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
10b00 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
10b10 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
10b20 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20  void *);        
10b30 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65      /* Module de
10b40 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
10b50 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45  n */.  Table *pE
10b60 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  poTab;          
10b70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
10b80 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66  ponymous table f
10b90 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a  or this module *
10ba0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
10bb0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
10bc0 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
10bd0 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
10be0 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
10bf0 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
10c00 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
10c10 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
10c20 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
10c30 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
10c40 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20  umn, \000, then 
10c50 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78  the type */.  Ex
10c60 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
10c70 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
10c80 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
10c90 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b  /.  char *zColl;
10ca0 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e       /* Collatin
10cb0 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20  g sequence.  If 
10cc0 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65  NULL, use the de
10cd0 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f  fault */.  u8 no
10ce0 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41  tNull;      /* A
10cf0 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68  n OE_ code for h
10d00 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55  andling a NOT NU
10d10 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
10d20 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
10d30 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68  ;   /* One of th
10d40 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e  e SQLITE_AFF_...
10d50 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
10d60 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  szEst;        /*
10d70 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
10d80 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73  of value in this
10d90 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28   column. sizeof(
10da0 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20  INT)==1 */.  u8 
10db0 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a  colFlags;     /*
10dc0 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74   Boolean propert
10dd0 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41  ies.  See COLFLA
10de0 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77  G_ defines below
10df0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
10e00 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f  ed values for Co
10e10 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a  lumn.colFlags:.*
10e20 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
10e30 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30  G_PRIMKEY  0x000
10e40 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69  1    /* Column i
10e50 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  s part of the pr
10e60 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
10e70 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44  fine COLFLAG_HID
10e80 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20  DEN   0x0002    
10e90 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75  /* A hidden colu
10ea0 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20  mn in a virtual 
10eb0 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
10ec0 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50 45   COLFLAG_HASTYPE
10ed0 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
10ee0 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73  ype name follows
10ef0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a   column name */.
10f00 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
10f10 55 4e 49 51 55 45 20 20 20 30 78 30 30 30 38 20  UNIQUE   0x0008 
10f20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65 66     /* Column def
10f30 20 63 6f 6e 74 61 69 6e 73 20 22 55 4e 49 51 55   contains "UNIQU
10f40 45 22 20 6f 72 20 22 50 4b 22 20 2a 2f 0a 0a 2f  E" or "PK" */../
10f50 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
10f60 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
10f70 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
10f80 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
10f90 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
10fa0 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
10fb0 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
10fc0 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
10fd0 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
10fe0 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
10ff0 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
11000 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
11010 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
11020 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
11030 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
11040 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
11050 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
11060 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
11070 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
11080 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
11090 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
110a0 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
110b0 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
110c0 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
110d0 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
110e0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
110f0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
11100 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
11110 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
11120 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11140 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
11150 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
11160 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
11170 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
11180 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
11190 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
111a0 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
111b0 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
111c0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
111d0 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
111e0 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
111f0 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
11200 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
11210 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
11220 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
11230 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
11240 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
11250 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
11260 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
11270 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
11280 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
11290 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
112a0 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
112b0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
112c0 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45  LITE_SO_UNDEFINE
112d0 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20  D -1 /* No sort 
112e0 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20  order specified 
112f0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
11300 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
11310 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
11320 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
11330 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
11340 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
11350 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
11360 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
11370 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
11380 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
11390 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
113a0 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
113b0 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
113c0 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
113d0 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
113e0 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
113f0 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
11400 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
11410 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68  in with 'A'.  Th
11420 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
11430 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
11440 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
11450 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
11460 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
11470 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
11480 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
11490 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
114a0 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
114b0 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
114c0 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
114d0 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
114e0 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
114f0 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
11500 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
11510 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64  comparison.  And
11520 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69   the BLOB type i
11530 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66  s first..*/.#def
11540 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  ine SQLITE_AFF_B
11550 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66  LOB     'A'.#def
11560 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  ine SQLITE_AFF_T
11570 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66  EXT     'B'.#def
11580 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
11590 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66  UMERIC  'C'.#def
115a0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  ine SQLITE_AFF_I
115b0 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66  NTEGER  'D'.#def
115c0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ine SQLITE_AFF_R
115d0 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65  EAL     'E'..#de
115e0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75  fine sqlite3IsNu
115f0 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29  mericAffinity(X)
11600 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41    ((X)>=SQLITE_A
11610 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a  FF_NUMERIC)../*.
11620 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
11630 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61  F_MASK values ma
11640 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e  sks off the sign
11650 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20  ificant bits of 
11660 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76  an.** affinity v
11670 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  alue..*/.#define
11680 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
11690 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
116a0 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
116b0 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
116c0 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
116d0 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
116e0 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
116f0 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
11700 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
11710 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
11720 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
11730 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
11740 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
11750 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
11760 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
11770 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
11780 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
11790 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
117a0 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
117b0 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
117c0 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
117d0 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
117e0 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
117f0 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
11800 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45  define SQLITE_KE
11810 45 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20  EPNULL     0x08 
11820 20 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74   /* Used by vect
11830 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23  or == or <> */.#
11840 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
11850 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
11860 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
11870 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
11880 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
11890 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
118a0 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
118b0 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
118c0 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
118d0 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
118e0 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
118f0 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
11900 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
11910 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
11920 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
11930 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
11940 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
11950 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
11960 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
11970 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
11980 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
11990 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
119a0 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
119b0 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49   schema..**.** I
119c0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  f the database s
119d0 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
119e0 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f   then there is o
119f0 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
11a00 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
11a10 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
11a20 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73  se connection (s
11a30 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73  qlite3*) that us
11a40 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a  es the shared.**
11a50 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73   schema. This is
11a60 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61   because each da
11a70 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11a80 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f  n requires its o
11a90 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73  wn unique.** ins
11aa0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c  tance of the sql
11ab0 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
11ac0 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  e used to access
11ad0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
11ae0 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  le.** implementa
11af0 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
11b00 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
11b10 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
11b20 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73  tween.** databas
11b30 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65  e connections, e
11b40 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73  ven when the res
11b50 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  t of the in-memo
11b60 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73  ry database.** s
11b70 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
11b80 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   as the implemen
11b90 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f  tation often sto
11ba0 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  res the database
11bb0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  .** connection h
11bc0 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20  andle passed to 
11bd0 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e  it via the xConn
11be0 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65  ect() or xCreate
11bf0 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72  () method.** dur
11c00 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
11c10 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54  on internally. T
11c20 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
11c30 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d  nection handle m
11c40 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73  ay.** then be us
11c50 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61  ed by the virtua
11c60 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
11c70 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73  tation to access
11c80 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20   real tables.** 
11c90 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
11ca0 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
11cb0 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
11cc0 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a   of the callers.
11cd0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
11ce0 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
11cf0 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
11d00 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
11d10 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
11d20 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
11d30 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
11d40 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
11d50 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
11d60 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
11d70 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
11d80 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
11d90 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
11da0 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
11db0 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
11dc0 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
11dd0 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
11de0 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
11df0 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
11e00 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
11e10 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
11e20 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
11e30 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
11e40 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
11e50 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
11e60 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
11e70 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
11e80 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
11e90 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
11ea0 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
11eb0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
11ec0 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
11ed0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
11ee0 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
11ef0 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
11f00 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
11f10 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
11f20 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
11f30 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
11f40 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
11f50 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
11f60 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
11f70 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
11f80 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
11f90 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
11fa0 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
11fb0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
11fc0 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65  re not.** delete
11fd0 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
11fe0 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
11ff0 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
12000 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64  ect()ed.** immed
12010 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
12020 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20   they are moved 
12030 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70  from the Table.p
12040 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a  VTable list to.*
12050 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64  * another linked
12060 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20   list headed by 
12070 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73  the sqlite3.pDis
12080 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f  connect member o
12090 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  f the.** corresp
120a0 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73  onding sqlite3 s
120b0 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61  tructure. They a
120c0 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f  re then deleted/
120d0 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a  xDisconnected.**
120e0 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
120f0 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
12100 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
12110 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
12120 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
12130 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
12140 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
12150 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
12160 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
12170 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
12180 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
12190 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
121a0 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
121b0 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
121c0 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
121d0 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
121e0 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
121f0 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
12200 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
12210 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
12220 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
12230 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
12240 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
12250 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
12260 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
12270 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73  llocated by.** s
12280 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
12290 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
122a0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
122b0 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
122c0 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73  b as.** the firs
122d0 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73  t argument..*/.s
122e0 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20  truct VTable {. 
122f0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
12300 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
12310 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12320 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
12330 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  h this table */.
12340 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20    Module *pMod; 
12350 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
12360 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65  ointer to module
12370 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
12380 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
12390 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f  b *pVtab;      /
123a0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61  * Pointer to vta
123b0 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20  b instance */.  
123c0 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
123d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
123e0 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
123f0 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
12400 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74  e */.  u8 bConst
12410 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  raint;          
12420 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
12430 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70  traints are supp
12440 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  orted */.  int i
12450 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
12460 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66       /* Depth of
12470 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73   the SAVEPOINT s
12480 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65  tack */.  VTable
12490 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
124a0 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
124b0 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20  inked list (see 
124c0 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  above) */.};../*
124d0 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66  .** The schema f
124e0 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c  or each SQL tabl
124f0 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65  e and view is re
12500 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
12510 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73  ory.** by an ins
12520 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
12530 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
12540 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c  ..*/.struct Tabl
12550 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  e {.  char *zNam
12560 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
12570 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
12580 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c  or view */.  Col
12590 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20  umn *aCol;      
125a0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
125b0 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
125c0 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
125d0 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20  Index;       /* 
125e0 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65  List of SQL inde
125f0 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c  xes on this tabl
12600 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  e. */.  Select *
12610 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
12620 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e  NULL for tables.
12630 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69    Points to defi
12640 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77  nition if a view
12650 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b  . */.  FKey *pFK
12660 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ey;         /* L
12670 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c  inked list of al
12680 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69  l foreign keys i
12690 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
126a0 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
126b0 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
126c0 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
126d0 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
126e0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c  olumn */.  ExprL
126f0 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20  ist *pCheck;    
12700 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e  /* All CHECK con
12710 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20  straints */.    
12720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12730 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f     /*   ... also
12740 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20   used as column 
12750 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56  name list in a V
12760 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  IEW */.  int tnu
12770 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
12780 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   Root BTree page
12790 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
127a0 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66  */.  u32 nTabRef
127b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
127c0 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
127d0 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
127e0 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b  .  u32 tabFlags;
127f0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
12800 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
12810 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20  /.  i16 iPKey;  
12820 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
12830 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65  ot negative, use
12840 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20   aCol[iPKey] as 
12850 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  the rowid */.  i
12860 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  16 nCol;        
12870 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12880 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
12890 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
128a0 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20  st nRowLogEst;  
128b0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f   /* Estimated ro
128c0 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72  ws in table - fr
128d0 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
128e0 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
128f0 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20  t szTabRow;     
12900 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
12910 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20  e of each table 
12920 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  row in bytes */.
12930 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
12940 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20  ABLE_COSTMULT.  
12950 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b  LogEst costMult;
12960 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c       /* Cost mul
12970 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e  tiplier for usin
12980 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
12990 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43  #endif.  u8 keyC
129a0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
129b0 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
129c0 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
129d0 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
129e0 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  Key */.#ifndef S
129f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
12a00 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
12a10 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
12a20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
12a30 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
12a40 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
12a50 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
12a60 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
12a70 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
12a80 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
12a90 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
12aa0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
12ab0 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
12ac0 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
12ad0 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a   /* 0: module 1:
12ae0 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20   schema 2: vtab 
12af0 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20  name 3...: args 
12b00 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54  */.  VTable *pVT
12b10 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73  able;     /* Lis
12b20 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65  t of VTable obje
12b30 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  cts. */.#endif. 
12b40 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
12b50 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
12b60 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
12b70 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
12b80 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
12b90 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
12ba0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
12bb0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
12bc0 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
12bd0 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
12be0 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
12bf0 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
12c00 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
12c10 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61  ues for Table.ta
12c20 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46  bFlags..**.** TF
12c30 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69  _OOOHidden appli
12c40 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20  es to tables or 
12c50 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68  view that have h
12c60 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68  idden columns th
12c70 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  at are.** follow
12c80 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e  ed by non-hidden
12c90 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70   columns.  Examp
12ca0 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52  le:  "CREATE VIR
12cb0 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49  TUAL TABLE x USI
12cc0 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49  NG.** vtab1(a HI
12cd0 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e  DDEN, b);".  Sin
12ce0 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d  ce "b" is a non-
12cf0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75  hidden column bu
12d00 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c  t "a" is hidden,
12d10 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69  .** the TF_OOOHi
12d20 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77  dden attribute w
12d30 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68  ould apply in th
12d40 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74  is case.  Such t
12d50 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a  ables require.**
12d60 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e   special handlin
12d70 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20  g during INSERT 
12d80 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23  processing..*/.#
12d90 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e  define TF_Readon
12da0 6c 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ly        0x0001
12db0 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79      /* Read-only
12dc0 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f   system table */
12dd0 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65  .#define TF_Ephe
12de0 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30  meral       0x00
12df0 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
12e00 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
12e10 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
12e20 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34  maryKey   0x0004
12e30 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
12e40 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
12e50 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
12e60 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
12e70 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  008    /* Intege
12e80 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
12e90 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
12ea0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
12eb0 53 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30  Stat1        0x0
12ec0 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f  010    /* nRowLo
12ed0 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71  gEst set from sq
12ee0 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64  lite_stat1 */.#d
12ef0 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
12f00 52 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20  Rowid    0x0020 
12f10 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20     /* No rowid. 
12f20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
12f30 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  the key */.#defi
12f40 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52  ne TF_NoVisibleR
12f50 6f 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20  owid  0x0040    
12f60 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62  /* No user-visib
12f70 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d  le "rowid" colum
12f80 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  n */.#define TF_
12f90 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20  OOOHidden       
12fa0 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74  0x0080    /* Out
12fb0 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e  -of-Order hidden
12fc0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66   columns */.#def
12fd0 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64  ine TF_StatsUsed
12fe0 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20         0x0100   
12ff0 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65   /* Query planne
13000 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65  r decisions affe
13010 63 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20  cted by.        
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
13040 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73  Index.aiRowLogEs
13050 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64  t[] values */.#d
13060 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e  efine TF_HasNotN
13070 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20  ull      0x0200 
13080 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e     /* Contains N
13090 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
130a0 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65  nts */../*.** Te
130b0 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
130c0 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
130d0 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
130e0 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
130f0 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
13100 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
13110 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
13120 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
13130 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
13140 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
13150 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
13160 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13170 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
13180 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
13190 61 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  al(X)      ((X)-
131a0 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c  >nModuleArg).#el
131b0 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
131c0 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
131d0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
131e0 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
131f0 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ne if a column i
13200 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64  s hidden.  IsOrd
13210 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
13220 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b  n().** only work
13230 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61  s for non-virtua
13240 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61  l tables (ordina
13250 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69  ry tables and vi
13260 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61  ews) and is.** a
13270 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65  lways false unle
13280 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ss SQLITE_ENABLE
13290 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20  _HIDDEN_COLUMNS 
132a0 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65  is defined.  The
132b0 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  .** IsHiddenColu
132c0 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65  mn() macro is ge
132d0 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a  neral purpose..*
132e0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
132f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
13300 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64  EN_COLUMNS).#  d
13310 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
13320 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
13330 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
13340 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
13350 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
13360 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
13370 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
13380 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
13390 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
133a0 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53  #elif !defined(S
133b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
133c0 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69  ALTABLE).#  defi
133d0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
133e0 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
133f0 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
13400 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
13410 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
13420 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
13430 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23  umn(X) 0.#else.#
13440 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
13450 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
13460 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
13470 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
13480 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
13490 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  f.../* Does the 
134a0 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
134b0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
134c0 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
134d0 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
134e0 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
134f0 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73  ==0).#define Vis
13500 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28  ibleRowid(X) (((
13510 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
13520 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
13530 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  )==0)../*.** Eac
13540 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  h foreign key co
13550 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69  nstraint is an i
13560 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
13570 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
13580 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65  re..**.** A fore
13590 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63  ign key is assoc
135a0 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74  iated with two t
135b0 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f  ables.  The "fro
135c0 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74  m" table is.** t
135d0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
135e0 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52  ntains the REFER
135f0 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61  ENCES clause tha
13600 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f  t creates the fo
13610 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54  reign.** key.  T
13620 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73  he "to" table is
13630 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
13640 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20  is named in the 
13650 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
13660 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74  e..** Consider t
13670 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a  his example:.**.
13680 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
13690 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20  BLE ex1(.**     
136a0 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d    a INTEGER PRIM
136b0 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20  ARY KEY,.**     
136c0 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53    b INTEGER CONS
136d0 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52  TRAINT fk1 REFER
136e0 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20  ENCES ex2(x).** 
136f0 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72      );.**.** For
13700 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b   foreign key "fk
13710 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  1", the from-tab
13720 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20  le is "ex1" and 
13730 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
13740 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61  "ex2"..** Equiva
13750 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a  lent names:.**.*
13760 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65  *     from-table
13770 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a   == child-table.
13780 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c  **       to-tabl
13790 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c  e == parent-tabl
137a0 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46  e.**.** Each REF
137b0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67  ERENCES clause g
137c0 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74  enerates an inst
137d0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
137e0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
137f0 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61  ** which is atta
13800 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d  ched to the from
13810 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d  -table.  The to-
13820 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65  table need not e
13830 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65  xist when.** the
13840 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63   from-table is c
13850 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69  reated.  The exi
13860 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f  stence of the to
13870 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68  -table is not ch
13880 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ecked..**.** The
13890 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72   list of all par
138a0 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54  ents for child T
138b0 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61  able X is held a
138c0 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a  t X.pFKey..**.**
138d0 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63   A list of all c
138e0 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61  hildren for a ta
138f0 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69  ble named Z (whi
13900 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65  ch might not eve
13910 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68  n exist).** is h
13920 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b  eld in Schema.fk
13930 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61  eyHash with a ha
13940 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a  sh key of Z..*/.
13950 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
13960 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
13970 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
13980 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
13990 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
139a0 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
139b0 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
139c0 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74  /* Next FKey wit
139d0 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46  h the same in pF
139e0 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74  rom. Next parent
139f0 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   of pFrom */.  c
13a00 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
13a10 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
13a20 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
13a30 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50  oints to (aka: P
13a40 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79  arent) */.  FKey
13a50 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a   *pNextTo;    /*
13a60 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73   Next with the s
13a70 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68  ame zTo. Next ch
13a80 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20  ild of zTo. */. 
13a90 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20   FKey *pPrevTo; 
13aa0 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77     /* Previous w
13ab0 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
13ac0 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
13ad0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13ae0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
13af0 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
13b00 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
13b10 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
13b20 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20  erred;       /* 
13b30 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
13b40 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64  nt checking is d
13b50 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d  eferred till COM
13b60 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74  MIT */.  u8 aAct
13b70 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ion[2];        /
13b80 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
13b90 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
13ba0 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
13bb0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
13bc0 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72  Trigger[2];/* Tr
13bd0 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
13be0 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
13bf0 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
13c00 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69   {      /* Mappi
13c10 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng of columns in
13c20 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e   pFrom to column
13c30 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20  s in zTo */.    
13c40 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20  int iFrom;      
13c50 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
13c60 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f  f column in pFro
13c70 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  m */.    char *z
13c80 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Col;           /
13c90 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
13ca0 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c   in zTo.  If NUL
13cb0 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  L use PRIMARY KE
13cc0 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
13cd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13ce0 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
13cf0 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
13d00 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
13d10 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
13d20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
13d30 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
13d40 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
13d50 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
13d60 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
13d70 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
13d80 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
13d90 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
13da0 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
13db0 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
13dc0 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
13dd0 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
13de0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
13df0 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
13e00 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
13e10 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
13e20 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
13e30 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
13e40 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
13e50 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
13e60 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
13e70 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
13e80 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
13e90 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
13ea0 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
13eb0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
13ec0 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
13ed0 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
13ee0 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
13ef0 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
13f00 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
13f10 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
13f20 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
13f30 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
13f40 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
13f50 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
13f60 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
13f70 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
13f80 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
13f90 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
13fa0 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
13fb0 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
13fc0 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
13fd0 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
13fe0 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
13ff0 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
14000 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
14010 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
14020 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
14030 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
14040 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
14050 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
14060 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
14070 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
14080 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
14090 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
140a0 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
140b0 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
140c0 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
140d0 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
140e0 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
140f0 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
14100 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
14110 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
14120 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
14130 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
14140 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
14150 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
14160 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
14170 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
14180 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
14190 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
141a0 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
141b0 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
141c0 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
141d0 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
141e0 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
141f0 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
14200 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
14210 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  key..**.** The f
14220 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
14230 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
14240 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
14250 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
14260 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
14270 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
14280 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
14290 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
142a0 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
142b0 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
142c0 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
142d0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
142e0 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
142f0 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
14300 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
14310 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
14320 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
14330 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
14340 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
14350 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
14360 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
14370 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
14380 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
14390 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
143a0 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
143b0 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
143c0 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
143d0 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
143e0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
143f0 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
14400 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
14410 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
14420 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
14430 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
14440 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
14450 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
14460 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
14470 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
14480 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
14490 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
144a0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
144b0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
144c0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
144d0 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
144e0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
144f0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
14500 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
14510 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
14520 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
14530 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
14540 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
14550 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61  t  10  /* Do wha
14560 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
14570 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
14580 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
14590 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
145a0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
145b0 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
145c0 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
145d0 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
145e0 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
145f0 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
14600 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
14610 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
14620 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
14630 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
14640 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
14650 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
14660 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
14670 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
14680 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
14690 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
146a0 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
146b0 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
146c0 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
146d0 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
146e0 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
146f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14700 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
14710 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
14720 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
14730 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
14740 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
14750 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
14760 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
14770 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
14780 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e  Field;      /* N
14790 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
147a0 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
147b0 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46  x */.  u16 nAllF
147c0 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f  ield;      /* To
147d0 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63  tal columns, inc
147e0 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20  luding key plus 
147f0 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69  others */.  sqli
14800 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
14810 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
14820 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
14830 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
14840 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
14850 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
14860 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
14870 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
14880 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
14890 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
148a0 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
148b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ../*.** This obj
148c0 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ect holds a reco
148d0 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65  rd which has bee
148e0 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
148f0 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
14900 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20  fields, for the 
14910 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e  purposes of doin
14920 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  g a comparison..
14930 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
14940 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
14950 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
14960 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
14970 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
14980 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
14990 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
149a0 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
149b0 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
149c0 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
149d0 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
149e0 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
149f0 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
14a00 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
14a10 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
14a20 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
14a30 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
14a40 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
14a50 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69  code..**.** An i
14a60 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
14a70 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73  object serves as
14a80 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69   a "key" for doi
14a90 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a  ng a search on.*
14aa0 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65  * an index b+tre
14ab0 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74  e. The goal of t
14ac0 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20  he search is to 
14ad0 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74  find the entry t
14ae0 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64  hat.** is closed
14af0 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63   to the key desc
14b00 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62  ribed by this ob
14b10 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65  ject.  This obje
14b20 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a  ct might hold.**
14b30 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f   just a prefix o
14b40 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20  f the key.  The 
14b50 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
14b60 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20   is given by.** 
14b70 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
14b80 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
14b90 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65  nd r2 fields are
14ba0 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72   the values to r
14bb0 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65  eturn if this ke
14bc0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a  y is less than.*
14bd0 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  * or greater tha
14be0 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62  n a key in the b
14bf0 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65  tree, respective
14c00 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e  ly.  These are n
14c10 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e  ormally.** -1 an
14c20 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c  d +1 respectivel
14c30 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20  y, but might be 
14c40 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61  inverted to +1 a
14c50 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74  nd -1 if the b-t
14c60 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53  ree.** is in DES
14c70 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  C order..**.** T
14c80 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
14c90 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75  n functions actu
14ca0 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61  ally return defa
14cb0 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79  ult_rc when they
14cc0 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61   find.** an equa
14cd0 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  ls comparison.  
14ce0 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
14cf0 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20  e -1, 0, or +1. 
14d00 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a   If there are.**
14d10 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
14d20 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s in the b-tree 
14d30 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
14d40 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f  y (when only loo
14d50 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66  king.** at the f
14d60 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  irst pKeyInfo->n
14d70 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65  Fields,) then de
14d80 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
14d90 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20  set to -1 to.** 
14da0 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
14db0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73   to find the las
14dc0 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74  t match, or +1 t
14dd0 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  o cause the sear
14de0 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68  ch to.** find th
14df0 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a  e first match..*
14e00 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
14e10 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
14e20 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65  s will set eqSee
14e30 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65  n to true if the
14e40 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e  y ever.** get an
14e50 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20  d equal results 
14e60 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74  when comparing t
14e70 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f  his structure to
14e80 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64   a b-tree record
14e90 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c  ..** When defaul
14ea0 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61  t_rc!=0, the sea
14eb0 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70  rch might end up
14ec0 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   on the record i
14ed0 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65  mmediately.** be
14ee0 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d  fore the first m
14ef0 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74  atch or immediat
14f00 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61  ely after the la
14f10 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a  st match.  The.*
14f20 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77  * eqSeen field w
14f30 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65  ill indicate whe
14f40 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
14f50 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74  xact match exist
14f60 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72  s in the.** b-tr
14f70 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ee..*/.struct Un
14f80 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
14f90 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
14fa0 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
14fb0 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
14fc0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
14fd0 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
14fe0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
14ff0 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
15000 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15010 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
15020 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
15030 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
15040 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
15050 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
15060 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
15070 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
15080 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
15090 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
150a0 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
150b0 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38  r NOMEM) */.  i8
150c0 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   r1;            
150d0 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
150e0 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72  turn if (lhs < r
150f0 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20  hs) */.  i8 r2; 
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15110 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
15120 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a  if (lhs > rhs) *
15130 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20  /.  u8 eqSeen;  
15140 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
15150 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63  if an equality c
15160 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65  omparison has be
15170 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a  en seen */.};...
15180 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69  /*.** Each SQL i
15190 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e  ndex is represen
151a0 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
151b0 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
151c0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
151d0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
151e0 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  * The columns of
151f0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
15200 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65  are to be indexe
15210 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a  d are described.
15220 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75  ** by the aiColu
15230 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68  mn[] field of th
15240 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  is structure.  F
15250 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70  or example, supp
15260 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74  ose.** we have t
15270 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
15280 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a  le and index:.**
15290 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
152a0 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c  ABLE Ex1(c1 int,
152b0 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74   c2 int, c3 text
152c0 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  );.**     CREATE
152d0 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78   INDEX Ex2 ON Ex
152e0 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20  1(c3,c1);.**.** 
152f0 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72  In the Table str
15300 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
15310 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62  g Ex1, nCol==3 b
15320 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
15330 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e  .** three column
15340 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
15350 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74   In the Index st
15360 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
15370 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75  ng.** Ex2, nColu
15380 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66  mn==2 since 2 of
15390 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f   the 3 columns o
153a0 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65  f Ex1 are indexe
153b0 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  d..** The value 
153c0 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b  of aiColumn is {
153d0 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e  2, 0}.  aiColumn
153e0 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74  [0]==2 because t
153f0 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  he.** first colu
15400 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
15410 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
15420 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
15430 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
15440 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
15450 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
15460 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
15470 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
15480 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
15490 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
154a0 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
154b0 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
154c0 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
154d0 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
154e0 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
154f0 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
15500 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
15510 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
15520 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
15530 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
15540 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
15550 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
15560 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
15570 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
15580 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
15590 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
155a0 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
155b0 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
155c0 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f  solution.** algo
155d0 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
155e0 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
155f0 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
15600 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
15610 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
15620 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69  *.** While parsi
15630 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  ng a CREATE TABL
15640 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45  E or CREATE INDE
15650 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f  X statement in o
15660 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72  rder to.** gener
15670 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61  ate VDBE code (a
15680 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72  s opposed to par
15690 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72  sing one read fr
156a0 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73  om an sqlite_mas
156b0 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20  ter.** table as 
156c0 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20  part of parsing 
156d0 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
156e0 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72  base schema), tr
156f0 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65  ansient instance
15700 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  s.** of this str
15710 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72  ucture may be cr
15720 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63  eated. In this c
15730 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e  ase the Index.tn
15740 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a  um variable is.*
15750 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
15760 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
15770 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f   VDBE instructio
15780 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  n, not a databas
15790 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  e page.** number
157a0 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68   (it cannot - th
157b0 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
157c0 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64  is not allocated
157d0 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a   until the VDBE.
157e0 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78  ** program is ex
157f0 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e  ecuted). See con
15800 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77  vertToWithoutRow
15810 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65  idTable() for de
15820 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tails..*/.struct
15830 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20   Index {.  char 
15840 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
15850 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
15860 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
15870 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  16 *aiColumn;   
15880 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
15890 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
158a0 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
158b0 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
158c0 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67  LogEst *aiRowLog
158d0 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d  Est;     /* From
158e0 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
158f0 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
15900 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
15910 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
15920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
15930 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67   SQL table being
15940 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68   indexed */.  ch
15950 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
15960 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
15970 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
15980 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
15990 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
159a0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
159b0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
159c0 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
159d0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
159e0 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
159f0 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
15a00 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
15a10 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64  taining this ind
15a20 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  ex */.  u8 *aSor
15a30 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
15a40 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /* for each col
15a50 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn: True==DESC,
15a60 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
15a70 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a   const char **az
15a80 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72  Coll;     /* Arr
15a90 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20  ay of collation 
15aa0 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66  sequence names f
15ab0 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  or index */.  Ex
15ac0 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72  pr *pPartIdxWher
15ad0 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20  e;     /* WHERE 
15ae0 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
15af0 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20  al indices */.  
15b00 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78  ExprList *aColEx
15b10 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  pr;      /* Colu
15b20 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  mn expressions *
15b30 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15b50 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69  DB Page containi
15b60 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20  ng root of this 
15b70 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73  index */.  LogEs
15b80 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20  t szIdxRow;     
15b90 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
15ba0 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
15bb0 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  e in bytes */.  
15bc0 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20  u16 nKeyCol;    
15bd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15be0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
15bf0 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f  rming the key */
15c00 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
15c10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15c20 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
15c30 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69   stored in the i
15c40 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ndex */.  u8 onE
15c50 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
15c60 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20     /* OE_Abort, 
15c70 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65  OE_Ignore, OE_Re
15c80 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e  place, or OE_Non
15c90 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
15ca0 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20  idxType:2;      
15cb0 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d  /* 1==UNIQUE, 2=
15cc0 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d  =PRIMARY KEY, 0=
15cd0 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f  =CREATE INDEX */
15ce0 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f  .  unsigned bUno
15cf0 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55  rdered:1;   /* U
15d00 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f  se this index fo
15d10 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69  r == or IN queri
15d20 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73  es only */.  uns
15d30 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c  igned uniqNotNul
15d40 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66  l:1;  /* True if
15d50 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
15d60 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c  NULL for all col
15d70 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  umns */.  unsign
15d80 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20  ed isResized:1; 
15d90 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
15da0 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  sizeIndexObject(
15db0 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
15dc0 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  d */.  unsigned 
15dd0 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20  isCovering:1;   
15de0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
15df0 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e  is a covering in
15e00 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  dex */.  unsigne
15e10 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20  d noSkipScan:1; 
15e20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20    /* Do not try 
15e30 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e  to use skip-scan
15e40 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e   if true */.  un
15e50 73 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a  signed hasStat1:
15e60 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c  1;     /* aiRowL
15e70 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d  ogEst values com
15e80 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  e from sqlite_st
15e90 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  at1 */.  unsigne
15ea0 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20  d bNoQuery:1;   
15eb0 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20    /* Do not use 
15ec0 74 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70  this index to op
15ed0 74 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a  timize queries *
15ee0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
15ef0 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
15f00 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
15f10 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
15f20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
15f30 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
15f40 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
15f50 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
15f60 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
15f70 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
15f80 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
15f90 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
15fa0 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
15fb0 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
15fc0 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
15fd0 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
15fe0 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
15ff0 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
16000 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
16010 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  key */.  tRowcnt
16020 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
16030 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
16040 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20  hmic stat1 data 
16050 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a  for this index *
16060 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77  /.  tRowcnt nRow
16070 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20  Est0;        /* 
16080 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
16090 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
160a0 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23  n the index */.#
160b0 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
160c0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
160d0 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65  or Index.idxType
160e0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
160f0 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45  TE_IDXTYPE_APPDE
16100 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72  F      0   /* Cr
16110 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
16120 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66  TE INDEX */.#def
16130 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
16140 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31  PE_UNIQUE      1
16150 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73     /* Implements
16160 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
16170 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
16180 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
16190 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f  RIMARYKEY  2   /
161a0 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59  * Is the PRIMARY
161b0 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
161c0 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e  le */../* Return
161d0 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
161e0 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45   is a PRIMARY KE
161f0 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  Y index */.#defi
16200 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49  ne IsPrimaryKeyI
16210 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69  ndex(X)  ((X)->i
16220 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49  dxType==SQLITE_I
16230 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
16240 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  Y)../* Return tr
16250 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
16260 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
16270 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69  */.#define IsUni
16280 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20  queIndex(X)     
16290 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d   ((X)->onError!=
162a0 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65  OE_None)../* The
162b0 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b   Index.aiColumn[
162c0 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72  ] values are nor
162d0 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69  mally positive i
162e0 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20  nteger.  But.** 
162f0 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e  there are some n
16300 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 74  egative values t
16310 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61 6c  hat have special
16320 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65   meaning:.*/.#de
16330 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20  fine XN_ROWID   
16340 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e    (-1)     /* In
16350 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
16360 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  the rowid */.#de
16370 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20  fine XN_EXPR    
16380 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e    (-2)     /* In
16390 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
163a0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  an expression */
163b0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d  ../*.** Each sam
163c0 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ple stored in th
163d0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
163e0 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
163f0 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a  ted in memory.**
16400 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75   using a structu
16410 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e  re of this type.
16420 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74    See documentat
16430 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ion at the top o
16440 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65  f the.** analyze
16450 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  .c source file f
16460 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
16470 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
16480 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
16490 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20   {.  void *p;   
164a0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
164b0 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63  r to sampled rec
164c0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ord */.  int n; 
164d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
164e0 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20  ze of record in 
164f0 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63  bytes */.  tRowc
16500 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20  nt *anEq;    /* 
16510 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
16520 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
16530 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
16540 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
16550 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45  t *anLt;    /* E
16560 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
16570 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
16580 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
16590 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
165a0 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20  nt *anDLt;   /* 
165b0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
165c0 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
165d0 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
165e0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
165f0 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
16600 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
16610 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
16620 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
16630 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
16640 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
16650 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
16660 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  ession..**.** No
16670 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30  te if Token.z==0
16680 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20   then Token.dyn 
16690 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20  and Token.n are 
166a0 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a  undefined and.**
166b0 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e   may contain ran
166c0 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20  dom values.  Do 
166d0 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73  not make any ass
166e0 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54  umptions about T
166f0 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20  oken.dyn.** and 
16700 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b  Token.n when Tok
16710 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75  en.z==0..*/.stru
16720 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
16730 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
16740 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
16750 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
16760 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
16770 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
16780 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16790 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
167a0 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
167b0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
167c0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
167d0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
167e0 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
167f0 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
16800 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
16810 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
16820 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16830 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
16840 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
16850 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
16860 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
16870 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
16880 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
16890 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
168a0 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
168b0 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
168c0 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
168d0 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
168e0 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
168f0 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
16900 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
16910 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
16920 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
16930 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
16940 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
16950 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
16960 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
16970 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
16980 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
16990 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
169a0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
169b0 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
169c0 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
169d0 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
169e0 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
169f0 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
16a00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
16a10 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
16a20 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
16a30 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
16a40 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
16a50 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
16a60 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
16a70 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
16a80 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
16a90 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
16aa0 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
16ab0 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
16ac0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
16ad0 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
16ae0 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
16af0 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
16b00 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
16b20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
16b30 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
16b40 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
16b50 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
16b60 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
16b70 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
16b80 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
16b90 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
16ba0 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
16bb0 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
16bc0 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
16bd0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16be0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
16bf0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
16c00 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
16c10 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
16c20 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
16c30 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
16c40 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
16c50 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
16c60 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
16c70 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
16c80 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
16c90 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
16ca0 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
16cb0 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
16cc0 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
16cd0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
16ce0 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
16cf0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
16d00 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
16d10 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
16d20 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
16d30 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
16d40 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16d60 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
16d70 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
16d80 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
16d90 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
16da0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
16db0 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
16dc0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
16dd0 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
16de0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
16df0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
16e00 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
16e10 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
16e20 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
16e30 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
16e40 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
16e50 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
16e60 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
16e70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16e80 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
16e90 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
16ea0 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
16eb0 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
16ec0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16ed0 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
16ee0 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
16ef0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16f00 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
16f10 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
16f20 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
16f30 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
16f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16f50 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
16f60 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16f70 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
16f80 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
16f90 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
16fa0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
16fb0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
16fc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16fd0 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
16fe0 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
16ff0 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
17000 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
17010 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
17020 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
17030 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
17040 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
17050 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
17060 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
17070 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
17080 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
17090 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
170a0 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
170b0 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
170c0 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
170d0 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
170e0 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
170f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17100 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
17110 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
17120 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
17130 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
17140 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
17150 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
17160 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
17170 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
17180 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
17190 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
171a0 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
171b0 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
171c0 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
171d0 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
171e0 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
171f0 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
17200 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
17210 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
17220 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
17230 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
17240 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
17250 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
17260 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
17270 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
17280 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
17290 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
172a0 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
172b0 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
172c0 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
172d0 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
172e0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
172f0 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
17300 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
17310 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
17320 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
17330 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
17340 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
17350 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
17360 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
17370 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
17380 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
17390 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
173a0 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
173b0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
173c0 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
173d0 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
173e0 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
173f0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
17400 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
17410 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
17420 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
17430 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
17440 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
17450 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
17460 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
17470 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
17480 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
17490 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
174a0 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
174b0 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
174c0 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
174d0 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
174e0 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
174f0 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
17500 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
17510 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
17520 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
17530 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
17540 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
17550 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
17560 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20  AT, TK_BLOB,.** 
17570 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
17580 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
17590 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
175a0 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
175b0 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
175c0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
175d0 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
175e0 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
175f0 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
17600 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  the.** variable 
17610 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
17620 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17630 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
17640 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
17650 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
17660 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
17670 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
17680 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
17690 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
176a0 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
176b0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
176c0 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
176d0 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
176e0 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
176f0 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
17700 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
17710 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
17720 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
17730 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17740 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
17750 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
17760 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
17770 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
17780 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
17790 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
177a0 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
177b0 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
177c0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
177d0 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
177e0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
177f0 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
17800 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
17810 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
17820 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
17830 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
17840 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
17850 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
17860 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
17870 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
17880 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76  .x.pList is.** v
17890 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
178a0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
178b0 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
178c0 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
178d0 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
178e0 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
178f0 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
17900 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
17910 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
17920 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
17930 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
17940 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
17950 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
17960 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
17970 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
17980 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
17990 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
179a0 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
179b0 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
179c0 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
179d0 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
179e0 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
179f0 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
17a00 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
17a10 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
17a20 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
17a30 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
17a40 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
17a50 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
17a60 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
17a70 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
17a80 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
17a90 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
17aa0 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
17ab0 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
17ac0 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  ark.** character
17ad0 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
17ae0 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
17af0 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
17b00 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a  olds the index.*
17b10 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
17b20 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
17b30 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
17b40 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
17b50 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
17b60 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
17b70 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
17b80 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
17b90 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
17ba0 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
17bb0 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
17bc0 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
17bd0 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
17be0 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
17bf0 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
17c00 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
17c10 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
17c20 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
17c30 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
17c40 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
17c50 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
17c60 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
17c70 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
17c80 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
17c90 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
17ca0 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
17cb0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
17cc0 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
17cd0 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
17ce0 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
17cf0 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
17d00 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
17d10 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
17d20 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
17d30 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
17d40 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
17d50 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
17d60 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
17d70 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
17d80 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
17d90 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
17da0 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
17db0 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
17dc0 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
17dd0 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
17de0 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
17df0 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
17e00 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
17e10 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
17e20 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
17e30 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
17e40 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
17e50 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
17e60 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
17e70 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
17e80 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
17e90 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
17ea0 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
17eb0 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
17ec0 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
17ed0 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
17ee0 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
17ef0 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
17f00 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
17f10 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
17f20 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
17f30 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
17f40 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
17f50 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
17f60 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
17f70 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
17f80 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
17f90 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
17fa0 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
17fb0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
17fc0 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
17fd0 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
17fe0 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
17ff0 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
18000 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
18010 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
18020 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
18030 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
18040 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
18050 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
18060 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
18070 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
18080 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
18090 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
180a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
180b0 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c  inity of the col
180c0 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20  umn or 0 if not 
180d0 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  a column */.  u3
180e0 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
180f0 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
18100 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65  flags.  EP_* See
18110 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f   below */.  unio
18120 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54  n {.    char *zT
18130 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  oken;          /
18140 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a  * Token value. Z
18150 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61  ero terminated a
18160 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20  nd dequoted */. 
18170 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20     int iValue;  
18180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e            /* Non
18190 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
181a0 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e  r value if EP_In
181b0 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b  tValue */.  } u;
181c0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
181d0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
181e0 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
181f0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
18200 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
18210 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
18220 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
18230 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
18240 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
18250 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
18260 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
18270 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
18280 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
18290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
182a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
182b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
182c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
182d0 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74  /..  Expr *pLeft
182e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
182f0 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  eft subnode */. 
18300 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20   Expr *pRight;  
18310 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74          /* Right
18320 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e   subnode */.  un
18330 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
18340 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f  st *pList;     /
18350 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  * op = IN, EXIST
18360 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c  S, SELECT, CASE,
18370 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45   FUNCTION, BETWE
18380 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  EN */.    Select
18390 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
183a0 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61  * EP_xIsSelect a
183b0 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  nd op = IN, EXIS
183c0 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  TS, SELECT */.  
183d0 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } x;..  /* If th
183e0 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
183f0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
18400 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
18410 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
18420 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
18430 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
18440 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
18450 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
18460 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
18470 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
18480 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
18490 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
184a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
184b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
184c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
184d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
184e0 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  **/..#if SQLITE_
184f0 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
18500 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
18510 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69            /* Hei
18520 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20  ght of the tree 
18530 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e  headed by this n
18540 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
18550 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
18560 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
18570 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62  UMN: cursor numb
18580 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64  er of table hold
18590 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185b0 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54      ** TK_REGIST
185c0 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  ER: register num
185d0 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ber.            
185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
185f0 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e  TK_TRIGGER: 1 ->
18600 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20   new, 0 -> old. 
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e          ** EP_Un
18630 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37  likely:  1342177
18640 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68  28 times likelih
18650 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  ood.            
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
18670 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72  TK_SELECT: 1st r
18680 65 67 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c  egister of resul
18690 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e  t vector */.  yn
186a0 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  Var iColumn;    
186b0 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
186c0 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e  N: column index.
186d0 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a    -1 for rowid..
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56           ** TK_V
18700 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c  ARIABLE: variabl
18710 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73  e number (always
18720 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20   >= 1)..        
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18740 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f   ** TK_SELECT_CO
18750 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20  LUMN: column of 
18760 74 68 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f  the result vecto
18770 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  r */.  i16 iAgg;
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18790 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
187a0 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
187b0 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
187c0 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
187d0 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
187e0 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
187f0 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
18800 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
18810 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
18820 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
18830 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
18840 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
18870 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
18880 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
18890 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
188b0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
188c0 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
188d0 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
188e0 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
188f0 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
18900 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
18910 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62  UNCTION */.  Tab
18920 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
18930 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72      /* Table for
18940 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65   TK_COLUMN expre
18950 73 73 69 6f 6e 73 2e 20 20 43 61 6e 20 62 65 20  ssions.  Can be 
18960 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20  NULL.           
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18980 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66   for a column of
18990 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20   an index on an 
189a0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b  expression */.};
189b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
189c0 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
189d0 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
189e0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
189f0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
18a00 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
18a10 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
18a20 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49  inates in ON/USI
18a30 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74  NG clause of out
18a40 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
18a50 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
18a60 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
18a70 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
18a80 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
18a90 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
18aa0 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30  EP_HasFunc   0x0
18ab0 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e  00004 /* Contain
18ac0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75  s one or more fu
18ad0 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b  nctions of any k
18ae0 69 6e 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ind */.         
18af0 20 20 20 20 20 20 20 20 20 2f 2a 20 30 78 30 30           /* 0x00
18b00 30 30 30 38 20 2f 2f 20 61 76 61 69 6c 61 62 6c  0008 // availabl
18b10 65 20 66 6f 72 20 75 73 65 20 2a 2f 0a 23 64 65  e for use */.#de
18b20 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
18b30 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67    0x000010 /* Ag
18b40 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
18b50 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
18b60 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
18b70 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
18b80 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
18b90 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
18ba0 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
18bb0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
18bc0 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
18bd0 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
18be0 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
18bf0 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
18c00 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
18c10 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
18c20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
18c30 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
18c40 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
18c50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
18c60 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
18c70 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
18c80 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
18c90 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
18ca0 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
18cb0 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
18cc0 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
18cd0 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
18ce0 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
18cf0 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
18d00 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
18d10 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
18d20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
18d30 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
18d40 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
18d50 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
18d60 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
18d70 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
18d80 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
18d90 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72   COLLATE, AS, or
18da0 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65   UNLIKELY */.#de
18db0 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
18dc0 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
18dd0 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
18de0 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
18df0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
18e00 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
18e10 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
18e20 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
18e30 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
18e40 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
18e50 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30  P_Static    0x00
18e60 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20  8000 /* Held in 
18e70 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69  memory not obtai
18e80 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
18e90 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
18ea0 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
18eb0 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
18ec0 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
18ed0 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
18ee0 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
18ef0 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
18f00 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
18f10 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
18f20 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
18f30 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
18f40 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
18f50 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
18f60 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
18f70 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78   EP_ConstFunc 0x
18f80 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49  080000 /* A SQLI
18f90 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
18fa0 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e   or _SLOCHNG fun
18fb0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
18fc0 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78   EP_CanBeNull 0x
18fd0 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65  100000 /* Can be
18fe0 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f   null despite NO
18ff0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
19000 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
19010 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30  Subquery  0x2000
19020 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
19030 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20  ins a TK_SELECT 
19040 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
19050 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20  ine EP_Alias    
19060 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20   0x400000 /* Is 
19070 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72  an alias for a r
19080 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
19090 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c   */.#define EP_L
190a0 65 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30  eaf      0x80000
190b0 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c  0 /* Expr.pLeft,
190c0 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65   .pRight, .u.pSe
190d0 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f  lect all NULL */
190e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50  ../*.** The EP_P
190f0 72 6f 70 61 67 61 74 65 20 6d 61 73 6b 20 69 73  ropagate mask is
19100 20 61 20 73 65 74 20 6f 66 20 70 72 6f 70 65 72   a set of proper
19110 74 69 65 73 20 74 68 61 74 20 61 75 74 6f 6d 61  ties that automa
19120 74 69 63 61 6c 6c 79 20 70 72 6f 70 61 67 61 74  tically propagat
19130 65 0a 2a 2a 20 75 70 77 61 72 64 73 20 69 6e 74  e.** upwards int
19140 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a  o parent nodes..
19150 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72  */.#define EP_Pr
19160 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c  opagate (EP_Coll
19170 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79 7c  ate|EP_Subquery|
19180 45 50 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a  EP_HasFunc)../*.
19190 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
191a0 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
191b0 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
191c0 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
191d0 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  * Expr.flags fie
191e0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
191f0 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45  xprHasProperty(E
19200 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66  ,P)     (((E)->f
19210 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
19220 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c  efine ExprHasAll
19230 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
19240 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
19250 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45  ==(P)).#define E
19260 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45  xprSetProperty(E
19270 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61  ,P)     (E)->fla
19280 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
19290 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74  ExprClearPropert
192a0 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c  y(E,P)   (E)->fl
192b0 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68  ags&=~(P)../* Th
192c0 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
192d0 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20  erty() macro is 
192e0 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63  used for Verific
192f0 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
19300 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64  n,.** and Accred
19310 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49  itation only.  I
19320 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70  t works like Exp
19330 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64  rSetProperty() d
19340 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f  uring VVA.** pro
19350 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20  cesses but is a 
19360 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65  no-op for delive
19370 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
19380 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
19390 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
193a0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29  operty(E,P)  (E)
193b0 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c  ->flags|=(P).#el
193c0 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  se.# define Expr
193d0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
193e0 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,P).#endif../*.*
193f0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
19400 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
19410 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72   of bytes requir
19420 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45  ed by a normal E
19430 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61  xpr.** struct, a
19440 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
19450 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  th the EP_Reduce
19460 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78  d flag set in Ex
19470 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20  pr.flags.** and 
19480 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
19490 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e  ith the EP_Token
194a0 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a  Only flag set..*
194b0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46  /.#define EXPR_F
194c0 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20  ULLSIZE         
194d0 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20    sizeof(Expr)  
194e0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c           /* Full
194f0 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65   size */.#define
19500 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
19510 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f  E        offseto
19520 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20  f(Expr,iTable)  
19530 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72  /* Common featur
19540 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  es */.#define EX
19550 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
19560 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
19570 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20  xpr,pLeft)   /* 
19580 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a  Fewer features *
19590 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70  /../*.** Flags p
195a0 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c  assed to the sql
195b0 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75  ite3ExprDup() fu
195c0 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20  nction. See the 
195d0 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a  header comment.*
195e0 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45  * above sqlite3E
195f0 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74  xprDup() for det
19600 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
19610 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
19620 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
19630 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d  /* Used reduced-
19640 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20  size Expr nodes 
19650 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74  */../*.** A list
19660 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   of expressions.
19670 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f    Each expressio
19680 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  n may optionally
19690 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e   have a.** name.
196a0 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63    An expr/name c
196b0 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62  ombination can b
196c0 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61  e used in severa
196d0 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20  l ways, such.** 
196e0 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22  as the list of "
196f0 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c  expr AS ID" fiel
19700 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22  ds following a "
19710 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68  SELECT" or in th
19720 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44  e.** list of "ID
19730 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69   = expr" items i
19740 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20  n an UPDATE.  A 
19750 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
19760 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20  ons can.** also 
19770 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
19780 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e  rgument to a fun
19790 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20  ction, in which 
197a0 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65  case the a.zName
197b0 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74  .** field is not
197c0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20   used..**.** By 
197d0 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72  default the Expr
197e0 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c  .zSpan field hol
197f0 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  ds a human-reada
19800 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ble description 
19810 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  of.** the expres
19820 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65  sion that is use
19830 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
19840 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73  ion of error mes
19850 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c  sages and.** col
19860 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20  umn labels.  In 
19870 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e  this case, Expr.
19880 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c  zSpan is typical
19890 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ly the text of a
198a0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65  .** column expre
198b0 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73  ssion as it exis
198c0 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ts in a SELECT s
198d0 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76  tatement.  Howev
198e0 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53  er, if.** the bS
198f0 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73  panIsTab flag is
19900 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e   set, then zSpan
19910 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74   is overloaded t
19920 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a  o mean the name.
19930 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ** of the result
19940 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66   column in the f
19950 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41  orm: DATABASE.TA
19960 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69  BLE.COLUMN.  Thi
19970 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20  s later.** form 
19980 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65  is used for name
19990 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68   resolution with
199a0 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61   nested FROM cla
199b0 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  uses..*/.struct 
199c0 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74  ExprList {.  int
199d0 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20   nExpr;         
199e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
199f0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20   expressions on 
19a00 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74  the list */.  st
19a10 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
19a20 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
19a30 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
19a40 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
19a50 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
19a60 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
19a70 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 69  rse tree for thi
19a80 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
19a90 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19ab0 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
19ac0 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
19ad0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
19ae0 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
19af0 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
19b00 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
19b10 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
19b20 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
19b30 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
19b40 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
19b50 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
19b60 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
19b70 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
19b80 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
19b90 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
19ba0 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
19bb0 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
19bc0 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
19bd0 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
19be0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
19bf0 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
19c00 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
19c10 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
19c20 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  e */.    union {
19c30 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
19c40 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
19c50 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
19c60 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
19c70 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
19c80 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
19c90 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
19ca0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
19cb0 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
19cc0 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
19cd0 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
19ce0 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
19cf0 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
19d00 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
19d10 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
19d20 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
19d30 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  } u;.  } a[1];  
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20  /* One slot for 
19d60 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
19d70 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  in the list */.}
19d80 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
19d90 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
19da0 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20  ucture can hold 
19db0 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66  a simple list of
19dc0 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a   identifiers,.**
19dd0 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73   such as the lis
19de0 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65  t "a,b,c" in the
19df0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
19e00 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ments:.**.**    
19e10 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
19e20 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e  a,b,c) VALUES ..
19e30 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  .;.**      CREAT
19e40 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74  E INDEX idx ON t
19e50 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20  (a,b,c);.**     
19e60 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
19e70 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41  trig BEFORE UPDA
19e80 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e  TE ON t(a,b,c) .
19e90 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64  ..;.**.** The Id
19ea0 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64  List.a.idx field
19eb0 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68   is used when th
19ec0 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65  e IdList represe
19ed0 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  nts the list of.
19ee0 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ** column names 
19ef0 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61  after a table na
19f00 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20  me in an INSERT 
19f10 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74  statement.  In t
19f20 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a  he statement.**.
19f30 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  **     INSERT IN
19f40 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a  TO t(a,b,c) ....
19f50 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20  **.** If "a" is 
19f60 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20  the k-th column 
19f70 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68  of table "t", th
19f80 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69  en IdList.a[0].i
19f90 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  dx==k..*/.struct
19fa0 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75   IdList {.  stru
19fb0 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b  ct IdList_item {
19fc0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
19fd0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
19fe0 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72  f the identifier
19ff0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b   */.    int idx;
1a000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1a010 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65  ex in some Table
1a020 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c  .aCol[] of a col
1a030 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20  umn named zName 
1a040 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74  */.  } *a;.  int
1a050 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a   nId;         /*
1a060 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74   Number of ident
1a070 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69  ifiers on the li
1a080 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
1a090 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61  The bitmask data
1a0a0 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c  type defined bel
1a0b0 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76  ow is used for v
1a0c0 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
1a0d0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  ions..**.** Chan
1a0e0 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61  ging this from a
1a0f0 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d   64-bit to a 32-
1a100 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20  bit type limits 
1a110 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a  the number of.**
1a120 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69   tables in a joi
1a130 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20  n to 32 instead 
1a140 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61  of 64.  But it a
1a150 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20  lso reduces the 
1a160 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c  size.** of the l
1a170 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79  ibrary by 738 by
1a180 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a  tes on ix86..*/.
1a190 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42 49  #ifdef SQLITE_BI
1a1a0 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79 70  TMASK_TYPE.  typ
1a1b0 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d  edef SQLITE_BITM
1a1c0 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73 6b  ASK_TYPE Bitmask
1a1d0 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
1a1e0 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23  f u64 Bitmask;.#
1a1f0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1a200 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
1a210 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
1a220 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
1a230 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
1a240 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
1a250 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
1a260 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
1a270 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
1a280 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
1a290 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
1a2a0 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  sk)1)<<(n)).#def
1a2b0 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29  ine MASKBIT32(n)
1a2c0 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74   (((unsigned int
1a2d0 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
1a2e0 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20 28  e ALLBITS      (
1a2f0 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a  (Bitmask)-1)../*
1a300 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1a310 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
1a320 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
1a330 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1a340 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
1a350 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
1a360 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
1a370 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
1a380 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
1a390 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
1a3a0 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
1a3b0 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
1a3c0 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
1a3d0 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
1a3e0 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
1a3f0 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
1a400 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
1a410 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
1a420 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
1a430 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
1a440 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
1a450 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
1a460 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
1a470 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
1a480 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
1a490 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
1a4a0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
1a4b0 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
1a4c0 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
1a4d0 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
1a4e0 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
1a4f0 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
1a500 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
1a510 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
1a520 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
1a530 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
1a540 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
1a550 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
1a560 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
1a570 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
1a580 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
1a590 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
1a5a0 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
1a5b0 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
1a5c0 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
1a5d0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
1a5e0 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
1a5f0 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
1a600 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
1a610 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
1a620 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
1a630 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
1a640 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
1a650 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
1a660 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
1a670 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
1a680 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
1a690 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
1a6a0 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
1a6b0 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
1a6c0 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
1a6d0 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
1a6e0 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
1a6f0 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74   SrcList {.  int
1a700 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a   nSrc;        /*
1a710 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
1a720 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
1a730 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
1a740 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c  se */.  u32 nAll
1a750 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  oc;      /* Numb
1a760 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c  er of entries al
1a770 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62  located in a[] b
1a780 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74  elow */.  struct
1a790 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a   SrcList_item {.
1a7a0 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68      Schema *pSch
1a7b0 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20  ema;  /* Schema 
1a7c0 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74  to which this it
1a7d0 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20  em is fixed */. 
1a7e0 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61     char *zDataba
1a7f0 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  se;  /* Name of 
1a800 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1a810 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
1a820 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1a830 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1a840 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  the table */.   
1a850 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20   char *zAlias;  
1a860 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61     /* The "B" pa
1a870 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22  rt of a "A AS B"
1a880 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20   phrase.  zName 
1a890 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20  is the "A" */.  
1a8a0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1a8b0 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61      /* An SQL ta
1a8c0 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
1a8d0 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  g to zName */.  
1a8e0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1a8f0 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20  t;  /* A SELECT 
1a900 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69  statement used i
1a910 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
1a920 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  le name */.    i
1a930 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20  nt addrFillSub; 
1a940 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73   /* Address of s
1a950 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e  ubroutine to man
1a960 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79  ifest a subquery
1a970 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
1a980 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67  eturn;    /* Reg
1a990 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65  ister holding re
1a9a0 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20  turn address of 
1a9b0 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20  addrFillSub */. 
1a9c0 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74     int regResult
1a9d0 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
1a9e0 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74  s holding result
1a9f0 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e  s of a co-routin
1aa00 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
1aa10 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74  {.      u8 joint
1aa20 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70  ype;      /* Typ
1aa30 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65  e of join betwee
1aa40 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64  n this table and
1aa50 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
1aa60 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1aa70 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
1aa80 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1aa90 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
1aaa0 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
1aab0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49      unsigned isI
1aac0 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f  ndexedBy :1;   /
1aad0 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1aae0 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59  is an INDEXED BY
1aaf0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1ab00 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46   unsigned isTabF
1ab10 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54  unc :1;     /* T
1ab20 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c  rue if table-val
1ab30 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e  ued-function syn
1ab40 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  tax */.      uns
1ab50 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
1ab60 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
1ab70 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
1ab80 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
1ab90 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
1aba0 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
1abb0 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
1abc0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
1abd0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1abe0 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20  isRecursive :1; 
1abf0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65    /* True for re
1ac00 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63  cursive referenc
1ac10 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20  e in WITH */.   
1ac20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53   } fg;.#ifndef S
1ac30 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
1ac40 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
1ac50 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
1ac60 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
1ac70 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
1ac80 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
1ac90 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
1aca0 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
1acb0 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
1acc0 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
1acd0 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
1ace0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
1acf0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
1ad00 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
1ad10 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
1ad20 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
1ad30 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
1ad40 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
1ad50 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
1ad60 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
1ad70 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
1ad80 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
1ad90 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  ed */.    union 
1ada0 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49  {.      char *zI
1adb0 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20  ndexedBy;    /* 
1adc0 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
1add0 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
1ade0 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
1adf0 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a        ExprList *
1ae00 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72  pFuncArg;  /* Ar
1ae10 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65  guments to table
1ae20 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
1ae30 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20   */.    } u1;.  
1ae40 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65    Index *pIBInde
1ae50 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72  x;  /* Index str
1ae60 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e  ucture correspon
1ae70 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65  ding to u1.zInde
1ae80 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31  xedBy */.  } a[1
1ae90 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ];             /
1aea0 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
1aeb0 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20  each identifier 
1aec0 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
1aed0 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74  ;../*.** Permitt
1aee0 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
1aef0 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74   SrcList.a.joint
1af00 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65  ype field.*/.#de
1af10 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20  fine JT_INNER   
1af20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41    0x0001    /* A
1af30 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72  ny kind of inner
1af40 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a   or cross join *
1af50 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f  /.#define JT_CRO
1af60 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20  SS     0x0002   
1af70 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65   /* Explicit use
1af80 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65   of the CROSS ke
1af90 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
1afa0 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78   JT_NATURAL   0x
1afb0 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0004    /* True 
1afc0 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20  for a "natural" 
1afd0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1afe0 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30  JT_LEFT      0x0
1aff0 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  008    /* Left o
1b000 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
1b010 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20  fine JT_RIGHT   
1b020 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52    0x0010    /* R
1b030 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  ight outer join 
1b040 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55  */.#define JT_OU
1b050 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20  TER     0x0020  
1b060 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22    /* The "OUTER"
1b070 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73   keyword is pres
1b080 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ent */.#define J
1b090 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30  T_ERROR     0x00
1b0a0 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e  40    /* unknown
1b0b0 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20   or unsupported 
1b0c0 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f  join type */.../
1b0d0 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
1b0e0 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
1b0f0 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
1b100 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
1b110 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
1b120 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
1b130 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
1b140 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  r..**.** Value c
1b150 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
1b160 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
1b170 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45  )):.**     WHERE
1b180 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53  _USE_LIMIT  == S
1b190 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a  F_FixedLimit.*/.
1b1a0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1b1b0 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30  DERBY_NORMAL   0
1b1c0 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a  x0000 /* No-op *
1b1d0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b1e0 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20  ORDERBY_MIN     
1b1f0 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52   0x0001 /* ORDER
1b200 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
1b210 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f  or min() func */
1b220 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b230 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20  RDERBY_MAX      
1b240 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20  0x0002 /* ORDER 
1b250 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
1b260 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a  r max() func */.
1b270 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1b280 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30  EPASS_DESIRED  0
1b290 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f  x0004 /* Want to
1b2a0 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44   do one-pass UPD
1b2b0 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64  ATE/DELETE */.#d
1b2c0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
1b2d0 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30  ASS_MULTIROW 0x0
1b2e0 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69  008 /* ONEPASS i
1b2f0 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70  s ok with multip
1b300 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
1b310 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41  ne WHERE_DUPLICA
1b320 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30  TES_OK    0x0010
1b330 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e   /* Ok to return
1b340 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e   a row more than
1b350 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65   once */.#define
1b360 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41   WHERE_OR_SUBCLA
1b370 55 53 45 20 20 20 20 20 30 78 30 30 32 30 20 2f  USE     0x0020 /
1b380 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73  * Processing a s
1b390 75 62 2d 57 48 45 52 45 20 61 73 20 70 61 72 74  ub-WHERE as part
1b3a0 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20 20   of.            
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
1b3d0 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   OR optimization
1b3e0 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45    */.#define WHE
1b3f0 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20  RE_GROUPBY      
1b400 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f      0x0040 /* pO
1b410 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79  rderBy is really
1b420 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23   a GROUP BY */.#
1b430 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1b440 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78  TINCTBY       0x
1b450 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79  0080 /* pOrderby
1b460 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53   is really a DIS
1b470 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a  TINCT clause */.
1b480 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41  #define WHERE_WA
1b490 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30  NT_DISTINCT    0
1b4a0 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74  x0100 /* All out
1b4b0 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  put needs to be 
1b4c0 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66  distinct */.#def
1b4d0 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59  ine WHERE_SORTBY
1b4e0 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 32 30  GROUP      0x020
1b4f0 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c  0 /* Support sql
1b500 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
1b510 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  d() */.#define W
1b520 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20  HERE_SEEK_TABLE 
1b530 20 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20        0x0400 /* 
1b540 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65  Do not defer see
1b550 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65  ks on main table
1b560 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b570 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20  E_ORDERBY_LIMIT 
1b580 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44     0x0800 /* ORD
1b590 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68  ERBY+LIMIT on th
1b5a0 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a  e inner loop */.
1b5b0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45  #define WHERE_SE
1b5c0 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30  EK_UNIQ_TABLE  0
1b5d0 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x1000 /* Do not 
1b5e0 64 65 66 65 72 20 73 65 65 6b 73 20 69 66 20 75  defer seeks if u
1b5f0 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20  nique */.       
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20 20   /*     0x2000  
1b620 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20    not currently 
1b630 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1b640 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
1b650 20 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a         0x4000 /*
1b660 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69   Use the LIMIT i
1b670 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73  n cost estimates
1b680 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1b690 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
1b6a0 20 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74     0x8000    not
1b6b0 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20   currently used 
1b6c0 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72  */../* Allowed r
1b6d0 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
1b6e0 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  m sqlite3WhereIs
1b6f0 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64  Distinct().*/.#d
1b700 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1b710 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30  INCT_NOOP      0
1b720 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65    /* DISTINCT ke
1b730 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a  yword not used *
1b740 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b750 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20  DISTINCT_UNIQUE 
1b760 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c     1  /* No dupl
1b770 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  icates */.#defin
1b780 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1b790 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a  _ORDERED   2  /*
1b7a0 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   All duplicates 
1b7b0 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a  are adjacent */.
1b7c0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1b7d0 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44  STINCT_UNORDERED
1b7e0 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65   3  /* Duplicate
1b7f0 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20  s are scattered 
1b800 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65  */../*.** A Name
1b810 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20  Context defines 
1b820 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69  a context in whi
1b830 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61  ch to resolve ta
1b840 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a  ble and column.*
1b850 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f  * names.  The co
1b860 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f  ntext consists o
1b870 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  f a list of tabl
1b880 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74  es (the pSrcList
1b890 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61  ) field and.** a
1b8a0 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
1b8b0 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73  xpression (pELis
1b8c0 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65  t).  The named e
1b8d0 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d  xpression list m
1b8e0 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20  ay.** be NULL.  
1b8f0 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70  The pSrc corresp
1b900 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d  onds to the FROM
1b910 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
1b920 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  ECT or.** to the
1b930 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1b940 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45  rated on by INSE
1b950 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44  RT, UPDATE, or D
1b960 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70  ELETE.  The.** p
1b970 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64  EList correspond
1b980 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  s to the result 
1b990 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  set of a SELECT 
1b9a0 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a  and is NULL for.
1b9b0 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  ** other stateme
1b9c0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43  nts..**.** NameC
1b9d0 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e  ontexts can be n
1b9e0 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73  ested.  When res
1b9f0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68  olving names, th
1ba00 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20  e inner-most.** 
1ba10 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63  context is searc
1ba20 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e  hed first.  If n
1ba30 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  o match is found
1ba40 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72  , the next outer
1ba50 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63  .** context is c
1ba60 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72  hecked.  If ther
1ba70 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61  e is still no ma
1ba80 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f  tch, the next co
1ba90 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63  ntext.** is chec
1baa0 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ked.  This proce
1bab0 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  ss continues unt
1bac0 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63  il either a matc
1bad0 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72  h is found.** or
1bae0 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72   all contexts ar
1baf0 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61  e check.  When a
1bb00 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
1bb10 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72   the nRef member
1bb20 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   of.** the conte
1bb30 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  xt containing th
1bb40 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65  e match is incre
1bb50 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61  mented..**.** Ea
1bb60 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73  ch subquery gets
1bb70 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65   a new NameConte
1bb80 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66  xt.  The pNext f
1bb90 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
1bba0 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
1bbb0 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  t in the parent 
1bbc0 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65  query.  Thus the
1bbd0 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e   process of scan
1bbe0 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  ning the.** Name
1bbf0 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72  Context list cor
1bc00 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72  responds to sear
1bc10 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75  ching through su
1bc20 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72  ccessively outer
1bc30 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c  .** subqueries l
1bc40 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74  ooking for a mat
1bc50 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61  ch..*/.struct Na
1bc60 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61  meContext {.  Pa
1bc70 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1bc80 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
1bc90 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1bca0 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e  SrcList;   /* On
1bcb0 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
1bcc0 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65   used to resolve
1bcd0 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72   names */.  Expr
1bce0 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
1bcf0 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73   /* Optional lis
1bd00 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  t of result-set 
1bd10 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67  columns */.  Agg
1bd20 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
1bd30 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1bd40 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
1bd50 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
1bd60 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  */.  NameContext
1bd70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
1bd80 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
1bd90 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
1bda0 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
1bdb0 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
1bdc0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bdd0 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
1bde0 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
1bdf0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1be00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1be10 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
1be20 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
1be30 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
1be40 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73  */.  u16 ncFlags
1be50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72  ;         /* Zer
1be60 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
1be70 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
1be80 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ow */.};../*.** 
1be90 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1bea0 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
1beb0 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
1bec0 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  d..**.** Value c
1bed0 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20  onstraints (all 
1bee0 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65  checked via asse
1bef0 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f  rt()):.**    NC_
1bf00 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46 5f  HasAgg    == SF_
1bf10 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f  HasAgg.**    NC_
1bf20 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f  MinMaxAgg == SF_
1bf30 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c  MinMaxAgg == SQL
1bf40 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1bf50 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  **.*/.#define NC
1bf60 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30  _AllowAgg  0x000
1bf70 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  1  /* Aggregate 
1bf80 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
1bf90 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
1bfa0 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
1bfb0 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54 72     0x0002  /* Tr
1bfc0 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1bfd0 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
1bfe0 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
1bff0 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
1c000 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
1c010 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1c020 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
1c030 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
1c040 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
1c050 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
1c060 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
1c070 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
1c080 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1c090 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
1c0a0 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  010  /* One or m
1c0b0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
1c0c0 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
1c0d0 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78  #define NC_IdxEx
1c0e0 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20  pr   0x0020  /* 
1c0f0 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1c100 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45  g columns of CRE
1c110 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
1c120 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65 63  fine NC_VarSelec
1c130 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20 63  t 0x0040  /* A c
1c140 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
1c150 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e  ry has been seen
1c160 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d   */.#define NC_M
1c170 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20  inMaxAgg 0x1000 
1c180 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72   /* min/max aggr
1c190 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65  egates seen.  Se
1c1a0 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a  e note above */.
1c1b0 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c  #define NC_Compl
1c1c0 65 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20  ex   0x2000  /* 
1c1d0 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74 69  True if a functi
1c1e0 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20 73  on or subquery s
1c1f0 65 65 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  een */../*.** An
1c200 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1c210 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1c220 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c  ture contains al
1c230 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  l information.**
1c240 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
1c250 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73  ate code for a s
1c260 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61  ingle SELECT sta
1c270 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c  tement..**.** nL
1c280 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d  imit is set to -
1c290 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  1 if there is no
1c2a0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20   LIMIT clause.  
1c2b0 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74  nOffset is set t
1c2c0 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65  o 0..** If there
1c2d0 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75   is a LIMIT clau
1c2e0 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 73  se, the parser s
1c2f0 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68  ets nLimit to th
1c300 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a  e value of the.*
1c310 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66  * limit and nOff
1c320 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
1c330 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 28   of the offset (
1c340 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69 73  or 0 if there is
1c350 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e   not.** offset).
1c360 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20    But later on, 
1c370 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73  nLimit and nOffs
1c380 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65  et become the me
1c390 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a  mory locations.*
1c3a0 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68  * in the VDBE th
1c3b0 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69  at record the li
1c3c0 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63  mit and offset c
1c3d0 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61  ounters..**.** a
1c3e0 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e  ddrOpenEphm[] en
1c3f0 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68  tries contain th
1c400 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  e address of OP_
1c410 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1c420 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20  codes..** These 
1c430 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62  addresses must b
1c440 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74  e stored so that
1c450 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20   we can go back 
1c460 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74  and fill in.** t
1c470 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e  he P4_KEYINFO an
1c480 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20  d P2 parameters 
1c490 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20  later.  Neither 
1c4a0 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a  the KeyInfo nor.
1c4b0 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
1c4c0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63   columns in P2 c
1c4d0 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61  an be computed a
1c4e0 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a  t the same time.
1c4f0 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65  ** as the OP_Ope
1c500 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f  nEphm instructio
1c510 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75  n is coded becau
1c520 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68  se not.** enough
1c530 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
1c540 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  ut the compound 
1c550 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
1c560 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a  t that point..**
1c570 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
1c580 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d   addrOpenTran[0]
1c590 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e   and [1] contain
1c5a0 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
1c5b0 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65  ences.** for the
1c5c0 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68   result set.  Th
1c5d0 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
1c5e0 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f  drOpenEphm[2] co
1c5f0 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1c600 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f  .** sequences fo
1c610 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
1c620 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
1c630 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72   Select {.  Expr
1c640 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
1c650 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
1c660 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
1c670 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
1c680 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1c690 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54  e of: TK_UNION T
1c6a0 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45  K_ALL TK_INTERSE
1c6b0 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a  CT TK_EXCEPT */.
1c6c0 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74    LogEst nSelect
1c6d0 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
1c6e0 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
1c6f0 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20  result rows */. 
1c700 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20   u32 selFlags;  
1c710 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
1c720 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a  us SF_* values *
1c730 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20  /.  int iLimit, 
1c740 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65  iOffset;   /* Me
1c750 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68  mory registers h
1c760 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f  olding LIMIT & O
1c770 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a  FFSET counters *
1c780 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  /.#if SELECTTRAC
1c790 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72  E_ENABLED.  char
1c7a0 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20   zSelName[12];  
1c7b0 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e     /* Symbolic n
1c7c0 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45  ame of this SELE
1c7d0 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75 67  CT use for debug
1c7e0 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ging */.#endif. 
1c7f0 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68   int addrOpenEph
1c800 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70  m[2];   /* OP_Op
1c810 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20  enEphem opcodes 
1c820 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20  related to this 
1c830 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c  select */.  SrcL
1c840 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
1c850 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
1c860 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1c870 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1c880 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1c890 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1c8a0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
1c8b0 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
1c8c0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
1c8d0 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
1c8e0 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
1c8f0 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
1c900 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1c910 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
1c920 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
1c930 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
1c940 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
1c950 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
1c960 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
1c970 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
1c980 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
1c990 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
1c9a0 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
1c9b0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
1c9c0 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
1c9d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
1c9e0 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
1c9f0 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
1ca00 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
1ca10 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
1ca20 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
1ca30 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
1ca40 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
1ca50 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
1ca60 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1ca70 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
1ca80 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
1ca90 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
1caa0 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
1cab0 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1cac0 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63  raints (all chec
1cad0 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ked via assert()
1cae0 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41  ).**     SF_HasA
1caf0 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73  gg     == NC_Has
1cb00 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69  Agg.**     SF_Mi
1cb10 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d  nMaxAgg  == NC_M
1cb20 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20  inMaxAgg     == 
1cb30 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1cb40 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78  AX.**     SF_Fix
1cb50 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45  edLimit == WHERE
1cb60 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64  _USE_LIMIT.*/.#d
1cb70 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63  efine SF_Distinc
1cb80 74 20 20 20 20 20 20 20 30 78 30 30 30 30 31 20  t       0x00001 
1cb90 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c   /* Output shoul
1cba0 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  d be DISTINCT */
1cbb0 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20  .#define SF_All 
1cbc0 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
1cbd0 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20  02  /* Includes 
1cbe0 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20  the ALL keyword 
1cbf0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
1cc00 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78 30  solved       0x0
1cc10 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66  0004  /* Identif
1cc20 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
1cc30 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
1cc40 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
1cc50 20 20 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a       0x00008  /*
1cc60 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75   Contains agg fu
1cc70 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f  nctions or a GRO
1cc80 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
1cc90 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 20   SF_HasAgg      
1cca0 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43     0x00010  /* C
1ccb0 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
1ccc0 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
1ccd0 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70  define SF_UsesEp
1cce0 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30  hemeral  0x00020
1ccf0 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70    /* Uses the Op
1cd00 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
1cd10 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  de */.#define SF
1cd20 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20  _Expanded       
1cd30 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69  0x00040  /* sqli
1cd40 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28  te3SelectExpand(
1cd50 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73  ) called on this
1cd60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
1cd70 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78  asTypeInfo    0x
1cd80 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73  00080  /* FROM s
1cd90 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54  ubqueries have T
1cda0 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f  able metadata */
1cdb0 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
1cdc0 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30 30 31  ound       0x001
1cdd0 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
1cde0 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1cdf0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61  */.#define SF_Va
1ce00 6c 75 65 73 20 20 20 20 20 20 20 20 20 30 78 30  lues         0x0
1ce10 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73  0200  /* Synthes
1ce20 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53  ized from VALUES
1ce30 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
1ce40 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65  ne SF_MultiValue
1ce50 20 20 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a       0x00400  /*
1ce60 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74   Single VALUES t
1ce70 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c  erm with multipl
1ce80 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1ce90 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20  e SF_NestedFrom 
1cea0 20 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20      0x00800  /* 
1ceb0 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74  Part of a parent
1cec0 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61  hesized FROM cla
1ced0 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
1cee0 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  F_MinMaxAgg     
1cef0 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67   0x01000  /* Agg
1cf00 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e  regate containin
1cf10 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29  g min() or max()
1cf20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
1cf30 65 63 75 72 73 69 76 65 20 20 20 20 20 20 30 78  ecursive      0x
1cf40 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65  02000  /* The re
1cf50 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20  cursive part of 
1cf60 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20  a recursive CTE 
1cf70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69  */.#define SF_Fi
1cf80 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30  xedLimit     0x0
1cf90 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74  4000  /* nSelect
1cfa0 52 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e  Row set by a con
1cfb0 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23  stant LIMIT */.#
1cfc0 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43  define SF_MaybeC
1cfd0 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30 30 30  onvert   0x08000
1cfe0 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72    /* Need conver
1cff0 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1d000 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1d010 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72  define SF_Conver
1d020 74 65 64 20 20 20 20 20 20 30 78 31 30 30 30 30  ted      0x10000
1d030 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43    /* By convertC
1d040 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1d050 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1d060 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48  fine SF_IncludeH
1d070 69 64 64 65 6e 20 20 30 78 32 30 30 30 30 20 20  idden  0x20000  
1d080 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65  /* Include hidde
1d090 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74  n columns in out
1d0a0 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
1d0b0 46 5f 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20  F_ComplexResult 
1d0c0 20 30 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73   0x40000  /* Res
1d0d0 75 6c 74 20 73 65 74 20 63 6f 6e 74 61 69 6e 73  ult set contains
1d0e0 20 73 75 62 71 75 65 72 79 20 6f 72 20 66 75 6e   subquery or fun
1d0f0 63 74 69 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  ction */.../*.**
1d100 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
1d110 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20  a SELECT can be 
1d120 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
1d130 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20  everal ways, as 
1d140 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e  defined.** by on
1d150 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1d160 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20  ng macros.  The 
1d170 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
1d180 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
1d190 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a  t.** Type"..**.*
1d1a0 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20  *     SRT_Union 
1d1b0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1d1c0 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20  lts as a key in 
1d1d0 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
1d1e0 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  x.**            
1d1f0 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
1d200 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
1d210 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
1d220 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1d230 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
1d240 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
1d250 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
1d260 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1d270 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
1d280 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
1d290 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
1d2a0 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
1d2b0 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2d0 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
1d2e0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1d2f0 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
1d300 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
1d310 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
1d320 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
1d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d340 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
1d350 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
1d360 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
1d370 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
1d380 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1d390 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
1d3a0 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
1d3b0 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
1d3c0 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
1d3d0 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
1d3e0 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
1d3f0 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
1d400 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
1d410 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1d420 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
1d430 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
1d440 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
1d450 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
1d460 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
1d470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d480 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
1d490 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
1d4a0 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
1d4b0 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
1d4c0 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
1d4d0 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1d4e0 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1d4f0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d500 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
1d510 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
1d520 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
1d530 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1d550 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1d560 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
1d570 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
1d580 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d590 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
1d5a0 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
1d5b0 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
1d5c0 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
1d5d0 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
1d5e0 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
1d5f0 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
1d600 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
1d610 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
1d620 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
1d630 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
1d640 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
1d650 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d670 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66     Apply the aff
1d680 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66  inity pDest->aff
1d690 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72  Sdst before stor
1d6a0 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ing.**          
1d6b0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1d6c0 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70  ts.  Used to imp
1d6d0 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45  lement "IN (SELE
1d6e0 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20  CT ...)"..**.** 
1d6f0 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62      SRT_EphemTab
1d700 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65      Create an te
1d710 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1d720 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64  est->iSDParm and
1d730 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20   store.**       
1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1d750 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20  e result there. 
1d760 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1d770 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a  ft open after.**
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d790 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20       returning. 
1d7a0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1d7b0 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74  T_Table except t
1d7c0 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  hat.**          
1d7d0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1d7e0 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73  destination uses
1d7f0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d800 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20  l to create.**  
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d820 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72     the table fir
1d830 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1d840 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65  T_Coroutine   Ge
1d850 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74  nerate a co-rout
1d860 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73  ine that returns
1d870 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a   a new row of.**
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d890 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63       results eac
1d8a0 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76  h time it is inv
1d8b0 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79  oked.  The entry
1d8c0 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20   point.**       
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1d8e0 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20   the co-routine 
1d8f0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1d900 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1d910 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20  Parm.**         
1d920 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
1d930 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69  the result row i
1d940 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73  s stored in pDes
1d950 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65  t->nDest registe
1d960 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rs.**           
1d970 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69            starti
1d980 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69  ng with pDest->i
1d990 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Sdst..**.**     
1d9a0 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1d9b0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1d9c0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1d9d0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1d9e0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f  .**     SRT_Fifo
1d9f0 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
1da00 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61  like SRT_EphemTa
1da10 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  b except that th
1da20 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  e table.**      
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1da40 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72  s assumed to alr
1da50 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53  eady be open.  S
1da60 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20  RT_Fifo has.**  
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da80 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61     the additiona
1da90 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65  l property of be
1daa0 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f  ing able to igno
1dab0 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1dac0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52            the OR
1dad0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1dae0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1daf0 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72  tFifo    Store r
1db00 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70  esults in a temp
1db10 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1db20 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db40 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20     But also use 
1db50 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1db60 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1db70 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   as.**          
1db80 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63             a rec
1db90 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72  ord of all prior
1dba0 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e   results and ign
1dbb0 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74  ore any duplicat
1dbc0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1dbd0 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20           rows.  
1dbe0 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69  Name means:  "Di
1dbf0 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a  stinct Fifo"..**
1dc00 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75  .**     SRT_Queu
1dc10 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1dc20 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1dc30 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1dc40 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a  SDParm (really.*
1dc50 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1dc60 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e        an index).
1dc70 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65    Append a seque
1dc80 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68  nce number so th
1dc90 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a  at all entries.*
1dca0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1dcb0 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e        are distin
1dcc0 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ct..**.**     SR
1dcd0 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74  T_DistQueue   St
1dce0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1dcf0 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1dd00 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c  est->iSDParm onl
1dd10 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  y if.**         
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1dd30 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20  same record has 
1dd40 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65  never been store
1dd50 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a  d before.  The.*
1dd60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1dd70 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70        index at p
1dd80 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1dd90 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73  hold all prior s
1dda0 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tores..*/.#defin
1ddb0 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
1ddc0 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
1ddd0 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
1dde0 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1ddf0 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
1de00 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
1de10 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
1de20 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
1de30 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
1de40 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
1de50 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
1de60 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
1de70 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1de80 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
1de90 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
1dea0 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
1deb0 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1dec0 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1ded0 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   5  /* Store res
1dee0 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1def0 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1df00 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
1df10 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20  RT_DistFifo     
1df20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46  6  /* Like SRT_F
1df30 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ifo, but unique 
1df40 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1df50 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
1df60 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  e        7  /* S
1df70 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1df80 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
1df90 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
1dfa0 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53      8  /* Like S
1dfb0 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
1dfc0 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1dfd0 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  y */../* The ORD
1dfe0 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
1dff0 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
1e000 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
1e010 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
1e020 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
1e030 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
1e040 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65  tQueue)..#define
1e050 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1e060 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    9  /* Output e
1e070 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
1e080 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1e090 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20  _Mem         10 
1e0a0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1e0b0 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
1e0c0 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
1e0d0 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20  _Set         11 
1e0e0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1e0f0 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
1e100 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1e110 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1e120 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74   12  /* Create t
1e130 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
1e140 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
1e150 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
1e160 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1e170 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   13  /* Generate
1e180 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
1e190 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1e1a0 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
1e1b0 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20     14  /* Store 
1e1c0 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1e1d0 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1e1e0 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   rowid */../*.**
1e1f0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1e200 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
1e210 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
1e220 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
1e230 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
1e240 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
1e250 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
1e260 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
1e270 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
1e280 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
1e290 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
1e2a0 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
1e2b0 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
1e2c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
1e2d0 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
1e2e0 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
1e2f0 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
1e300 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
1e310 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1e320 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
1e330 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
1e340 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
1e350 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1e360 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
1e370 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
1e380 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20  char *zAffSdst; 
1e390 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
1e3a0 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
1e3b0 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45  ==SRT_Set */.  E
1e3c0 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1e3d0 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d  y;  /* Key colum
1e3e0 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65  ns for SRT_Queue
1e3f0 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65   and SRT_DistQue
1e400 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ue */.};../*.** 
1e410 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
1e420 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
1e430 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
1e440 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
1e450 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65  CREMENT.** table
1e460 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
1e470 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1e480 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
1e490 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1e4a0 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1e4b0 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1e4c0 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1e4d0 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1e4e0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1e4f0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1e500 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1e510 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1e520 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1e530 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1e540 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1e550 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68  ts are done with
1e560 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1e570 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1e580 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1e590 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1e5a0 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
1e5b0 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
1e5c0 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
1e5d0 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
1e5e0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
1e5f0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1e600 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
1e610 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
1e620 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1e630 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1e640 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1e650 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1e660 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1e670 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1e680 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1e690 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e6b0 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1e6c0 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1e6d0 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1e6e0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1e6f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1e700 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1e710 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1e720 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1e730 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
1e740 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
1e750 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1e760 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
1e770 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
1e780 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
1e790 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1e7a0 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1e7b0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1e7c0 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1e7d0 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20  ted for each.** 
1e7e0 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1e7f0 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1e800 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1e810 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1e820 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1e830 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1e840 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1e850 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1e860 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1e870 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1e880 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1e890 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1e8a0 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1e8b0 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1e8c0 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1e8d0 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1e8e0 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1e8f0 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1e900 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1e910 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1e920 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1e930 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1e940 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1e950 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1e960 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1e970 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1e980 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1e990 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1e9a0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1e9b0 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1e9c0 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1e9d0 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1e9e0 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1e9f0 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1ea00 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1ea10 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1ea20 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1ea30 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1ea40 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1ea50 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1ea60 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1ea70 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1ea80 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a  ult of INSERT.**
1ea90 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69   statements). Si
1eaa0 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69  milarly, the Tri
1eab0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1eac0 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [1] variable is 
1ead0 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b  set to.** a mask
1eae0 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1eaf0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  s used by the pr
1eb00 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74  ogram..*/.struct
1eb10 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20   TriggerPrg {.  
1eb20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
1eb30 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67  r;      /* Trigg
1eb40 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20  er this program 
1eb50 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a  was coded from *
1eb60 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1eb70 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
1eb80 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72  ext entry in Par
1eb90 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1eba0 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67  ist */.  SubProg
1ebb0 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
1ebc0 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c   /* Program impl
1ebd0 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65  ementing pTrigge
1ebe0 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e  r/orconf */.  in
1ebf0 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  t orconf;       
1ec00 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1ec10 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1ec20 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f  icy */.  u32 aCo
1ec30 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20  lmask[2];       
1ec40 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64   /* Masks of old
1ec50 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e  .*, new.* column
1ec60 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b  s accessed */.};
1ec70 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d  ../*.** The yDbM
1ec80 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72  ask datatype for
1ec90 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20   the bitmask of 
1eca0 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1ecb0 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53  abases..*/.#if S
1ecc0 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1ecd0 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20  ED>30.  typedef 
1ece0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44  unsigned char yD
1ecf0 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41  bMask[(SQLITE_MA
1ed00 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d  X_ATTACHED+9)/8]
1ed10 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1ed20 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1ed30 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28  (M)[(I)/8]&(1<<(
1ed40 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64  (I)&7)))!=0).# d
1ed50 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1ed60 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28  (M)      memset(
1ed70 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29  (M),0,sizeof(M))
1ed80 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1ed90 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1eda0 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49  [(I)/8]|=(1<<((I
1edb0 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44  )&7)).# define D
1edc0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1edd0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41    sqlite3DbMaskA
1ede0 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69  llZero(M).# defi
1edf0 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1ee00 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62  (M)   (sqlite3Db
1ee10 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d  MaskAllZero(M)==
1ee20 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  0).#else.  typed
1ee30 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
1ee40 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e  yDbMask;.# defin
1ee50 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1ee60 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44  )    (((M)&(((yD
1ee70 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21  bMask)1)<<(I)))!
1ee80 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1ee90 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1eea0 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  (M)=0.# define D
1eeb0 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1eec0 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73    (M)|=(((yDbMas
1eed0 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66  k)1)<<(I)).# def
1eee0 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1eef0 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20  o(M)   (M)==0.# 
1ef00 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1ef10 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30  Zero(M)   (M)!=0
1ef20 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1ef30 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
1ef40 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
1ef50 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1ef60 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
1ef70 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
1ef80 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
1ef90 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
1efa0 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
1efb0 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
1efc0 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
1efd0 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
1efe0 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
1eff0 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
1f000 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
1f010 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
1f020 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
1f030 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
1f040 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
1f050 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
1f060 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
1f070 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
1f080 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
1f090 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
1f0a0 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
1f0b0 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
1f0c0 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
1f0d0 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
1f0e0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
1f0f0 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
1f100 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
1f110 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
1f120 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
1f130 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20  ache.** feature 
1f140 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73  is enabled (if s
1f150 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65  qlite3Tsd()->use
1f160 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72  SharedData is tr
1f170 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a  ue). They are.**
1f180 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1f190 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d  he set of table-
1f1a0 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62  locks required b
1f1b0 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
1f1c0 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65  being.** compile
1f1d0 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69  d. Function sqli
1f1e0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69  te3TableLock() i
1f1f0 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e  s used to add en
1f200 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20  tries to the.** 
1f210 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  list..*/.struct 
1f220 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  Parse {.  sqlite
1f230 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
1f240 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * The main datab
1f250 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ase structure */
1f260 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
1f270 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72  ;       /* An er
1f280 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
1f290 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
1f2a0 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69        /* An engi
1f2b0 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67  ne for executing
1f2c0 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f   database byteco
1f2d0 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  de */.  int rc; 
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f2f0 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1f300 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20   execution */.  
1f310 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
1f320 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
1f330 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65  er OP_ColumnName
1f340 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64   has been issued
1f350 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75   to pVdbe */.  u
1f360 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20  8 checkSchema;  
1f370 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63      /* Causes sc
1f380 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63  hema cookie chec
1f390 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
1f3a0 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b   */.  u8 nested;
1f3b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f3c0 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
1f3d0 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73  alls to the pars
1f3e0 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  er/code generato
1f3f0 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52  r */.  u8 nTempR
1f400 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  eg;         /* N
1f410 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61  umber of tempora
1f420 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  ry registers in 
1f430 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20  aTempReg[] */.  
1f440 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b  u8 isMultiWrite;
1f450 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1f460 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f  statement may mo
1f470 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74  dify/insert mult
1f480 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75  iple rows */.  u
1f490 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20  8 mayAbort;     
1f4a0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
1f4b0 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72  tatement may thr
1f4c0 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
1f4d0 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61  ption */.  u8 ha
1f4e0 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20  sCompound;      
1f4f0 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b  /* Need to invok
1f500 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  e convertCompoun
1f510 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1f520 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f  y() */.  u8 okCo
1f530 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a  nstFactor;    /*
1f540 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75   OK to factor ou
1f550 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  t constants */. 
1f560 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61   u8 disableLooka
1f570 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  side; /* Number 
1f580 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69  of times lookasi
1f590 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61  de has been disa
1f5a0 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e 43 6f  bled */.  u8 nCo
1f5b0 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f  lCache;        /
1f5c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
1f5d0 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68 65  ies in aColCache
1f5e0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e  [] */.  int nRan
1f5f0 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1f600 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70  Size of the temp
1f610 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1f620 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52  lock */.  int iR
1f630 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1f640 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72  * First register
1f650 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65   in temporary re
1f660 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1f670 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1f680 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f690 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20   of errors seen 
1f6a0 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20  */.  int nTab;  
1f6b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1f6c0 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c  ber of previousl
1f6d0 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45  y allocated VDBE
1f6e0 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e   cursors */.  in
1f6f0 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
1f700 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f710 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
1f720 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1f730 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20  t nOpAlloc;     
1f740 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f750 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
1f760 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
1f770 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f  /.  int szOpAllo
1f780 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65  c;       /* Byte
1f790 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  s of memory spac
1f7a0 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  e allocated for 
1f7b0 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
1f7c0 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20 20  int iSelfTab;   
1f7d0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 61 73       /* Table as
1f7e0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 6e  sociated with an
1f7f0 20 69 6e 64 65 78 20 6f 6e 20 65 78 70 72 2c 20   index on expr, 
1f800 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20  or negative.    
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f820 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 62 61 73     ** of the bas
1f830 65 20 72 65 67 69 73 74 65 72 20 64 75 72 69 6e  e register durin
1f840 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69  g check-constrai
1f850 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74  nt eval */.  int
1f860 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
1f870 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
1f880 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
1f890 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
1f8a0 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
1f8b0 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
1f8c0 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
1f8d0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
1f8e0 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
1f8f0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  alues */.  int n
1f900 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Label;          
1f910 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62  /* Number of lab
1f920 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  els used */.  in
1f930 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20  t *aLabel;      
1f940 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68     /* Space to h
1f950 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a  old the labels *
1f960 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
1f970 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73  onstExpr;/* Cons
1f980 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
1f990 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
1f9a0 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
1f9b0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
1f9c0 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
1f9d0 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20  eing parsed */. 
1f9e0 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61   yDbMask writeMa
1f9f0 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61  sk;   /* Start a
1fa00 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
1fa10 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
1fa20 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61  bases */.  yDbMa
1fa30 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20  sk cookieMask;  
1fa40 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
1fa50 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
1fa60 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74  tabases */.  int
1fa70 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20   regRowid;      
1fa80 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1fa90 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43  lding rowid of C
1faa0 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72  REATE TABLE entr
1fab0 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1fac0 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  ot;         /* R
1fad0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1fae0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
1faf0 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73   for new objects
1fb00 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72   */.  int nMaxAr
1fb10 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  g;         /* Ma
1fb20 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f  x args passed to
1fb30 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62   user function b
1fb40 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  y sub-program */
1fb50 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
1fb60 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e  _ENABLED.  int n
1fb70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
1fb80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c  /* Number of SEL
1fb90 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73  ECT statements s
1fba0 65 65 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  een */.#endif.#i
1fbb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1fbc0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
1fbd0 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b   int nTableLock;
1fbe0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1fbf0 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54  r of locks in aT
1fc00 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61  ableLock */.  Ta
1fc10 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c  bleLock *aTableL
1fc20 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64  ock; /* Required
1fc30 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72   table locks for
1fc40 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
1fc50 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41  de */.#endif.  A
1fc60 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e  utoincInfo *pAin
1fc70 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  c;  /* Informati
1fc80 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43  on about AUTOINC
1fc90 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20  REMENT counters 
1fca0 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
1fcb0 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
1fcc0 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
1fcd0 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
1fce0 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
1fcf0 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
1fd00 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
1fd10 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
1fd20 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  ded for */.  int
1fd30 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20   addrCrTab;     
1fd40 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
1fd50 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f  OP_CreateBtree o
1fd60 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20  pcode on CREATE 
1fd70 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e  TABLE */.  u32 n
1fd80 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20  QueryLoop;      
1fd90 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66  /* Est number of
1fda0 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61   iterations of a
1fdb0 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28   query (10*log2(
1fdc0 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64  N)) */.  u32 old
1fdd0 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
1fde0 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   Mask of old.* c
1fdf0 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
1fe00 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61  d */.  u32 newma
1fe10 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
1fe20 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
1fe30 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
1fe40 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72  */.  u8 eTrigger
1fe50 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  Op;       /* TK_
1fe60 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
1fe70 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a  T or TK_DELETE *
1fe80 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20  /.  u8 eOrconf; 
1fe90 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1fea0 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
1feb0 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67  policy for trigg
1fec0 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38  er steps */.  u8
1fed0 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73   disableTriggers
1fee0 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69  ;  /* True to di
1fef0 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a  sable triggers *
1ff00 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /..  /**********
1ff10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff50 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f  .  ** Fields abo
1ff60 76 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  ve must be initi
1ff70 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20  alized to zero. 
1ff80 20 54 68 65 20 66 69 65 6c 64 73 20 74 68 61 74   The fields that
1ff90 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f   follow,.  ** do
1ffa0 77 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e  wn to the beginn
1ffb0 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75 72  ing of the recur
1ffc0 73 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f  sive section, do
1ffd0 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 0a   not need to be.
1ffe0 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64    ** initialized
1fff0 20 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62 65   as they will be
20000 20 73 65 74 20 62 65 66 6f 72 65 20 62 65 69 6e   set before bein
20010 67 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f 75  g used.  The bou
20020 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64 65  ndary is.  ** de
20030 74 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66 73  termined by offs
20040 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c 43  etof(Parse,aColC
20050 61 63 68 65 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ache)..  *******
20060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
200a0 2a 2a 2a 2f 0a 0a 20 20 73 74 72 75 63 74 20 79  ***/..  struct y
200b0 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69  ColCache {.    i
200c0 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
200d0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75       /* Table cu
200e0 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
200f0 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20     i16 iColumn; 
20100 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
20110 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
20120 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65  */.    u8 tempRe
20130 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
20140 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72  iReg is a temp r
20150 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65  egister that nee
20160 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a  ds to be freed *
20170 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c  /.    int iLevel
20180 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
20190 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a  esting level */.
201a0 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20      int iReg;   
201b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
201c0 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74   with value of t
201d0 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65  his column. 0 me
201e0 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20  ans none. */.   
201f0 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20   int lru;       
20200 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20         /* Least 
20210 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e  recently used en
20220 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c  try has the smal
20230 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  lest value */.  
20240 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49  } aColCache[SQLI
20250 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20  TE_N_COLCACHE]; 
20260 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68   /* One for each
20270 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e   column cache en
20280 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65  try */.  int aTe
20290 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 20 20  mpReg[8];       
202a0 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
202b0 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
202c0 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f  egisters */.  To
202d0 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
202e0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77        /* Token w
202f0 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20  ith unqualified 
20300 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61  schema object na
20310 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  me */..  /******
20320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20360 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73  **.  ** Above is
20370 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65   constant betwee
20380 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42  n recursions.  B
20390 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65  elow is reset be
203a0 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20  fore and after. 
203b0 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69   ** each recursi
203c0 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  on.  The boundar
203d0 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20  y between these 
203e0 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64  two regions is d
203f0 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75  etermined.  ** u
20400 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61  sing offsetof(Pa
20410 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20  rse,sLastToken) 
20420 73 6f 20 74 68 65 20 73 4c 61 73 74 54 6f 6b 65  so the sLastToke
20430 6e 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20  n field must be 
20440 74 68 65 0a 20 20 2a 2a 20 66 69 72 73 74 20 66  the.  ** first f
20450 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65 63 75  ield in the recu
20460 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20  rsive region..  
20470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
204a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
204b0 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b  ********/..  Tok
204c0 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
204d0 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74       /* The last
204e0 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f   token parsed */
204f0 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20  .  ynVar nVar;  
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20510 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61  Number of '?' va
20520 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20  riables seen in 
20530 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a  the SQL so far *
20540 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72  /.  u8 iPkSortOr
20550 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
20560 20 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72   ASC or DESC for
20570 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
20580 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70   KEY */.  u8 exp
20590 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lain;           
205a0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
205b0 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20  he EXPLAIN flag 
205c0 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20  is found on the 
205d0 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66  query */.#ifndef
205e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
205f0 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64  TUALTABLE.  u8 d
20600 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20  eclareVtab;     
20610 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
20620 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f   inside sqlite3_
20630 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a  declare_vtab() *
20640 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63  /.  int nVtabLoc
20650 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
20660 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
20670 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63  al tables to loc
20680 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  k */.#endif.  in
20690 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
206a0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
206b0 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68  ssion tree heigh
206c0 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62  t of current sub
206d0 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64  -select */.#ifnd
206e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
206f0 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65  XPLAIN.  int iSe
20700 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20  lectId;         
20710 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72     /* ID of curr
20720 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45  ent select for E
20730 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
20740 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65  .  int iNextSele
20750 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ctId;        /* 
20760 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  Next available s
20770 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50  elect ID for EXP
20780 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23  LAIN output */.#
20790 65 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a 70  endif.  VList *p
207a0 56 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  VList;          
207b0 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65 74    /* Mapping bet
207c0 77 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e 61  ween variable na
207d0 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73 20  mes and numbers 
207e0 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72  */.  Vdbe *pRepr
207f0 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f  epare;         /
20800 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65  * VM being repre
20810 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65  pared (sqlite3Re
20820 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20  prepare()) */.  
20830 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
20840 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  l;        /* All
20850 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74   SQL text past t
20860 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f  he last semicolo
20870 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61  n parsed */.  Ta
20880 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20  ble *pNewTable; 
20890 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62          /* A tab
208a0 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
208b0 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
208c0 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
208d0 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
208e0 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
208f0 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
20900 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
20910 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
20920 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
20930 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
20940 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
20950 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
20960 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
20970 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
20980 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20  E.  Token sArg; 
20990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
209a0 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   Complete text o
209b0 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d  f a module argum
209c0 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ent */.  Table *
209d0 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  *apVtabLock;    
209e0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
209f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
20a00 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20  needing locking 
20a10 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c  */.#endif.  Tabl
20a20 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20  e *pZombieTab;  
20a30 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
20a40 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74   Table objects t
20a50 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63  o delete after c
20a60 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69  ode gen */.  Tri
20a70 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65  ggerPrg *pTrigge
20a80 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64  rPrg;  /* Linked
20a90 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74   list of coded t
20aa0 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74  riggers */.  Wit
20ab0 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
20ac0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
20ad0 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  t WITH clause, o
20ae0 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68  r NULL */.  With
20af0 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20   *pWithToFree;  
20b00 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68        /* Free th
20b10 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61  is WITH object a
20b20 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
20b30 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   parse */.};../*
20b40 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f  .** Sizes and po
20b50 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75  inters of variou
20b60 73 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 50  s parts of the P
20b70 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a  arse object..*/.
20b80 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44  #define PARSE_HD
20b90 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61  R_SZ offsetof(Pa
20ba0 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 20 2f  rse,aColCache) /
20bb0 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74  * Recursive part
20bc0 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f   w/o aColCache*/
20bd0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 52  .#define PARSE_R
20be0 45 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65 74  ECURSE_SZ offset
20bf0 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f  of(Parse,sLastTo
20c00 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75 72  ken)    /* Recur
20c10 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65  sive part */.#de
20c20 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 5f  fine PARSE_TAIL_
20c30 53 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73 65  SZ (sizeof(Parse
20c40 29 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  )-PARSE_RECURSE_
20c50 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72  SZ) /* Non-recur
20c60 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65  sive part */.#de
20c70 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 28  fine PARSE_TAIL(
20c80 58 29 20 28 28 28 63 68 61 72 2a 29 28 58 29 29  X) (((char*)(X))
20c90 2b 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53  +PARSE_RECURSE_S
20ca0 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  Z)  /* Pointer t
20cb0 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  o tail */../*.**
20cc0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
20cd0 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65  currently inside
20ce0 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c   an sqlite3_decl
20cf0 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e  are_vtab() call.
20d00 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
20d10 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
20d20 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  BLE.  #define IN
20d30 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a  _DECLARE_VTAB 0.
20d40 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
20d50 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
20d60 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65  (pParse->declare
20d70 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  Vtab).#endif../*
20d80 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
20d90 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
20da0 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62   structure can b
20db0 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20  e declared on a 
20dc0 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a  stack and used.*
20dd0 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61  * to save the Pa
20de0 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
20df0 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69   value so that i
20e00 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65  t can be restore
20e10 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75  d later..*/.stru
20e20 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b  ct AuthContext {
20e30 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
20e40 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f  AuthContext;   /
20e50 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73  * Put saved Pars
20e60 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68  e.zAuthContext h
20e70 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ere */.  Parse *
20e80 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
20e90 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73       /* The Pars
20ea0 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d  e structure */.}
20eb0 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c  ;../*.** Bitfiel
20ec0 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76  d flags for P5 v
20ed0 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20  alue in various 
20ee0 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56  opcodes..**.** V
20ef0 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
20f00 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
20f10 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
20f20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
20f30 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55      == SQLITE_FU
20f40 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20  NC_LENGTH.**    
20f50 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
20f60 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55      == SQLITE_FU
20f70 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20  NC_TYPEOF.**    
20f80 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
20f90 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c      == BTREE_BUL
20fa0 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c  KLOAD.**    OPFL
20fb0 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
20fc0 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  == BTREE_SEEK_EQ
20fd0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f  .**    OPFLAG_FO
20fe0 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54  RDELETE    == BT
20ff0 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a  REE_FORDELETE.**
21000 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50      OPFLAG_SAVEP
21010 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45  OSITION == BTREE
21020 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a  _SAVEPOSITION.**
21030 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45      OPFLAG_AUXDE
21040 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45  LETE    == BTREE
21050 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64  _AUXDELETE.*/.#d
21060 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48  efine OPFLAG_NCH
21070 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20  ANGE       0x01 
21080 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a     /* OP_Insert:
21090 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
210a0 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20  b->nChange */.  
210b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210d0 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20     /* Also used 
210e0 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f  in P2 (not P5) o
210f0 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23  f OP_Delete */.#
21100 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50  define OPFLAG_EP
21110 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31  HEM         0x01
21120 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
21130 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70  : Ephemeral outp
21140 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66  ut is ok */.#def
21150 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  ine OPFLAG_LASTR
21160 4f 57 49 44 20 20 20 20 20 30 78 32 30 20 20 20  OWID     0x20   
21170 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
21180 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  e db->lastRowid 
21190 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
211a0 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20  G_ISUPDATE      
211b0 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20  0x04    /* This 
211c0 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20  OP_Insert is an 
211d0 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  sql UPDATE */.#d
211e0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50  efine OPFLAG_APP
211f0 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20  END        0x08 
21200 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69     /* This is li
21210 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
21220 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pend */.#define 
21230 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
21240 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20  SULT 0x10    /* 
21250 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73  Try to avoid a s
21260 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65  eek in BtreeInse
21270 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rt() */.#define 
21280 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20  OPFLAG_ISNOOP   
21290 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
212a0 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70  OP_Delete does p
212b0 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f  re-update-hook o
212c0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
212d0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
212e0 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
212f0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
21300 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
21310 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21320 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20  G_TYPEOFARG     
21330 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x80    /* OP_Co
21340 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
21350 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23  or typeof() */.#
21360 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55  define OPFLAG_BU
21370 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31  LKCSR       0x01
21380 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
21390 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75   used to open bu
213a0 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65  lk cursor */.#de
213b0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b  fine OPFLAG_SEEK
213c0 45 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20  EQ        0x02  
213d0 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63    /* OP_Open** c
213e0 75 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65  ursor uses EQ se
213f0 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ek only */.#defi
21400 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c  ne OPFLAG_FORDEL
21410 45 54 45 20 20 20 20 20 30 78 30 38 20 20 20 20  ETE     0x08    
21420 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c  /* OP_Open shoul
21430 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44  d use BTREE_FORD
21440 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
21450 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
21460 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a        0x10    /*
21470 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a   P2 to OP_Open**
21480 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e   is a register n
21490 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  umber */.#define
214a0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
214b0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
214c0 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65   OP_Compare: use
214d0 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
214e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
214f0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20  AG_SAVEPOSITION 
21500 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44   0x02    /* OP_D
21510 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61  elete/Insert: sa
21520 76 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f  ve cursor pos */
21530 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21540 41 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78  AUXDELETE     0x
21550 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  04    /* OP_Dele
21560 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44  te: index in a D
21570 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66  ELETE op */.#def
21580 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e  ine OPFLAG_NOCHN
21590 47 5f 4d 41 47 49 43 20 20 30 78 36 64 20 20 20  G_MAGIC  0x6d   
215a0 20 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72   /* OP_MakeRecor
215b0 64 3a 20 73 65 72 69 61 6c 74 79 70 65 20 31 30  d: serialtype 10
215c0 20 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a   is ok */../*. *
215d0 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72   Each trigger pr
215e0 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
215f0 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
21600 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73  stored as an ins
21610 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75  tance of. * stru
21620 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20  ct Trigger.. *. 
21630 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  * Pointers to in
21640 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
21650 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74  t Trigger are st
21660 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73  ored in two ways
21670 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22  .. * 1. In the "
21680 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74  trigHash" hash t
21690 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68  able (part of th
216a0 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20  e sqlite3* that 
216b0 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20  represents the. 
216c0 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20  *    database). 
216d0 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67  This allows Trig
216e0 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74  ger structures t
216f0 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62  o be retrieved b
21700 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c  y name.. * 2. Al
21710 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  l triggers assoc
21720 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e  iated with a sin
21730 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  gle table form a
21740 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73   linked list, us
21750 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e  ing the. *    pN
21760 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74  ext member of st
21770 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20  ruct Trigger. A 
21780 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
21790 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
217a0 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64  the. *    linked
217b0 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20   list is stored 
217c0 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72  as the "pTrigger
217d0 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
217e0 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20  associated. *   
217f0 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20   struct Table.. 
21800 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c  *. * The "step_l
21810 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e  ist" member poin
21820 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
21830 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e  element of a lin
21840 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74  ked list. * cont
21850 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
21860 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
21870 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67  ied as the trigg
21880 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a  er program.. */.
21890 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b  struct Trigger {
218a0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
218b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
218c0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72  e name of the tr
218d0 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20  igger           
218e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
218f0 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20    char *table;  
21900 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
21910 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
21920 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
21930 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20  ger applies */. 
21940 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
21950 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
21960 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
21970 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
21980 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  RT         */.  
21990 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20  u8 tr_tm;       
219a0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
219b0 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  f TRIGGER_BEFORE
219c0 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  , TRIGGER_AFTER 
219d0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e  */.  Expr *pWhen
219e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
219f0 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  The WHEN clause 
21a00 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
21a10 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
21a20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
21a30 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
21a40 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
21a50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
21a60 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> trigger,. 
21a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a80 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
21a90 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
21aa0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
21ab0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
21ac0 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
21ad0 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
21ae0 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
21af0 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
21b00 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
21b10 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
21b20 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
21b30 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
21b40 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
21b50 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
21b60 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
21b70 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
21b80 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
21b90 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
21ba0 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
21bb0 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
21bc0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67  };../*.** A trig
21bd0 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20  ger is either a 
21be0 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54  BEFORE or an AFT
21bf0 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65  ER trigger.  The
21c00 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
21c10 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  ants.** determin
21c20 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49  e which..**.** I
21c30 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74  f there are mult
21c40 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79  iple triggers, y
21c50 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65  ou might of some
21c60 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65   BEFORE and some
21c70 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68   AFTER..** In th
21c80 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f  at cases, the co
21c90 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61  nstants below ca
21ca0 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68  n be ORed togeth
21cb0 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  er..*/.#define T
21cc0 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31  RIGGER_BEFORE  1
21cd0 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
21ce0 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20  _AFTER   2../*. 
21cf0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
21d00 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
21d10 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73  tep is used to s
21d20 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51  tore a single SQ
21d30 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74  L statement. * t
21d40 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66  hat is a part of
21d50 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
21d60 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e  am.. *. * Instan
21d70 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
21d80 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74  iggerStep are st
21d90 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79  ored in a singly
21da0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69   linked list (li
21db0 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68  nked. * using th
21dc0 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72  e "pNext" member
21dd0 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  ) referenced by 
21de0 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  the "step_list" 
21df0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a  member of the. *
21e00 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
21e10 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
21e20 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
21e30 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
21e40 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
21e50 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
21e60 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
21e70 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65  ogram.. *. * The
21e80 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
21e90 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
21ea0 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
21eb0 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
21ec0 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
21ed0 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
21ee0 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
21ef0 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
21f00 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
21f10 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20  by the. * value 
21f20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f  of "op" as follo
21f30 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  ws:. *. * (op ==
21f40 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f   TK_INSERT). * o
21f50 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72  rconf    -> stor
21f60 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  es the ON CONFLI
21f70 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20  CT algorithm. * 
21f80 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20  pSelect   -> If 
21f90 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
21fa0 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43  T INTO ... SELEC
21fb0 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  T ... statement,
21fc0 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
21fd0 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
21fe0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
21ff0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
22000 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ent. Otherwise N
22010 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20  ULL.. * zTarget 
22020 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
22030 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
22040 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a  to insert into..
22050 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
22060 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
22070 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41  SERT INTO ... VA
22080 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LUES ... stateme
22090 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
220a0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
220b0 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62  ores values to b
220c0 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65  e inserted. Othe
220d0 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
220e0 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74  IdList   -> If t
220f0 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
22100 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75   INTO ... (<colu
22110 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45  mn-names>) VALUE
22120 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20  S .... *        
22130 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c        statement,
22140 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65   then this store
22150 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  s the column-nam
22160 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20  es to be. *     
22170 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65           inserte
22180 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f  d into.. *. * (o
22190 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a  p == TK_DELETE).
221a0 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
221b0 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
221c0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65   the table to de
221d0 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57  lete from.. * pW
221e0 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
221f0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
22200 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
22210 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
22220 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
22230 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
22240 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28  se NULL.. *. * (
22250 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
22260 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
22270 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
22280 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75  f the table to u
22290 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65  pdate.. * pWhere
222a0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
222b0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55   clause of the U
222c0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
222d0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
222e0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
222f0 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
22300 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  ULL.. * pExprLis
22310 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74  t -> A list of t
22320 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70  he columns to up
22330 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70  date and the exp
22340 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61  ressions to upda
22350 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  te. *           
22360 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20     them to. See 
22370 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20  sqlite3Update() 
22380 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  documentation of
22390 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20   "pChanges". *  
223a0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
223b0 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72  ment.. *. */.str
223c0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
223d0 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
223e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
223f0 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
22400 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
22410 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f  RT, TK_SELECT */
22420 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20  .  u8 orconf;   
22430 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f          /* OE_Ro
22440 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20  llback etc. */. 
22450 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b   Trigger *pTrig;
22460 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69        /* The tri
22470 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73  gger that this s
22480 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66  tep is a part of
22490 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
224a0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45  elect;     /* SE
224b0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
224c0 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20  r RHS of INSERT 
224d0 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20  INTO SELECT ... 
224e0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67  */.  char *zTarg
224f0 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72  et;       /* Tar
22500 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
22510 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
22520 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
22530 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
22540 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
22550 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
22560 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
22570 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
22580 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
22590 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
225a0 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  . */.  IdList *p
225b0 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
225c0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
225d0 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61 72  INSERT */.  char
225e0 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
225f0 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c   /* Original SQL
22600 20 74 65 78 74 20 6f 66 20 74 68 69 73 20 63 6f   text of this co
22610 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67  mmand */.  Trigg
22620 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
22630 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
22640 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
22650 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
22660 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
22670 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
22680 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
22690 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
226a0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
226b0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
226c0 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
226d0 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
226e0 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
226f0 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
22700 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
22710 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
22720 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
22730 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a  ** explicit..*/.
22740 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
22750 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
22760 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
22770 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
22780 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
22790 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
227a0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
227b0 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
227c0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
227d0 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
227e0 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
227f0 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
22800 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
22810 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
22820 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
22830 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
22840 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
22850 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
22860 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
22870 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
22880 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
22890 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
228a0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
228b0 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
228c0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
228d0 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
228e0 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
228f0 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
22900 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
22910 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
22920 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
22930 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
22940 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
22950 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
22960 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
22970 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
22980 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
22990 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
229a0 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  end..*/.struct S
229b0 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69  trAccum {.  sqli
229c0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
229d0 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
229e0 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
229f0 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
22a00 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65  L */.  char *zTe
22a10 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  xt;         /* T
22a20 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63  he string collec
22a30 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ted so far */.  
22a40 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  u32  nAlloc;    
22a50 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
22a60 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
22a70 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
22a80 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  u32  mxAlloc;   
22a90 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
22aa0 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69  allowed allocati
22ab0 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61  on.  0 for no ma
22ac0 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20  lloc usage */.  
22ad0 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20  u32  nChar;     
22ae0 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
22af0 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20  f the string so 
22b00 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20 61 63  far */.  u8   ac
22b10 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a  cError;       /*
22b20 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20   STRACCUM_NOMEM 
22b30 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  or STRACCUM_TOOB
22b40 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69  IG */.  u8   pri
22b50 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20  ntfFlags;    /* 
22b60 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c  SQLITE_PRINTF fl
22b70 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ags below */.};.
22b80 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
22b90 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69  _NOMEM   1.#defi
22ba0 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  ne STRACCUM_TOOB
22bb0 49 47 20 20 32 0a 23 64 65 66 69 6e 65 20 53 51  IG  2.#define SQ
22bc0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45  LITE_PRINTF_INTE
22bd0 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e  RNAL 0x01  /* In
22be0 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20  ternal-use-only 
22bf0 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77  converters allow
22c00 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
22c10 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46  LITE_PRINTF_SQLF
22c20 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51  UNC  0x02  /* SQ
22c30 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  L function argum
22c40 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66  ents to VXPrintf
22c50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
22c60 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
22c70 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65  ED 0x04  /* True
22c80 20 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c   if xText is all
22c90 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a  ocated space */.
22ca0 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f  .#define isMallo
22cb0 63 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70  ced(X)  (((X)->p
22cc0 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c  rintfFlags & SQL
22cd0 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f  ITE_PRINTF_MALLO
22ce0 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a  CED)!=0).../*.**
22cf0 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
22d00 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
22d10 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
22d20 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
22d30 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
22d40 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
22d50 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
22d60 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
22d70 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
22d80 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
22d90 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
22da0 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
22db0 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
22dc0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
22dd0 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
22de0 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
22df0 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
22e00 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
22e10 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
22e20 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
22e30 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
22e40 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
22e50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
22e60 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
22e70 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49  ored here */.} I
22e80 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
22e90 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
22ea0 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
22eb0 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
22ec0 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
22ed0 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
22ee0 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
22ef0 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
22f00 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
22f10 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
22f20 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
22f30 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
22f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f50 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
22f60 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
22f70 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
22f80 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
22f90 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
22fa0 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
22fb0 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
22fc0 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
22fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22fe0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
22ff0 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
23000 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
23010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23020 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
23030 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
23040 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
23050 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
23060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23070 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
23080 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
23090 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
230a0 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b  nt bSmallMalloc;
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65 20   /* Avoid large 
230d0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
230e0 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  ns if true */.  
230f0 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
23100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23110 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
23120 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
23130 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74  int neverCorrupt
23140 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23150 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
23160 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72   always well-for
23170 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  med */.  int szL
23180 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
23190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
231a0 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
231b0 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
231c0 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
231d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231e0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
231f0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
23200 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ount */.  int nS
23210 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20  tmtSpill;       
23220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
23230 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c  tmt-journal spil
23240 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68  l-to-disk thresh
23250 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  old */.  sqlite3
23260 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
23270 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
23280 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
23290 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
232a0 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
232b0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
232c0 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
232d0 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
232e0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
232f0 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
23300 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
23310 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
23320 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
23330 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
23340 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
23350 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
23360 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
23370 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23390 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
233a0 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
233b0 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
233c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
233d0 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
233e0 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
233f0 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
23400 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
23410 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
23420 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
23430 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
23440 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
23450 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
23460 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
23470 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
23480 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
23490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234a0 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
234b0 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
234c0 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
234e0 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
234f0 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
23500 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23520 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
23530 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
23540 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
23550 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
23560 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
23570 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
23580 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
23590 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
235a0 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
235b0 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
235c0 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
235d0 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75  e enabled */.  u
235e0 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20  32 szPma;       
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74   /* Maximum Sort
23610 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20  er PMA size */. 
23620 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
23630 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
23640 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
23650 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
23660 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
23670 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
23680 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
23690 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236b0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
236c0 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
236d0 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
236e0 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
236f0 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
23700 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
23710 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
23720 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
23730 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
23740 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
23750 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
23760 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
23770 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
23780 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
23790 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
237a0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
237b0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
237c0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
237d0 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
237e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
237f0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
23800 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
23810 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
23820 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
23830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
23840 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
23850 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
23860 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
23870 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
23880 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
23890 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
238a0 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
238b0 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
238c0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
238d0 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
238e0 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
238f0 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
23900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23910 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
23920 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
23930 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
23940 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
23950 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
23960 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
23970 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
23980 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
23990 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
239a0 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
239b0 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
239c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
239d0 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
239e0 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
239f0 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
23a00 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
23a10 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
23a20 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
23a30 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
23a40 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
23a50 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
23a60 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69  nch)(void*,int i
23a70 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73  SrcLine,u8 eThis
23a80 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61  ,u8 eMx);  /* Ca
23a90 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
23aa0 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67   *pVdbeBranchArg
23ab0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ad0 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
23ae0 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  ument */.#endif.
23af0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
23b00 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20  NTESTABLE.  int 
23b10 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29  (*xTestCallback)
23b20 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a  (int);        /*
23b30 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69   Invoked by sqli
23b40 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f  te3FaultSim() */
23b50 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c  .#endif.  int bL
23b60 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
23b70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23b80 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
23b90 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
23ba0 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65 73 65  .  int iOnceRese
23bb0 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20 20 20  tThreshold;     
23bc0 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20       /* When to 
23bd0 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f  reset OP_Once co
23be0 75 6e 74 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  unters */.};../*
23bf0 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69  .** This macro i
23c00 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
23c10 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
23c20 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ents to indicate
23c30 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73   that.** the ass
23c40 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ert is only vali
23c50 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  d on a well-form
23c60 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e  ed database.  In
23c70 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20  stead of:.**.** 
23c80 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b      assert( X );
23c90 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65  .**.** One write
23ca0 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  s:.**.**     ass
23cb0 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50  ert( X || CORRUP
23cc0 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f  T_DB );.**.** CO
23cd0 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65  RRUPT_DB is true
23ce0 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f   during normal o
23cf0 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55  peration.  CORRU
23d00 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69  PT_DB does not i
23d10 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20  ndicate.** that 
23d20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
23d30 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75  definitely corru
23d40 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74  pt, only that it
23d50 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
23d60 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74  t..** For most t
23d70 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55  est cases, CORRU
23d80 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20  PT_DB is set to 
23d90 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70  false using a sp
23da0 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33  ecial.** sqlite3
23db0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e  _test_control().
23dc0 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61    This enables a
23dd0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
23de0 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74  ts to prove.** t
23df0 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61  hings that are a
23e00 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77  lways true for w
23e10 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
23e20 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ases..*/.#define
23e30 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71   CORRUPT_DB  (sq
23e40 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65  lite3Config.neve
23e50 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a  rCorrupt==0)../*
23e60 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
23e70 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
23e80 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
23e90 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
23ea0 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73   Walker {.  Pars
23eb0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ed0 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
23ee0 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
23ef0 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
23f00 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
23f10 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
23f20 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
23f30 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
23f40 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
23f50 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
23f60 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
23f70 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
23f80 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
23f90 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
23fa0 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
23fb0 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
23fc0 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69  r SELECTs */.  i
23fd0 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ff0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
24000 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
24010 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20   */.  u8 eCode; 
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24040 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65  /* A small proce
24050 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20  ssing code */.  
24060 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
24090 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
240a0 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
240b0 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
240c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240d0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
240e0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
240f0 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24110 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f           /* A co
24120 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
24130 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
24140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24150 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73         /* A curs
24160 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
24170 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
24180 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
24190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
241a0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
241b0 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
241c0 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
241d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
241e0 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
241f0 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20  ferences */.    
24200 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20  struct CCurHint 
24210 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20  *pCCurHint;     
24220 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
24230 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48  d by codeCursorH
24240 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74  int() */.    int
24250 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20   *aiCol;        
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24270 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20         /* array 
24280 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65  of column indexe
24290 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
242a0 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f  IdxCover *pIdxCo
242b0 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ver;            
242c0 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
242d0 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a  index coverage *
242e0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78  /.    struct Idx
242f0 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78 54  ExprTrans *pIdxT
24300 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
24310 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64 78 65 64  /* Convert idxed
24320 20 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20   expr to column 
24330 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
24340 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 20  *pGroupBy;      
24350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24360 20 2f 2a 20 47 52 4f 55 50 20 42 59 20 63 6c 61   /* GROUP BY cla
24370 75 73 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  use */.    Selec
24380 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243a0 20 20 20 20 20 2f 2a 20 48 41 56 49 4e 47 20 74       /* HAVING t
243b0 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  o WHERE clause c
243c0 74 78 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  tx */.  } u;.};.
243d0 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
243e0 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
243f0 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
24400 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
24410 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
24420 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
24430 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
24440 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
24450 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
24460 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
24470 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
24480 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
24490 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
244a0 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
244b0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
244c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
244d0 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a  WalkNoop(Walker*
244e0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
244f0 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e  lite3SelectWalkN
24500 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  oop(Walker*, Sel
24510 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
24520 65 33 53 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c  e3SelectWalkFail
24530 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
24540 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
24550 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c  E_DEBUG.void sql
24560 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41 73  ite3SelectWalkAs
24570 73 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53  sert2(Walker*, S
24580 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a  elect*);.#endif.
24590 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
245a0 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
245b0 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
245c0 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
245d0 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
245e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
245f0 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20  _Continue    0  
24600 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77   /* Continue dow
24610 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20  n into children 
24620 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50  */.#define WRC_P
24630 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f  rune       1   /
24640 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20  * Omit children 
24650 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c  but continue wal
24660 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f  king siblings */
24670 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f  .#define WRC_Abo
24680 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  rt       2   /* 
24690 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65  Abandon the tree
246a0 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   walk */../*.** 
246b0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
246c0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65  his structure re
246d0 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f  presents a set o
246e0 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54  f one or more CT
246f0 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61  Es.** (common ta
24700 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29  ble expressions)
24710 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69   created by a si
24720 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
24730 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68  ..*/.struct With
24740 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20   {.  int nCte;  
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24760 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
24770 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49  f CTEs in the WI
24780 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57  TH clause */.  W
24790 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20  ith *pOuter;    
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
247b0 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54  * Containing WIT
247c0 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
247d0 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74  L */.  struct Ct
247e0 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  e {             
247f0 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61         /* For ea
24800 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49  ch CTE in the WI
24810 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f  TH clause.... */
24820 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
24830 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24840 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
24850 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
24860 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b  ExprList *pCols;
24870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24880 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69  /* List of expli
24890 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  cit column names
248a0 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  , or NULL */.   
248b0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
248c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
248d0 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69   /* The definiti
248e0 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  on of this CTE *
248f0 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  /.    const char
24900 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20   *zCteErr;      
24910 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d        /* Error m
24920 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75  essage for circu
24930 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a  lar references *
24940 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a  /.  } a[1];.};..
24950 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
24960 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  BUG./*.** An ins
24970 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65  tance of the Tre
24980 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20  eView object is 
24990 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e  used for printin
249a0 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
249b0 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75  .** data structu
249c0 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65  res on sqlite3De
249d0 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e  bugPrintf() usin
249e0 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69  g a tree-like vi
249f0 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  ew..*/.struct Tr
24a00 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69  eeView {.  int i
24a10 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
24a20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65     /* Which leve
24a30 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65  l of the tree we
24a40 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20   are on */.  u8 
24a50 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20   bLine[100];    
24a60 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72       /* Draw ver
24a70 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20  tical in column 
24a80 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73  i if bLine[i] is
24a90 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64   true */.};.#end
24aa0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
24ab0 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  UG */../*.** Ass
24ac0 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73  uming zIn points
24ad0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
24ae0 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
24af0 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61  aracter,.** adva
24b00 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74  nce zIn to point
24b10 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
24b20 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55  te of the next U
24b30 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a  TF-8 character..
24b40 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
24b50 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29  E_SKIP_UTF8(zIn)
24b60 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
24b70 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66            \.  if
24b80 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78  ( (*(zIn++))>=0x
24b90 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  c0 ){           
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bb0 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20     \.    while( 
24bc0 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30  (*zIn & 0xc0)==0
24bd0 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20  x80 ){ zIn++; } 
24be0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
24bf0 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
24c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20       \.}../*.** 
24c30 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50  The SQLITE_*_BKP
24c40 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62  T macros are sub
24c50 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65  stitutes for the
24c60 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74   error codes wit
24c70 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61  h.** the same na
24c80 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74  me but without t
24c90 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e  he _BKPT suffix.
24ca0 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69    These macros i
24cb0 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65  nvoke.** routine
24cc0 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68  s that report th
24cd0 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e  e line-number on
24ce0 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72   which the error
24cf0 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75   originated.** u
24d00 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67  sing sqlite3_log
24d10 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65  ().  The routine
24d20 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61  s also provide a
24d30 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63   convenient plac
24d40 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65  e.** to set a de
24d50 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e  bugger breakpoin
24d60 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
24d70 33 52 65 70 6f 72 74 45 72 72 6f 72 28 69 6e 74  3ReportError(int
24d80 20 69 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65 6e   iErr, int linen
24d90 6f 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  o, const char *z
24da0 54 79 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Type);.int sqlit
24db0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69  e3CorruptError(i
24dc0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
24dd0 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29  MisuseError(int)
24de0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e  ;.int sqlite3Can
24df0 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b  topenError(int);
24e00 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
24e10 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c  CORRUPT_BKPT sql
24e20 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
24e30 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
24e40 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ne SQLITE_MISUSE
24e50 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73  _BKPT sqlite3Mis
24e60 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  useError(__LINE_
24e70 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
24e80 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20  E_CANTOPEN_BKPT 
24e90 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
24ea0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
24eb0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
24ec0 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  UG.  int sqlite3
24ed0 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b  NomemError(int);
24ee0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f  .  int sqlite3Io
24ef0 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e  errnomemError(in
24f00 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
24f10 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f  3CorruptPgnoErro
24f20 72 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64  r(int,Pgno);.# d
24f30 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
24f40 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e  EM_BKPT sqlite3N
24f50 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  omemError(__LINE
24f60 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  __).# define SQL
24f70 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f  ITE_IOERR_NOMEM_
24f80 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72  BKPT sqlite3Ioer
24f90 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49  rnomemError(__LI
24fa0 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53  NE__).# define S
24fb0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47  QLITE_CORRUPT_PG
24fc0 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72  NO(P) sqlite3Cor
24fd0 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f  ruptPgnoError(__
24fe0 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73  LINE__,(P)).#els
24ff0 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
25000 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c  E_NOMEM_BKPT SQL
25010 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69  ITE_NOMEM.# defi
25020 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  ne SQLITE_IOERR_
25030 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54  NOMEM_BKPT SQLIT
25040 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20  E_IOERR_NOMEM.# 
25050 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
25060 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71  RRUPT_PGNO(P) sq
25070 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
25080 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64  r(__LINE__).#end
25090 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61  if../*.** FTS3 a
250a0 6e 64 20 46 54 53 34 20 62 6f 74 68 20 72 65 71  nd FTS4 both req
250b0 75 69 72 65 20 76 69 72 74 75 61 6c 20 74 61 62  uire virtual tab
250c0 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69  le support.*/.#i
250d0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
250e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
250f0 4c 45 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  LE).# undef SQLI
25100 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23  TE_ENABLE_FTS3.#
25110 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
25120 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66  ABLE_FTS4.#endif
25130 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
25140 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
25150 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
25160 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
25170 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
25180 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
25190 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
251a0 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
251b0 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20  lso call.** the 
251c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
251d0 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76  S4 macro to serv
251e0 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  e as an alias fo
251f0 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
25200 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
25210 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
25220 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
25230 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
25240 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
25250 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
25260 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  FTS3 1.#endif../
25270 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68  *.** The ctype.h
25280 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65   header is neede
25290 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20  d for non-ASCII 
252a0 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20  systems.  It is 
252b0 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62  also.** needed b
252c0 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33  y FTS3 when FTS3
252d0 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
252e0 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  the amalgamation
252f0 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
25300 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20  d(SQLITE_ASCII) 
25310 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
25320 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
25330 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64  FTS3) && defined
25340 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41  (SQLITE_AMALGAMA
25350 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65  TION)).# include
25360 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69   <ctype.h>.#endi
25370 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
25380 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69  lowing macros mi
25390 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64  mic the standard
253a0 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
253b0 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a  ns toupper(),.**
253c0 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c   isspace(), isal
253d0 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29  num(), isdigit()
253e0 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c   and isxdigit(),
253f0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54   respectively. T
25400 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72  he.** sqlite ver
25410 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  sions only work 
25420 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
25430 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  ters, regardless
25440 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23   of locale..*/.#
25450 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43  ifdef SQLITE_ASC
25460 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  II.# define sqli
25470 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28  te3Toupper(x)  (
25480 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79  (x)&~(sqlite3Cty
25490 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
254a0 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29  char)(x)]&0x20))
254b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
254c0 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73  3Isspace(x)   (s
254d0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
254e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
254f0 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e  )]&0x01).# defin
25500 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
25510 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
25520 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
25530 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29   char)(x)]&0x06)
25540 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25550 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73  3Isalpha(x)   (s
25560 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
25570 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25580 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e  )]&0x02).# defin
25590 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
255a0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
255b0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
255c0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29   char)(x)]&0x04)
255d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
255e0 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73  3Isxdigit(x)  (s
255f0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
25600 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25610 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e  )]&0x08).# defin
25620 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
25630 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70  (x)   (sqlite3Up
25640 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69  perToLower[(unsi
25650 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a  gned char)(x)]).
25660 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25670 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 73 71  Isquote(x)   (sq
25680 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
25690 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
256a0 5d 26 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20  ]&0x80).#else.# 
256b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
256c0 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70  upper(x)   toupp
256d0 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
256e0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
256f0 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
25700 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73  )   isspace((uns
25710 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
25720 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25730 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61  Isalnum(x)   isa
25740 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63  lnum((unsigned c
25750 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
25760 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
25770 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75  (x)   isalpha((u
25780 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25790 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
257a0 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69  e3Isdigit(x)   i
257b0 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  sdigit((unsigned
257c0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
257d0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
257e0 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74  git(x)  isxdigit
257f0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
25800 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
25810 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
25820 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67    tolower((unsig
25830 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
25840 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25850 71 75 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d  quote(x)   ((x)=
25860 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c  ='"'||(x)=='\''|
25870 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d  |(x)=='['||(x)==
25880 27 60 27 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e  '`').#endif.#ifn
25890 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
258a0 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
258b0 41 47 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  AGS.int sqlite3I
258c0 73 49 64 43 68 61 72 28 75 38 29 3b 0a 23 65 6e  sIdChar(u8);.#en
258d0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  dif../*.** Inter
258e0 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f  nal function pro
258f0 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73  totypes.*/.int s
25900 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f  qlite3StrICmp(co
25910 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
25920 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
25930 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
25940 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
25950 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70  sqlite3ColumnTyp
25960 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29  e(Column*,char*)
25970 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
25980 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
25990 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
259a0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
259b0 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
259c0 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
259d0 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
259e0 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a  te3Malloc(u64);.
259f0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
25a00 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f  locZero(u64);.vo
25a10 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
25a20 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
25a30 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
25a40 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
25a50 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
25a60 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
25a70 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69  MallocRawNN(sqli
25a80 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
25a90 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
25aa0 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
25ab0 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
25ac0 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
25ad0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
25ae0 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  har*, u64);.char
25af0 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44   *sqlite3DbSpanD
25b00 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
25b10 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
25b20 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  ar*);.void *sqli
25b30 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
25b40 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
25b50 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
25b60 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
25b70 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
25b80 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
25b90 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
25ba0 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
25bb0 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
25bc0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
25bd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
25be0 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a  bFreeNN(sqlite3*
25bf0 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
25c00 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
25c10 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
25c20 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
25c30 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
25c40 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
25c50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
25c60 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
25c70 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
25c80 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
25c90 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69  efault(void);.#i
25ca0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
25cb0 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
25cc0 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
25cd0 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
25ce0 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
25cf0 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  oid));.#endif.in
25d00 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
25d10 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
25d20 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
25d30 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
25d40 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
25d50 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
25d60 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
25d70 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
25d80 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
25d90 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
25da0 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
25db0 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
25dc0 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
25dd0 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
25de0 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
25df0 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
25e00 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
25e10 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
25e20 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
25e30 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
25e40 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
25e50 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
25e60 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
25e70 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
25e80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
25e90 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
25ea0 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
25eb0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
25ec0 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
25ed0 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
25ee0 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
25ef0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
25f00 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20  ee(D,P).#else.# 
25f10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
25f20 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
25f30 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
25f40 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
25f50 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
25f60 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
25f70 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
25f80 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
25f90 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
25fa0 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
25fb0 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
25fc0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e  .#endif../* Do n
25fd0 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45  ot allow both ME
25fe0 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53  MSYS5 and MEMSYS
25ff0 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20  3 to be defined 
26000 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68  together.  If th
26010 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62  ey.** are, disab
26020 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69  le MEMSYS3.*/.#i
26030 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
26040 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
26050 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
26060 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
26070 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
26080 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  ;.#undef SQLITE_
26090 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23  ENABLE_MEMSYS3.#
260a0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
260b0 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
260c0 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
260d0 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
260e0 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
260f0 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
26100 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
26110 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
26120 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
26130 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
26140 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
26150 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
26160 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
26170 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
26180 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
26190 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
261a0 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
261b0 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
261c0 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
261d0 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
261e0 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
261f0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ;.#endif.#if !de
26200 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
26210 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66  EX_OMIT) && !def
26220 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
26230 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73  X_NOOP).  void s
26240 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
26250 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ier(void);.#else
26260 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26270 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29  3MemoryBarrier()
26280 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33  .#endif..sqlite3
26290 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
262a0 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
262b0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
262c0 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  usUp(int, int);.
262d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
262e0 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29  usDown(int, int)
262f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
26300 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e  atusHighwater(in
26310 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
26320 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65  ite3LookasideUse
26330 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29  d(sqlite3*,int*)
26340 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20  ;../* Access to 
26350 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20  mutexes used by 
26360 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29  sqlite3_status()
26370 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65   */.sqlite3_mute
26380 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65  x *sqlite3Pcache
26390 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71  1Mutex(void);.sq
263a0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
263b0 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28  ite3MallocMutex(
263c0 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69  void);..#if defi
263d0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
263e0 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f  E_MULTITHREADED_
263f0 43 48 45 43 4b 53 29 20 26 26 20 21 64 65 66 69  CHECKS) && !defi
26400 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
26410 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69  _OMIT).void sqli
26420 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f  te3MutexWarnOnCo
26430 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33  ntention(sqlite3
26440 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a  _mutex*);.#else.
26450 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26460 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65  MutexWarnOnConte
26470 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a  ntion(x).#endif.
26480 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26490 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
264a0 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  INT.  int sqlite
264b0 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
264c0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
264d0 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20  qlite3IsNaN(X)  
264e0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
264f0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
26500 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
26510 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
26520 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53  ormation about S
26530 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  QL.** functions 
26540 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61  arguments that a
26550 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  re the parameter
26560 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28  s to the printf(
26570 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  ) function..*/.s
26580 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
26590 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41  ments {.  int nA
265a0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
265b0 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
265c0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
265d0 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20  */.  int nUsed; 
265e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
265f0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
26600 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  ents used so far
26610 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61   */.  sqlite3_va
26620 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f  lue **apArg;   /
26630 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76  * The argument v
26640 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69  alues */.};..voi
26650 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74  d sqlite3VXPrint
26660 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e  f(StrAccum*, con
26670 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
26680 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26690 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
266a0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
266b0 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
266c0 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  te3MPrintf(sqlit
266d0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
266e0 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
266f0 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
26700 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
26710 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66  *, va_list);.#if
26720 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26730 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
26740 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53  d(SQLITE_HAVE_OS
26750 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73  _TRACE).  void s
26760 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
26770 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  f(const char*, .
26780 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ..);.#endif.#if 
26790 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
267a0 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c  EST).  void *sql
267b0 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74  ite3TestTextToPt
267c0 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  r(const char*);.
267d0 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
267e0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
267f0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
26800 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72 65  TreeViewExpr(Tre
26810 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
26820 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64  pr*, u8);.  void
26830 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
26840 42 61 72 65 45 78 70 72 4c 69 73 74 28 54 72 65  BareExprList(Tre
26850 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
26860 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
26870 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
26880 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
26890 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c  rList(TreeView*,
268a0 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a   const ExprList*
268b0 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
268c0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
268d0 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74  e3TreeViewSelect
268e0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
268f0 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a  t Select*, u8);.
26900 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
26910 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56  eeViewWith(TreeV
26920 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68  iew*, const With
26930 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a  *, u8);.#endif..
26940 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
26950 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20  String(char **, 
26960 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
26970 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
26980 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72  ite3ErrorMsg(Par
26990 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
269a0 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
269b0 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72  ite3Dequote(char
269c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
269d0 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a  TokenInit(Token*
269e0 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,char*);.int sql
269f0 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
26a00 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
26a10 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
26a20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
26a30 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
26a40 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
26a50 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
26a60 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
26a70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
26a80 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
26a90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
26aa0 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
26ab0 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
26ac0 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
26ad0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
26ae0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
26af0 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
26b00 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
26b10 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
26b20 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
26b30 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
26b40 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
26b50 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65  e3NoTempsInRange
26b60 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
26b70 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73  ;.#endif.Expr *s
26b80 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28  qlite3ExprAlloc(
26b90 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
26ba0 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  st Token*,int);.
26bb0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
26bc0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
26bd0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
26be0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74  d sqlite3ExprAtt
26bf0 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69  achSubtrees(sqli
26c00 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  te3*,Expr*,Expr*
26c10 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  ,Expr*);.Expr *s
26c20 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73  qlite3PExpr(Pars
26c30 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  e*, int, Expr*, 
26c40 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
26c50 69 74 65 33 50 45 78 70 72 41 64 64 53 65 6c 65  ite3PExprAddSele
26c60 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ct(Parse*, Expr*
26c70 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72  , Select*);.Expr
26c80 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64   *sqlite3ExprAnd
26c90 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
26ca0 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73   Expr*);.Expr *s
26cb0 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69  qlite3ExprFuncti
26cc0 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  on(Parse*,ExprLi
26cd0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  st*, Token*);.vo
26ce0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73  id sqlite3ExprAs
26cf0 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61  signVarNumber(Pa
26d00 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32  rse*, Expr*, u32
26d10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26d20 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65  xprDelete(sqlite
26d30 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  3*, Expr*);.Expr
26d40 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
26d50 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73  rListAppend(Pars
26d60 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
26d70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
26d80 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
26d90 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65  pendVector(Parse
26da0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69  *,ExprList*,IdLi
26db0 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  st*,Expr*);.void
26dc0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
26dd0 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70  SetSortOrder(Exp
26de0 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  rList*,int);.voi
26df0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
26e00 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c  tSetName(Parse*,
26e10 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a  ExprList*,Token*
26e20 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
26e30 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70  te3ExprListSetSp
26e40 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  an(Parse*,ExprLi
26e50 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  st*,const char*,
26e60 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
26e70 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
26e80 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
26e90 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75  *, ExprList*);.u
26ea0 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  32 sqlite3ExprLi
26eb0 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78  stFlags(const Ex
26ec0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
26ed0 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
26ee0 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
26ef0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
26f00 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
26f10 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
26f20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
26f30 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
26f40 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
26f50 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  ,int);.#ifndef S
26f60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
26f70 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a  ALTABLE.Module *
26f80 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61  sqlite3PragmaVta
26f90 62 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65  bRegister(sqlite
26fa0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  3*,const char *z
26fb0 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Name);.#endif.vo
26fc0 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
26fd0 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
26fe0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
26ff0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
27000 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
27010 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
27020 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
27030 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
27040 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
27050 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
27060 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
27070 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
27080 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d  3DeleteColumnNam
27090 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c  es(sqlite3*,Tabl
270a0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
270b0 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c  ColumnsFromExprL
270c0 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ist(Parse*,ExprL
270d0 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e  ist*,i16*,Column
270e0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
270f0 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e  3SelectAddColumn
27100 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e  TypeAndCollation
27110 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53  (Parse*,Table*,S
27120 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
27130 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
27140 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
27150 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
27160 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
27170 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
27180 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  nt);.Index *sqli
27190 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
271a0 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20  ex(Table*);.i16 
271b0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49  sqlite3ColumnOfI
271c0 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36  ndex(Index*, i16
271d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
271e0 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
271f0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
27200 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
27210 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  .#if SQLITE_ENAB
27220 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
27230 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  S.  void sqlite3
27240 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
27250 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c  FromName(Table*,
27260 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65   Column*);.#else
27270 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27280 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
27290 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f  sFromName(T,C) /
272a0 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69  * no-op */.#endi
272b0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  f.void sqlite3Ad
272c0 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
272d0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  oken*,Token*);.v
272e0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
272f0 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
27300 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27310 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
27320 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
27330 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
27340 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
27350 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
27360 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
27370 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44  void sqlite3AddD
27380 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73  efaultValue(Pars
27390 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
273a0 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
273b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
273c0 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
273d0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
273e0 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61  oid sqlite3EndTa
273f0 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
27400 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65  *,Token*,u8,Sele
27410 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
27420 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20  3ParseUri(const 
27430 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
27440 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c  *,unsigned int*,
27450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27460 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
27470 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a  **,char**,char *
27480 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74  *);.Btree *sqlit
27490 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28  e3DbNameToBtree(
274a0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
274b0 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  har*);..#ifdef S
274c0 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
274d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
274e0 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c  3FaultSim(X) SQL
274f0 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69  ITE_OK.#else.  i
27500 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  nt sqlite3FaultS
27510 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  im(int);.#endif.
27520 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
27530 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
27540 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
27550 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
27560 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
27570 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74  te3BitvecTestNot
27580 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33  Null(Bitvec*, u3
27590 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
275a0 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
275b0 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
275c0 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
275d0 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
275e0 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
275f0 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
27600 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
27610 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
27620 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65  Bitvec*);.#ifnde
27630 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
27640 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  BLE.int sqlite3B
27650 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74  itvecBuiltinTest
27660 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64  (int,int*);.#end
27670 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69  if..RowSet *sqli
27680 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71  te3RowSetInit(sq
27690 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75  lite3*, void*, u
276a0 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f  nsigned int);.vo
276b0 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
276c0 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a  Clear(RowSet*);.
276d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
276e0 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a  etInsert(RowSet*
276f0 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
27700 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f  te3RowSetTest(Ro
27710 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63  wSet*, int iBatc
27720 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  h, i64);.int sql
27730 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52  ite3RowSetNext(R
27740 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a  owSet*, i64*);..
27750 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
27760 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f  teView(Parse*,To
27770 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
27780 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
27790 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
277a0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
277b0 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
277c0 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
277d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
277e0 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
277f0 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
27800 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
27810 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
27820 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
27830 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
27840 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66  B) 0.#endif..#if
27850 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
27860 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71  CHED>30.  int sq
27870 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
27880 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e  ro(yDbMask);.#en
27890 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
278a0 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
278b0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
278c0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
278d0 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65  te3CodeDropTable
278e0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
278f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
27900 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61   sqlite3DeleteTa
27910 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
27920 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  ble*);.#ifndef S
27930 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
27940 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20  NCREMENT.  void 
27950 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
27960 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20  mentBegin(Parse 
27970 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64  *pParse);.  void
27980 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
27990 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a  ementEnd(Parse *
279a0 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23  pParse);.#else.#
279b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
279c0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
279d0 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  n(X).# define sq
279e0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
279f0 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a  ntEnd(X).#endif.
27a00 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
27a10 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rt(Parse*, SrcLi
27a20 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64  st*, Select*, Id
27a30 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
27a40 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41  d *sqlite3ArrayA
27a50 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a  llocate(sqlite3*
27a60 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c  ,void*,int,int*,
27a70 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73  int*);.IdList *s
27a80 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65  qlite3IdListAppe
27a90 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  nd(sqlite3*, IdL
27aa0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
27ab0 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  nt sqlite3IdList
27ac0 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f  Index(IdList*,co
27ad0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c  nst char*);.SrcL
27ae0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
27af0 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74  istEnlarge(sqlit
27b00 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  e3*, SrcList*, i
27b10 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73  nt, int);.SrcLis
27b20 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
27b30 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
27b40 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
27b50 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63  n*, Token*);.Src
27b60 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
27b70 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65  ListAppendFromTe
27b80 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rm(Parse*, SrcLi
27b90 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
27ba0 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
27bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bc0 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
27bd0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
27be0 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
27bf0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
27c00 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20  IndexedBy(Parse 
27c10 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f  *, SrcList *, To
27c20 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
27c30 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41  ite3SrcListFuncA
27c40 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rgs(Parse*, SrcL
27c50 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ist*, ExprList*)
27c60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
27c70 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72  exedByLookup(Par
27c80 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63  se *, struct Src
27c90 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f  List_item *);.vo
27ca0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
27cb0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53  tShiftJoinType(S
27cc0 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
27cd0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73  qlite3SrcListAss
27ce0 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65  ignCursors(Parse
27cf0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  *, SrcList*);.vo
27d00 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  id sqlite3IdList
27d10 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
27d20 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
27d30 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65  sqlite3SrcListDe
27d40 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
27d50 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20  rcList*);.Index 
27d60 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65  *sqlite3Allocate
27d70 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69  IndexObject(sqli
27d80 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61  te3*,i16,int,cha
27d90 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
27da0 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
27db0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
27dc0 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
27dd0 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
27de0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
27df0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
27e00 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  *, int, int, u8)
27e10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ;.void sqlite3Dr
27e20 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  opIndex(Parse*, 
27e30 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
27e40 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
27e50 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  t(Parse*, Select
27e60 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
27e70 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
27e80 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a  SelectNew(Parse*
27e90 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  ,ExprList*,SrcLi
27ea0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
27eb0 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
27ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
27ed0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33  pr*,ExprList*,u3
27ee0 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  2,Expr*);.void s
27ef0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
27f00 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
27f10 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
27f20 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
27f30 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
27f40 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
27f50 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
27f60 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
27f70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
27f80 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
27f90 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
27fa0 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
27fb0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
27fc0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
27fd0 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
27fe0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
27ff0 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
28000 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
28010 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
28020 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
28030 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
28040 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
28050 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
28060 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
28070 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45  cList*, Expr*, E
28080 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29  xprList*, Expr*)
28090 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70  ;.void sqlite3Up
280a0 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63  date(Parse*, Src
280b0 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
280c0 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c  ,Expr*,int,ExprL
280d0 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 57 68 65  ist*,Expr*);.Whe
280e0 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
280f0 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
28100 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
28110 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
28120 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
28130 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
28140 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
28150 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68  LogEst sqlite3Wh
28160 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
28170 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
28180 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
28190 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
281a0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
281b0 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
281c0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
281d0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72  t sqlite3WhereOr
281e0 64 65 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57  deredInnerLoop(W
281f0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
28200 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
28210 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
28220 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
28230 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
28240 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
28250 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
28260 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
28270 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
28280 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
28290 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
282a0 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  ;.#define ONEPAS
282b0 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20  S_OFF      0    
282c0 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e      /* Use of ON
282d0 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65  EPASS not allowe
282e0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  d */.#define ONE
282f0 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20  PASS_SINGLE   1 
28300 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
28310 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69  S valid for a si
28320 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20  ngle row update 
28330 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
28340 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20  SS_MULTI    2   
28350 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
28360 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c  is valid for mul
28370 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f  tiple rows */.vo
28380 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
28390 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d  deLoadIndexColum
283a0 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  n(Parse*, Index*
283b0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
283c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
283d0 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
283e0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
283f0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
28400 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28410 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
28420 54 6f 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61  ToReg(Parse*, Ta
28430 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
28440 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28450 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
28460 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a  umnOfTable(Vdbe*
28470 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
28480 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28490 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f  qlite3ExprCodeMo
284a0 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
284b0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
284c0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
284d0 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e  Store(Parse*, in
284e0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
284f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
28500 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b  chePush(Parse*);
28510 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28520 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a  rCachePop(Parse*
28530 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28540 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50  xprCacheRemove(P
28550 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
28560 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28570 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72  prCacheClear(Par
28580 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
28590 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e  e3ExprCacheAffin
285a0 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a  ityChange(Parse*
285b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
285c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
285d0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
285e0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
285f0 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28  te3ExprCodeCopy(
28600 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28610 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28620 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61  3ExprCodeFactora
28630 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ble(Parse*, Expr
28640 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
28650 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e  ite3ExprCodeAtIn
28660 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  it(Parse*, Expr*
28670 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
28680 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28  te3ExprCodeTemp(
28690 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
286a0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
286b0 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28  3ExprCodeTarget(
286c0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
286d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
286e0 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
286f0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
28700 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28710 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69  e3ExprCodeExprLi
28720 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
28730 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
28740 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  u8);.#define SQL
28750 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20  ITE_ECEL_DUP    
28760 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c    0x01  /* Deep,
28770 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70   not shallow cop
28780 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ies */.#define S
28790 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f  QLITE_ECEL_FACTO
287a0 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63  R   0x02  /* Fac
287b0 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
287c0 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e   terms */.#defin
287d0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45  e SQLITE_ECEL_RE
287e0 46 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20  F      0x04  /* 
287f0 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78  Use ExprList.u.x
28800 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
28810 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
28820 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30  CEL_OMITREF  0x0
28830 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78  8  /* Omit if Ex
28840 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
28850 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73  rByCol */.void s
28860 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
28870 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
28880 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28890 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
288a0 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
288b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
288c0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
288d0 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20  alseDup(Parse*, 
288e0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
288f0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
28900 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
28910 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
28920 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64  const char*);.#d
28930 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45  efine LOCATE_VIE
28940 57 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e  W    0x01.#defin
28950 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20  e LOCATE_NOERR  
28960 20 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c   0x02.Table *sql
28970 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
28980 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73  Parse*,u32 flags
28990 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
289a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
289b0 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
289c0 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a  TableItem(Parse*
289d0 2c 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63  ,u32 flags,struc
289e0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
289f0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
28a00 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
28a10 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
28a20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
28a30 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
28a40 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
28a50 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
28a60 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
28a70 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
28a80 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
28a90 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
28aa0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28ab0 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
28ac0 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71  ,Token*);.int sq
28ad0 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
28ae0 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  har**, sqlite3*,
28af0 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c   int);.char *sql
28b00 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
28b10 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  n(sqlite3*, Toke
28b20 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
28b30 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73  ExprCompare(Pars
28b40 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  e*,Expr*, Expr*,
28b50 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28b60 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69  e3ExprCompareSki
28b70 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  p(Expr*, Expr*, 
28b80 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28b90 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
28ba0 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
28bb0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
28bc0 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
28bd0 69 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45  iesExpr(Parse*,E
28be0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
28bf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28c00 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c  prImpliesNonNull
28c10 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  Row(Expr*,int);.
28c20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28c30 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
28c40 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
28c50 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
28c60 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
28c70 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
28c80 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
28c90 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
28ca0 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45 78  overedByIndex(Ex
28cb0 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49  pr*, int iCur, I
28cc0 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74  ndex *pIdx);.int
28cd0 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e   sqlite3Function
28ce0 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72  UsesThisSrc(Expr
28cf0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64  *, SrcList*);.Vd
28d00 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64  be *sqlite3GetVd
28d10 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e  be(Parse*);.#ifn
28d20 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
28d30 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
28d40 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28  e3PrngSaveState(
28d50 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
28d60 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74  te3PrngRestoreSt
28d70 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ate(void);.#endi
28d80 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
28d90 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
28da0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
28db0 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
28dc0 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
28dd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28de0 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
28df0 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
28e00 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
28e10 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
28e20 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
28e30 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
28e40 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61  sqlite3EndTransa
28e50 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74  ction(Parse*,int
28e60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
28e70 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
28e80 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
28e90 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
28ea0 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
28eb0 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
28ec0 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
28ed0 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
28ee0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
28ef0 65 33 45 78 70 72 49 64 54 6f 54 72 75 65 46 61  e3ExprIdToTrueFa
28f00 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  lse(Expr*);.int 
28f10 73 71 6c 69 74 65 33 45 78 70 72 54 72 75 74 68  sqlite3ExprTruth
28f20 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72  Value(const Expr
28f30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
28f40 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78  xprIsConstant(Ex
28f50 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
28f60 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e  3ExprIsConstantN
28f70 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69  otJoin(Expr*);.i
28f80 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
28f90 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69  ConstantOrFuncti
28fa0 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69  on(Expr*, u8);.i
28fb0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
28fc0 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42  ConstantOrGroupB
28fd0 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  y(Parse*, Expr*,
28fe0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
28ff0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61   sqlite3ExprIsTa
29000 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  bleConstant(Expr
29010 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  *,int);.#ifdef S
29020 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
29030 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71  SOR_HINTS.int sq
29040 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e  lite3ExprContain
29050 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29  sSubquery(Expr*)
29060 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
29070 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
29080 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
29090 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
290a0 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
290b0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
290c0 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
290d0 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
290e0 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
290f0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
29100 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
29110 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
29120 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a  erateRowDelete(.
29130 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65      Parse*,Table
29140 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69  *,Trigger*,int,i
29150 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38  nt,int,i16,u8,u8
29160 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ,u8,int);.void s
29170 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
29180 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
29190 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
291a0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
291b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
291c0 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
291d0 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
291e0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  nt, int, int, in
291f0 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  t*,Index*,int);.
29200 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
29210 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
29220 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
29230 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
29240 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
29250 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
29260 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
29270 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
29280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29290 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38             u8,u8
292a0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
292b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
292c0 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a  NABLE_NULL_TRIM.
292d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65    void sqlite3Se
292e0 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64  tMakeRecordP5(Vd
292f0 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  be*,Table*);.#el
29300 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
29310 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64  te3SetMakeRecord
29320 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76  P5(A,B).#endif.v
29330 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
29340 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
29350 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
29360 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c  nt,int,int*,int,
29370 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  int,int);.int sq
29380 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
29390 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
293a0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38   Table*, int, u8
293b0 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a  , int, u8*, int*
293c0 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  , int*);.void sq
293d0 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
293e0 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
293f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
29400 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
29410 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
29420 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
29430 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
29440 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
29450 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
29460 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38  , int, char*, i8
29470 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
29480 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61  te3UniqueConstra
29490 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
294a0 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
294b0 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74  qlite3RowidConst
294c0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
294d0 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72  t, Table*);.Expr
294e0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
294f0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
29500 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
29510 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
29520 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
29530 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
29540 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
29550 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
29560 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
29570 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
29580 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
29590 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
295a0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
295b0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
295c0 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ect*,int);.#if S
295d0 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
295e0 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ED.void sqlite3S
295f0 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c  electSetName(Sel
29600 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ect*,const char*
29610 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29620 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  e sqlite3SelectS
29630 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64  etName(A,B).#end
29640 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
29650 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63  nsertBuiltinFunc
29660 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b  s(FuncDef*,int);
29670 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
29680 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
29690 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
296a0 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  r*,int,u8,u8);.v
296b0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
296c0 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
296d0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
296e0 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44  sqlite3RegisterD
296f0 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73  ateTimeFunctions
29700 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
29710 69 74 65 33 52 65 67 69 73 74 65 72 50 65 72 43  ite3RegisterPerC
29720 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e  onnectionBuiltin
29730 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
29740 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
29750 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
29760 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
29770 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
29780 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
29790 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
297a0 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
297b0 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
297c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
297d0 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
297e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
297f0 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
29800 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
29810 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
29820 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  able*, Expr*, Ex
29830 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e  prList*,Expr*,in
29840 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
29850 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29860 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
29870 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
29880 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
29890 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
298a0 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
298b0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
298c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
298d0 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
298e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
298f0 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
29900 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
29910 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
29920 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
29930 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
29940 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
29950 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
29960 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
29970 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
29980 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
29990 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
299a0 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
299b0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
299c0 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
299d0 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
299e0 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
299f0 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
29a00 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
29a10 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
29a20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
29a30 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
29a40 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a60 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
29a70 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
29a80 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
29a90 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
29aa0 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
29ab0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
29ac0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
29ad0 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
29ae0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
29af0 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
29b00 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
29b10 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
29b20 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
29b30 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
29b40 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
29b50 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
29b60 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
29b70 2c 53 65 6c 65 63 74 2a 2c 0a 20 20 20 20 20 20  ,Select*,.      
29b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ba0 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
29bb0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
29bc0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
29bd0 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
29be0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
29bf0 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38        Select*,u8
29c30 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
29c40 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69  st char*);.  Tri
29c50 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
29c60 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
29c70 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
29c80 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
29c90 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20 20 20  pr*, u8,.       
29ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cc0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
29cd0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69  st char*);.  Tri
29ce0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
29cf0 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74  3TriggerDeleteSt
29d00 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
29d10 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20 20  n*, Expr*,.     
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d40 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63     const char*,c
29d50 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
29d60 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
29d70 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
29d80 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
29d90 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
29da0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
29db0 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
29dc0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
29dd0 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
29de0 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
29df0 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
29e00 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
29e10 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
29e20 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
29e30 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
29e40 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
29e50 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
29e60 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29e70 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
29e80 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
29e90 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
29ea0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
29eb0 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
29ec0 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
29ed0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
29ee0 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
29ef0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
29f00 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
29f10 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
29f20 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
29f30 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
29f40 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
29f50 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
29f60 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
29f70 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
29f80 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
29f90 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
29fa0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
29fb0 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
29fc0 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
29fd0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
29fe0 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
29ff0 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
2a000 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
2a010 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
2a020 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
2a030 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
2a040 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
2a050 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2a060 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2a070 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
2a080 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
2a090 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2a0a0 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
2a0b0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
2a0c0 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
2a0d0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
2a0e0 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
2a0f0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
2a100 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
2a110 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
2a120 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
2a130 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
2a140 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
2a150 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
2a160 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2a170 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2a180 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
2a190 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2a1a0 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
2a1b0 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
2a1c0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
2a1d0 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
2a1e0 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
2a1f0 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
2a200 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
2a210 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2a220 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
2a230 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
2a240 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a250 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
2a260 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2a270 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
2a280 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
2a290 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
2a2a0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
2a2b0 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
2a2c0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
2a2d0 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
2a2e0 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
2a2f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
2a300 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
2a310 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
2a320 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2a330 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
2a340 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2a350 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
2a360 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
2a370 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2a380 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
2a390 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
2a3a0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
2a3b0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2a3c0 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
2a3d0 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
2a3e0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
2a3f0 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
2a400 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2a410 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
2a420 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
2a430 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
2a440 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
2a450 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
2a460 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
2a470 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
2a480 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
2a490 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2a4a0 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
2a4b0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
2a4c0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
2a4d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69  const char*);.#i
2a4e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a4f0 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69  T_UTF16.int sqli
2a500 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
2a510 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
2a520 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23  a, int nChar);.#
2a530 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2a540 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
2a550 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
2a560 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
2a570 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
2a580 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67  const u8**);.Log
2a590 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2a5a0 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73  t(u64);.LogEst s
2a5b0 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28  qlite3LogEstAdd(
2a5c0 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a  LogEst,LogEst);.
2a5d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a5e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2a5f0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2a600 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28  ogEstFromDouble(
2a610 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  double);.#endif.
2a620 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2a630 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
2a640 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a  CANSTATUS) || \.
2a650 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
2a660 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
2a670 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20  OR_STAT4) || \. 
2a680 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
2a690 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41  E_EXPLAIN_ESTIMA
2a6a0 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71  TED_ROWS).u64 sq
2a6b0 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
2a6c0 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66  (LogEst);.#endif
2a6d0 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56  .VList *sqlite3V
2a6e0 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a  ListAdd(sqlite3*
2a6f0 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  ,VList*,const ch
2a700 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f  ar*,int,int);.co
2a710 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2a720 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
2a730 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74  VList*,int);.int
2a740 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d   sqlite3VListNam
2a750 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f  eToNum(VList*,co
2a760 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2a770 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
2a780 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
2a790 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
2a7a0 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
2a7b0 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
2a7c0 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
2a7d0 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
2a7e0 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
2a7f0 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
2a800 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
2a810 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
2a820 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
2a830 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
2a840 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
2a850 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2a860 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
2a870 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2a880 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
2a890 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
2a8a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
2a8b0 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
2a8c0 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
2a8d0 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
2a8e0 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
2a8f0 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
2a900 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
2a910 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
2a920 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
2a930 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
2a940 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
2a950 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
2a960 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
2a970 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
2a980 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
2a990 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2a9a0 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
2a9b0 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
2a9c0 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
2a9d0 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
2a9e0 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
2a9f0 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
2aa00 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
2aa10 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
2aa20 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
2aa30 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
2aa40 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
2aa50 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
2aa60 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
2aa70 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
2aa80 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
2aa90 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
2aaa0 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
2aab0 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
2aac0 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
2aad0 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
2aae0 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
2aaf0 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
2ab00 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
2ab10 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
2ab20 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2ab30 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
2ab40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2ab50 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
2ab60 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
2ab70 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
2ab80 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43  ar sqlite3TableC
2ab90 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61  olumnAffinity(Ta
2aba0 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  ble*,int);.char 
2abb0 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
2abc0 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
2abd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2abe0 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
2abf0 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
2ac00 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
2ac10 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
2ac20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
2ac30 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
2ac40 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
2ac50 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2ac60 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
2ac70 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
2ac80 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2ac90 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72  lite3SystemError
2aca0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2acb0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78  void *sqlite3Hex
2acc0 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c  ToBlob(sqlite3*,
2acd0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
2ace0 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74  int n);.u8 sqlit
2acf0 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  e3HexToInt(int h
2ad00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77  );.int sqlite3Tw
2ad10 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20  oPartName(Parse 
2ad20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2ad30 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a  n *, Token **);.
2ad40 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2ad50 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
2ad60 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  E).const char *s
2ad70 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
2ad80 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  t);.#endif..#ifd
2ad90 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2ada0 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74  _DESERIALIZE.int
2adb0 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69   sqlite3MemdbIni
2adc0 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  t(void);.#endif.
2add0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2ade0 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
2adf0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
2ae00 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
2ae10 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
2ae20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
2ae30 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
2ae40 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
2ae50 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
2ae60 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
2ae70 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2ae80 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
2ae90 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
2aea0 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
2aeb0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
2aec0 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 43   Expr *pExpr);.C
2aed0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
2aee0 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50 61 72  xprNNCollSeq(Par
2aef0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2af00 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
2af10 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
2af20 4d 61 74 63 68 28 50 61 72 73 65 2a 2c 45 78 70  Match(Parse*,Exp
2af30 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  r*,Expr*);.Expr 
2af40 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
2af50 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73  ollateToken(Pars
2af60 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a  e *pParse, Expr*
2af70 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20  , const Token*, 
2af80 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
2af90 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
2afa0 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45  eString(Parse*,E
2afb0 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  xpr*,const char*
2afc0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2afd0 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28  ExprSkipCollate(
2afe0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2aff0 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28  te3CheckCollSeq(
2b000 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71  Parse *, CollSeq
2b010 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2b020 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28  CheckObjectName(
2b030 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63  Parse *, const c
2b040 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har *);.void sql
2b050 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
2b060 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  es(sqlite3 *, in
2b070 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  t);.int sqlite3A
2b080 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ddInt64(i64*,i64
2b090 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75  );.int sqlite3Su
2b0a0 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  bInt64(i64*,i64)
2b0b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c  ;.int sqlite3Mul
2b0c0 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2b0d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49  .int sqlite3AbsI
2b0e0 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65  nt32(int);.#ifde
2b0f0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2b100 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73  8_3_NAMES.void s
2b110 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
2b120 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  3(const char*, c
2b130 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
2b140 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c  efine sqlite3Fil
2b150 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65  eSuffix3(X,Y).#e
2b160 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47  ndif.u8 sqlite3G
2b170 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
2b180 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f  char *z,u8);..co
2b190 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
2b1a0 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74  3ValueText(sqlit
2b1b0 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
2b1c0 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
2b1d0 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61  Bytes(sqlite3_va
2b1e0 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20  lue*, u8);.void 
2b1f0 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
2b200 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  tr(sqlite3_value
2b210 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
2b220 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20  id *,u8,.       
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b240 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
2b250 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2b260 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74  lueSetNull(sqlit
2b270 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64  e3_value*);.void
2b280 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
2b290 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  e(sqlite3_value*
2b2a0 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  );.sqlite3_value
2b2b0 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65   *sqlite3ValueNe
2b2c0 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69  w(sqlite3 *);.#i
2b2d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b2e0 54 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73 71  T_UTF16.char *sq
2b2f0 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71  lite3Utf16to8(sq
2b300 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76  lite3 *, const v
2b310 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  oid*, int, u8);.
2b320 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2b330 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  e3ValueFromExpr(
2b340 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20  sqlite3 *, Expr 
2b350 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74  *, u8, u8, sqlit
2b360 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f  e3_value **);.vo
2b370 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41  id sqlite3ValueA
2b380 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c  pplyAffinity(sql
2b390 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38  ite3_value *, u8
2b3a0 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
2b3b0 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
2b3c0 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ON.extern const 
2b3d0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2b3e0 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
2b3f0 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  rty[];.extern co
2b400 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33  nst char sqlite3
2b410 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74  StrBINARY[];.ext
2b420 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2b430 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
2b440 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
2b450 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
2b460 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
2b470 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
2b480 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
2b490 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
2b4a0 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
2b4b0 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
2b4c0 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
2b4d0 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
2b4e0 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c   FuncDefHash sql
2b4f0 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74  ite3BuiltinFunct
2b500 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
2b510 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
2b520 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
2b530 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
2b540 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  dif.#endif.#ifde
2b550 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65  f VDBE_PROFILE.e
2b560 78 74 65 72 6e 20 73 71 6c 69 74 65 33 5f 75 69  xtern sqlite3_ui
2b570 6e 74 36 34 20 73 71 6c 69 74 65 33 4e 50 72 6f  nt64 sqlite3NPro
2b580 66 69 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a  fileCnt;.#endif.
2b590 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
2b5a0 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
2b5b0 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
2b5c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b5d0 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
2b5e0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2b5f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2b600 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
2b610 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2b620 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
2b630 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2b640 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2b650 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
2b660 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2b670 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
2b680 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
2b690 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
2b6a0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
2b6b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2b6c0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
2b6d0 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
2b6e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
2b6f0 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a  Subselect(Parse*
2b700 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69  , Expr *, int, i
2b710 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b720 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73  3SelectPrep(Pars
2b730 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
2b740 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
2b750 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72   sqlite3SelectWr
2b760 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72  ongNumTermsError
2b770 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2b780 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20  Select *p);.int 
2b790 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e  sqlite3MatchSpan
2b7a0 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Name(const char*
2b7b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2b7c0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2b7d0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
2b7e0 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
2b7f0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
2b800 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  t*, Expr*);.int 
2b810 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
2b820 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65  prListNames(Name
2b830 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69  Context*, ExprLi
2b840 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
2b850 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
2b860 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
2b870 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
2b880 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2b890 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65  3ResolveSelfRefe
2b8a0 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62  rence(Parse*,Tab
2b8b0 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78  le*,int,Expr*,Ex
2b8c0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
2b8d0 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
2b8e0 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
2b8f0 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
2b900 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
2b910 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2b920 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
2b930 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
2b940 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2b950 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
2b960 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
2b970 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
2b980 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
2b990 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
2b9a0 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
2b9b0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2b9c0 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
2b9d0 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
2b9e0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
2b9f0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
2ba00 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
2ba10 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f   char*, u8*);.vo
2ba20 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
2ba30 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2ba40 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2ba50 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79  qlite3InvokeBusy
2ba60 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64  Handler(BusyHand
2ba70 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ler*, sqlite3_fi
2ba80 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2ba90 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
2baa0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2bab0 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
2bac0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2bad0 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
2bae0 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
2baf0 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
2bb00 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
2bb10 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
2bb20 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
2bb30 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2bb40 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
2bb50 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
2bb60 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
2bb70 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
2bb80 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
2bb90 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
2bba0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
2bbb0 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
2bbc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
2bbd0 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
2bbe0 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
2bbf0 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
2bc00 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
2bc10 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
2bc20 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
2bc30 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
2bc40 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2bc50 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
2bc60 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
2bc70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
2bc80 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
2bc90 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2bca0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
2bcb0 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
2bcc0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2bcd0 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
2bce0 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64  *, Index*);.#ifd
2bcf0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2bd00 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  int sqlite3KeyIn
2bd10 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65  foIsWriteable(Ke
2bd20 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a  yInfo*);.#endif.
2bd30 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74  int sqlite3Creat
2bd40 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c  eFunc(sqlite3 *,
2bd50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
2bd60 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c  nt, int, void *,
2bd70 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2bd80 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2bd90 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2bda0 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
2bdb0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2bdc0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2bdd0 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28  e **), void (*)(
2bde0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2bdf0 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  ),.  FuncDestruc
2be00 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
2be10 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
2be20 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33  OomFault(sqlite3
2be30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2be40 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33  OomClear(sqlite3
2be50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2be60 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a  piExit(sqlite3 *
2be70 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  db, int);.int sq
2be80 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
2be90 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a  abase(Parse *);.
2bea0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
2beb0 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63  AccumInit(StrAcc
2bec0 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63  um*, sqlite3*, c
2bed0 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
2bee0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
2bef0 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
2bf00 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
2bf10 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2bf20 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
2bf30 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c  ndAll(StrAccum*,
2bf40 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2bf50 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64  id sqlite3Append
2bf60 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69  Char(StrAccum*,i
2bf70 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a  nt,char);.char *
2bf80 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
2bf90 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29  inish(StrAccum*)
2bfa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2bfb0 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41  rAccumReset(StrA
2bfc0 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
2bfd0 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e  ite3SelectDestIn
2bfe0 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69  it(SelectDest*,i
2bff0 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
2c000 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75  qlite3CreateColu
2c010 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  mnExpr(sqlite3 *
2c020 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74  , SrcList *, int
2c030 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71  , int);..void sq
2c040 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61  lite3BackupResta
2c050 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  rt(sqlite3_backu
2c060 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  p *);.void sqlit
2c070 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73  e3BackupUpdate(s
2c080 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c  qlite3_backup *,
2c090 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20   Pgno, const u8 
2c0a0 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  *);..#ifndef SQL
2c0b0 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
2c0c0 59 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  Y.int sqlite3Exp
2c0d0 72 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c  rCheckIN(Parse*,
2c0e0 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   Expr*);.#else.#
2c0f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
2c100 78 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20  xprCheckIN(x,y) 
2c110 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66  SQLITE_OK.#endif
2c120 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2c130 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
2c140 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74  STAT4.void sqlit
2c150 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f  e3AnalyzeFunctio
2c160 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
2c170 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53  lite3Stat4ProbeS
2c180 65 74 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72  etValue(.    Par
2c190 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63  se*,Index*,Unpac
2c1a0 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72  kedRecord**,Expr
2c1b0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b  *,int,int,int*);
2c1c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
2c1d0 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50  4ValueFromExpr(P
2c1e0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38  arse*, Expr*, u8
2c1f0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
2c200 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c210 53 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55  Stat4ProbeFree(U
2c220 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b  npackedRecord*);
2c230 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
2c240 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a  4Column(sqlite3*
2c250 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
2c260 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33  nt, int, sqlite3
2c270 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20  _value**);.char 
2c280 73 71 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75  sqlite3IndexColu
2c290 6d 6e 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  mnAffinity(sqlit
2c2a0 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  e3*, Index*, int
2c2b0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
2c2c0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
2c2d0 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65  o the LEMON-gene
2c2e0 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a  rated parser.*/.
2c2f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
2c300 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f  MALGAMATION.  vo
2c310 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65  id *sqlite3Parse
2c320 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28  rAlloc(void*(*)(
2c330 75 36 34 29 29 3b 0a 20 20 76 6f 69 64 20 73 71  u64));.  void sq
2c340 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28  lite3ParserFree(
2c350 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76  void*, void(*)(v
2c360 6f 69 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76  oid*));.#endif.v
2c370 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2c380 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
2c390 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69  ken, Parse*);.#i
2c3a0 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
2c3b0 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20  TACKDEPTH.  int 
2c3c0 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61  sqlite3ParserSta
2c3d0 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23  ckPeak(void*);.#
2c3e0 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
2c3f0 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
2c400 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
2c410 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c420 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
2c430 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
2c440 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
2c450 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
2c460 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2c470 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
2c480 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
2c490 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c4a0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
2c4b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
2c4c0 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
2c4d0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
2c4e0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
2c4f0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2c500 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
2c510 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
2c520 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
2c530 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
2c540 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
2c550 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
2c560 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2c570 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2c580 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
2c590 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a  te3VtabClear(Y).
2c5a0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2c5b0 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53  3VtabSync(X,Y) S
2c5c0 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
2c5d0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ne sqlite3VtabRo
2c5e0 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66  llback(X).#  def
2c5f0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
2c600 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69  ommit(X).#  defi
2c610 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
2c620 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65  Sync(db) 0.#  de
2c630 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2c640 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  Lock(X).#  defin
2c650 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
2c660 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
2c670 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2c680 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
2c690 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
2c6a0 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
2c6b0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
2c6c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
2c6d0 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
2c6e0 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
2c6f0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2c700 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
2c710 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
2c720 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2c730 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
2c740 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
2c750 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
2c760 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
2c770 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b  te3 *db, Vdbe*);
2c780 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2c790 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69  tabRollback(sqli
2c7a0 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74  te3 *db);.   int
2c7b0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
2c7c0 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  it(sqlite3 *db);
2c7d0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2c7e0 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20  VtabLock(VTable 
2c7f0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2c800 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54  te3VtabUnlock(VT
2c810 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2c820 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2c830 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29  ckList(sqlite3*)
2c840 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
2c850 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71  VtabSavepoint(sq
2c860 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e  lite3 *, int, in
2c870 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  t);.   void sqli
2c880 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
2c890 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74  msg(Vdbe*, sqlit
2c8a0 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54  e3_vtab*);.   VT
2c8b0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
2c8c0 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
2c8d0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64   Table*);.   Mod
2c8e0 75 6c 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62  ule *sqlite3Vtab
2c8f0 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20  CreateModule(.  
2c900 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20     sqlite3*,.   
2c910 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20    const char*,. 
2c920 20 20 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65      const sqlite
2c930 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20  3_module*,.     
2c940 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64  void*,.     void
2c950 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b  (*)(void*).   );
2c960 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2c970 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
2c980 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e   ((db)->nVTrans>
2c990 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61  0 && (db)->aVTra
2c9a0 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e  ns==0).#endif.in
2c9b0 74 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  t sqlite3VtabEpo
2c9c0 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28  nymousTableInit(
2c9d0 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  Parse*,Module*);
2c9e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2c9f0 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43  bEponymousTableC
2ca00 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f  lear(sqlite3*,Mo
2ca10 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dule*);.void sql
2ca20 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
2ca30 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
2ca40 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2ca50 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
2ca60 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2ca70 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
2ca80 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2ca90 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
2caa0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2cab0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2cac0 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
2cad0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2cae0 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
2caf0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
2cb00 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2cb10 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
2cb20 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2cb30 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
2cb40 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2cb50 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
2cb60 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
2cb70 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
2cb80 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
2cb90 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2cba0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2cbb0 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
2cbc0 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
2cbd0 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
2cbe0 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
2cbf0 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
2cc00 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
2cc10 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  g, Expr*);.void 
2cc20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
2cc30 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63  nction(sqlite3_c
2cc40 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2cc50 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71  te3_value**);.sq
2cc60 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
2cc70 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69  te3StmtCurrentTi
2cc80 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  me(sqlite3_conte
2cc90 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
2cca0 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
2ccb0 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  dex(Vdbe*, const
2ccc0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
2ccd0 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  t sqlite3Transfe
2cce0 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  rBindings(sqlite
2ccf0 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65  3_stmt *, sqlite
2cd00 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20  3_stmt *);.void 
2cd10 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73  sqlite3ParserRes
2cd20 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  et(Parse*);.int 
2cd30 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
2cd40 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71  (Vdbe*);.void sq
2cd50 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65  lite3ExprListChe
2cd60 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c  ckLength(Parse*,
2cd70 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
2cd80 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65  t char*);.CollSe
2cd90 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79  q *sqlite3Binary
2cda0 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50  CompareCollSeq(P
2cdb0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
2cdc0 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  Expr *);.int sql
2cdd0 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79  ite3TempInMemory
2cde0 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29  (const sqlite3*)
2cdf0 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
2ce00 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
2ce10 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64  name(int);.#ifnd
2ce20 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2ce30 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  AL.  int sqlite3
2ce40 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74  Checkpoint(sqlit
2ce50 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
2ce60 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e  nt*, int*);.  in
2ce70 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  t sqlite3WalDefa
2ce80 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71  ultHook(void*,sq
2ce90 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2cea0 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
2ceb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2cec0 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a  MIT_CTE.  With *
2ced0 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50  sqlite3WithAdd(P
2cee0 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65  arse*,With*,Toke
2cef0 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
2cf00 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
2cf10 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2cf20 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b  sqlite3*,With*);
2cf30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
2cf40 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20  ithPush(Parse*, 
2cf50 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73  With*, u8);.#els
2cf60 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  e.#define sqlite
2cf70 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29  3WithPush(x,y,z)
2cf80 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2cf90 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a  WithDelete(x,y).
2cfa0 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61  #endif../* Decla
2cfb0 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63  rations for func
2cfc0 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e  tions in fkey.c.
2cfd0 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72   All of these ar
2cfe0 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a  e replaced by.**
2cff0 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66   no-op macros if
2d000 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
2d010 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e  Y is defined. In
2d020 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f   this case no fo
2d030 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e  reign.** key fun
2d040 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76  ctionality is av
2d050 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54  ailable. If OMIT
2d060 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69  _TRIGGER is defi
2d070 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f  ned but.** OMIT_
2d080 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e  FOREIGN_KEY is n
2d090 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66  ot, only some of
2d0a0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61   the functions a
2d0b0 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a  re no-oped. In.*
2d0c0 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65  * this case fore
2d0d0 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72  ign keys are par
2d0e0 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65  sed, but no othe
2d0f0 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  r functionality 
2d100 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28  is.** provided (
2d110 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46  enforcement of F
2d120 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65  K constraints re
2d130 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67  quires the trigg
2d140 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e  ers sub-system).
2d150 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2d160 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
2d170 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65  EIGN_KEY) && !de
2d180 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2d190 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69  T_TRIGGER).  voi
2d1a0 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  d sqlite3FkCheck
2d1b0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2d1c0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2d1d0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2d1e0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
2d1f0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2d200 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76   *, Table*);.  v
2d210 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74  oid sqlite3FkAct
2d220 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ions(Parse*, Tab
2d230 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  le*, ExprList*, 
2d240 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
2d250 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
2d260 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c  Required(Parse*,
2d270 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69   Table*, int*, i
2d280 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  nt);.  u32 sqlit
2d290 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73  e3FkOldmask(Pars
2d2a0 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46  e*, Table*);.  F
2d2b0 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65  Key *sqlite3FkRe
2d2c0 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a  ferences(Table *
2d2d0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2d2e0 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  ne sqlite3FkActi
2d2f0 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  ons(a,b,c,d,e,f)
2d300 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2d310 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c  e3FkCheck(a,b,c,
2d320 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
2d330 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
2d340 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
2d350 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
2d360 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
2d370 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73     0.  #define s
2d380 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
2d390 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 20  (a,b,c,d)    0. 
2d3a0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2d3b0 46 6b 52 65 66 65 72 65 6e 63 65 73 28 61 29 20  FkReferences(a) 
2d3c0 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a         0.#endif.
2d3d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2d3e0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
2d3f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2d400 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
2d410 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74  , Table*);.  int
2d420 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
2d430 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62  Index(Parse*,Tab
2d440 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a  le*,FKey*,Index*
2d450 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a  *,int**);.#else.
2d460 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2d470 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20  3FkDelete(a,b). 
2d480 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2d490 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c  FkLocateIndex(a,
2d4a0 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a  b,c,d,e).#endif.
2d4b0 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c  ../*.** Availabl
2d4c0 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72  e fault injector
2d4d0 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75  s.  Should be nu
2d4e0 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67  mbered beginning
2d4f0 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66   with 0..*/.#def
2d500 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
2d510 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20  INJECTOR_MALLOC 
2d520 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51      0.#define SQ
2d530 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
2d540 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a  OR_COUNT      1.
2d550 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
2d560 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65  face to the code
2d570 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64   in fault.c used
2d580 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67   for identifying
2d590 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c   "benign".** mal
2d5a0 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68  loc failures. Th
2d5b0 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65  is is only prese
2d5c0 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 55 4e 54  nt if SQLITE_UNT
2d5d0 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f  ESTABLE.** is no
2d5e0 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69  t defined..*/.#i
2d5f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
2d600 45 53 54 41 42 4c 45 0a 20 20 76 6f 69 64 20 73  ESTABLE.  void s
2d610 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
2d620 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20  nMalloc(void);. 
2d630 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64   void sqlite3End
2d640 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
2d650 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  d);.#else.  #def
2d660 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e  ine sqlite3Begin
2d670 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20  BenignMalloc(). 
2d680 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2d690 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
2d6a0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
2d6b0 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
2d6c0 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
2d6d0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a  e3FindInIndex().
2d6e0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2d6f0 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20  DEX_ROWID       
2d700 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74   1   /* Search t
2d710 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
2d720 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
2d730 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20   IN_INDEX_EPH   
2d740 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65         2   /* Se
2d750 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61  arch an ephemera
2d760 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66  l b-tree */.#def
2d770 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
2d780 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a  EX_ASC    3   /*
2d790 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20   Existing index 
2d7a0 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ASCENDING */.#de
2d7b0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
2d7c0 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f  DEX_DESC   4   /
2d7d0 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
2d7e0 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23   DESCENDING */.#
2d7f0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2d800 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20 20  NOOP         5  
2d810 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61   /* No table ava
2d820 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70  ilable. Use comp
2d830 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a  arisons */./*.**
2d840 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66   Allowed flags f
2d850 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61 6d  or the 3rd param
2d860 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46  eter to sqlite3F
2d870 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f  indInIndex()..*/
2d880 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2d890 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78  X_NOOP_OK     0x
2d8a0 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72  0001  /* OK to r
2d8b0 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e  eturn IN_INDEX_N
2d8c0 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  OOP */.#define I
2d8d0 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48  N_INDEX_MEMBERSH
2d8e0 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49  IP  0x0002  /* I
2d8f0 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20  N operator used 
2d900 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74  for membership t
2d910 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  est */.#define I
2d920 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20  N_INDEX_LOOP    
2d930 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49      0x0004  /* I
2d940 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20  N operator used 
2d950 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74  as a loop */.int
2d960 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
2d970 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70  dex(Parse *, Exp
2d980 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20  r *, u32, int*, 
2d990 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69  int*);..int sqli
2d9a0 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
2d9b0 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
2d9c0 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
2d9d0 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
2d9e0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2d9f0 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71  e3JournalSize(sq
2da00 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69  lite3_vfs *);.#i
2da10 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2da20 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
2da30 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65 66 69  RITE) \. || defi
2da40 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
2da50 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57  E_BATCH_ATOMIC_W
2da60 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  RITE).  int sqli
2da70 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
2da80 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
2da90 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
2daa0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e  lite3JournalIsIn
2dab0 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66  Memory(sqlite3_f
2dac0 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  ile *p);.void sq
2dad0 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
2dae0 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
2daf0 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
2db00 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41  e3ExprSetHeightA
2db10 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70  ndFlags(Parse *p
2db20 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
2db30 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
2db40 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
2db50 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
2db60 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63  ExprHeight(Selec
2db70 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  t *);.  int sqli
2db80 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
2db90 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ht(Parse*, int);
2dba0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2dbb0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
2dbc0 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
2dbd0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
2dbe0 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
2dbf0 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
2dc00 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
2dc10 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
2dc20 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
2dc30 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
2dc40 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2dc50 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
2dc60 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2dc70 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
2dc80 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
2dc90 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
2dca0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
2dcb0 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
2dcc0 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
2dcd0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
2dce0 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
2dcf0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2dd00 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
2dd10 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
2dd20 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2dd30 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
2dd40 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
2dd50 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
2dd60 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
2dd70 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2dd80 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
2dd90 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
2dda0 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
2ddb0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
2ddc0 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41 47 45  fined(YYCOVERAGE
2ddd0 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ).  int sqlite3P
2dde0 61 72 73 65 72 43 6f 76 65 72 61 67 65 28 46 49  arserCoverage(FI
2ddf0 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LE*);.#endif../*
2de00 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
2de10 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
2de20 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
2de30 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
2de40 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
2de50 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
2de60 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
2de70 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
2de80 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
2de90 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 0a  acing messages..
2dea0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2deb0 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
2dec0 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
2ded0 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33  (A)  if( sqlite3
2dee0 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74  IoTrace ){ sqlit
2def0 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20  e3IoTrace A; }. 
2df00 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
2df10 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65  eIOTraceSql(Vdbe
2df20 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53  *);.SQLITE_API S
2df30 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
2df40 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  d (SQLITE_CDECL 
2df50 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
2df60 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
2df70 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2df80 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
2df90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
2dfa0 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
2dfb0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2dfc0 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
2dfd0 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
2dfe0 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
2dff0 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
2e000 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
2e010 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
2e020 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
2e030 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
2e040 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
2e050 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
2e060 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
2e070 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
2e080 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2e090 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
2e0a0 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
2e0b0 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
2e0c0 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
2e0d0 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
2e0e0 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
2e0f0 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
2e100 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
2e110 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
2e120 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
2e130 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
2e140 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
2e150 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
2e160 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
2e170 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
2e180 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
2e190 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
2e1a0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2e1b0 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
2e1c0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2e1d0 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
2e1e0 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
2e1f0 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
2e200 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
2e210 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
2e220 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
2e230 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
2e240 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
2e250 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
2e260 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
2e270 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
2e280 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2e290 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
2e2a0 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
2e2b0 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
2e2c0 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
2e2d0 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
2e2e0 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
2e2f0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
2e300 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
2e310 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
2e320 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
2e330 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
2e340 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
2e350 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
2e360 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
2e370 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
2e380 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
2e390 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
2e3a0 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
2e3b0 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
2e3c0 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
2e3d0 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
2e3e0 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
2e3f0 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
2e400 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
2e410 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
2e420 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
2e430 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
2e440 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
2e450 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
2e460 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
2e470 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
2e480 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
2e490 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
2e4a0 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  his constraint..
2e4b0 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69  **.** All of thi
2e4c0 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61  s is no-op for a
2e4d0 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c   production buil
2e4e0 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65  d.  It only come
2e4f0 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77  s into.** play w
2e500 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  hen the SQLITE_M
2e510 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d  EMDEBUG compile-
2e520 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
2e530 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  sed..*/.#ifdef S
2e540 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
2e550 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
2e560 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69  debugSetType(voi
2e570 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
2e580 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2e590 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
2e5a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
2e5b0 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64  debugNoType(void
2e5c0 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64  *,u8);.#else.# d
2e5d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
2e5e0 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59  debugSetType(X,Y
2e5f0 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  )  /* no-op */.#
2e600 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2e610 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58  emdebugHasType(X
2e620 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20  ,Y)  1.# define 
2e630 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2e640 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23  oType(X,Y)   1.#
2e650 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45  endif.#define ME
2e660 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20  MTYPE_HEAP      
2e670 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61   0x01  /* Genera
2e680 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f  l heap allocatio
2e690 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
2e6a0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20  MTYPE_LOOKASIDE 
2e6b0 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74   0x02  /* Heap t
2e6c0 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
2e6d0 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f  een lookaside */
2e6e0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2e6f0 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30 34  _PCACHE     0x04
2e700 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
2e710 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a  allocations */..
2e720 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20  /*.** Threading 
2e730 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66  interface.*/.#if
2e740 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
2e750 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74  ER_THREADS>0.int
2e760 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43 72   sqlite3ThreadCr
2e770 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65 61  eate(SQLiteThrea
2e780 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69  d**,void*(*)(voi
2e790 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  d*),void*);.int 
2e7a0 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69  sqlite3ThreadJoi
2e7b0 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c  n(SQLiteThread*,
2e7c0 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66   void**);.#endif
2e7d0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
2e7e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 50 41  LITE_ENABLE_DBPA
2e7f0 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69  GE_VTAB) || defi
2e800 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
2e810 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 70 61  .int sqlite3Dbpa
2e820 67 65 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  geRegister(sqlit
2e830 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  e3*);.#endif.#if
2e840 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2e850 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54  ENABLE_DBSTAT_VT
2e860 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  AB) || defined(S
2e870 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20  QLITE_TEST).int 
2e880 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65 67  sqlite3DbstatReg
2e890 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
2e8a0 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
2e8b0 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53 69  ite3ExprVectorSi
2e8c0 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ze(Expr *pExpr);
2e8d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2e8e0 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a 70  IsVector(Expr *p
2e8f0 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
2e900 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64 53  ite3VectorFieldS
2e910 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69 6e  ubexpr(Expr*, in
2e920 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2e930 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46 69  3ExprForVectorFi
2e940 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  eld(Parse*,Expr*
2e950 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2e960 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d 73  te3VectorErrorMs
2e970 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  g(Parse*, Expr*)
2e980 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
2e990 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
2e9a0 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73 74  TION_DIAGS.const
2e9b0 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65 33 43   char **sqlite3C
2e9c0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69 6e  ompileOptions(in
2e9d0 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64 69  t *pnOpt);.#endi
2e9e0 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  f..#endif /* SQL
2e9f0 49 54 45 49 4e 54 5f 48 20 2a 2f 0a              ITEINT_H */.