/ Hex Artifact Content
Login

Artifact bf65dfa6565fae2e0d501088fc9c5212244adc1429a543827a16b2f5eaf41982:


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 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 20 7c 7c 20  d(i386)      || 
6dd0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
6de0: 29 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  )      || define
6df0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6e00: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6e10: 5f 5f 78 38 36 5f 36 34 29 20 20 7c 7c 20 64 65  __x86_64)  || de
6e20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6e30: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6e40: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
6e50: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
6e60: 5f 41 4d 44 36 34 29 20 20 7c 7c 20 64 65 66 69  _AMD64)  || defi
6e70: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6e80: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6e90: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6ea0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6eb0: 4d 45 4c 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEL__) || define
6ec0: 64 28 5f 5f 41 41 52 43 48 36 34 45 4c 5f 5f 29  d(__AARCH64EL__)
6ed0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6ee0: 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e 65  RM64).#   define
6ef0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6f00: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6f10: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6f20: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6f30: 5f 70 70 63 5f 5f 29 20 7c 7c 20 5c 0a 20 20 20  _ppc__) || \.   
6f40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6f50: 4d 45 42 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEB__) || define
6f60: 64 28 5f 5f 41 41 52 43 48 36 34 45 42 5f 5f 29  d(__AARCH64EB__)
6f70: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6f80: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6f90: 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20  4321.# else.#   
6fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6fb0: 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69  TEORDER 0.# endi
6fc0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  f.#endif.#if SQL
6fd0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34  ITE_BYTEORDER==4
6fe0: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6ff0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
7000: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
7010: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
7020: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
7030: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
7040: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
7050: 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  lif SQLITE_BYTEO
7060: 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66  RDER==1234.# def
7070: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7080: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
7090: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
70a0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
70b0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
70c0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
70d0: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64  16LE.#else.# ifd
70e0: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
70f0: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
7100: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
7110: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
7120: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
7130: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
7140: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7150: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
7160: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7170: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
7180: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7190: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
71a0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
71b0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
71c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
71d0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
71e0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
71f0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
7200: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
7210: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
7220: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
7230: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
7240: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7250: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
7260: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
7270: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
7280: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
7290: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
72a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
72b0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
72c0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
72d0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
72e0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
72f0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
7300: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
7310: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
7320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  ./*.** Round up 
7330: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
7340: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
7350: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
7360: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
7370: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
7380: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
7390: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
73a0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
73b0: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
73c0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
73d0: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
73e0: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
73f0: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
7400: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
7410: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
7420: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
7430: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
7440: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
7450: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
7460: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
7470: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
7480: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
7490: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
74a0: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
74b0: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
74c0: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
74d0: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
74e0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
74f0: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
7500: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
7510: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
7520: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
7530: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
7540: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
7550: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
7560: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
7570: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
7580: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
7590: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
75a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
75b0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
75c0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
75d0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
75e0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
75f0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
7600: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
7610: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
7620: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
7630: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
7640: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
7650: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
7660: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
7670: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
7680: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
7690: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
76a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
76b0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
76c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
76d0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
76e0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
76f0: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
7700: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
7710: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
7720: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
7730: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
7740: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
7750: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
7760: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
7770: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e  ditionals.h>.#en
7780: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
7790: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
77a0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
77b0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
77c0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
77d0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
77e0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
77f0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
7800: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7810: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
7820: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
7830: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
7840: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
7850: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
7860: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7870: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
7880: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
7890: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
78a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
78b0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
78c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
78d0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
78e0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
78f0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
7900: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
7910: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
7920: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
7930: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
7940: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
7950: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
7960: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
7970: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
7980: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
7990: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
79a0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
79b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
79c0: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
79d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
79e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
79f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7a00: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
7a10: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7a20: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7a40: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
7a50: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
7a60: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e  f../*.** Only on
7a70: 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  e of SQLITE_ENAB
7a80: 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49  LE_STAT3 or SQLI
7a90: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20  TE_ENABLE_STAT4 
7aa0: 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a  can be defined..
7ab0: 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67  ** Priority is g
7ac0: 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45  iven to SQLITE_E
7ad0: 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66  NABLE_STAT4.  If
7ae0: 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69   either are defi
7af0: 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66  ned, also.** def
7b00: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
7b10: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
7b20: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
7b30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23  E_ENABLE_STAT4.#
7b40: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7b50: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
7b60: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
7b70: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
7b80: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
7b90: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
7ba0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
7bb0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
7bc0: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
7bd0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7be0: 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20  R_STAT4.# undef 
7bf0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7c00: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e  AT3_OR_STAT4.#en
7c10: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43  dif../*.** SELEC
7c20: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77  TTRACE_ENABLED w
7c30: 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20  ill be either 1 
7c40: 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f  or 0 depending o
7c50: 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
7c60: 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71  .** the Select q
7c70: 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74  uery generator t
7c80: 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20  racing logic is 
7c90: 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69  turned on..*/.#i
7ca0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
7cb0: 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52  _ENABLE_SELECTTR
7cc0: 41 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45  ACE).# define SE
7cd0: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7ce0: 44 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  D 1.#else.# defi
7cf0: 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  ne SELECTTRACE_E
7d00: 4e 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a  NABLED 0.#endif.
7d10: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
7d20: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
7d30: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
7d40: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
7d50: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
7d60: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7d70: 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68  a given sqlite h
7d80: 61 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  andle..**.** The
7d90: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
7da0: 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ler member of th
7db0: 65 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20  e sqlite struct 
7dc0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73  contains the bus
7dd0: 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f  y.** callback fo
7de0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  r the database h
7df0: 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65  andle. Each page
7e00: 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65  r opened via the
7e10: 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c   sqlite.** handl
7e20: 65 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f  e is passed a po
7e30: 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e  inter to sqlite.
7e40: 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65  busyHandler. The
7e50: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7e60: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72   callback is cur
7e70: 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f  rently invoked o
7e80: 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  nly from within 
7e90: 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65  pager.c..*/.type
7ea0: 64 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48  def struct BusyH
7eb0: 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c  andler BusyHandl
7ec0: 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48  er;.struct BusyH
7ed0: 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28  andler {.  int (
7ee0: 2a 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76  *xBusyHandler)(v
7ef0: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
7f00: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
7f10: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75  k */.  void *pBu
7f20: 73 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  syArg;          
7f30: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
7f40: 74 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61  t arg to busy ca
7f50: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20  llback */.  int 
7f60: 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20  nBusy;          
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7f80: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
7f90: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
7fa0: 20 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46   */.  u8 bExtraF
7fb0: 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  ileArg;         
7fc0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75          /* Inclu
7fd0: 64 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  de sqlite3_file 
7fe0: 61 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20  as callback arg 
7ff0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d  */.};../*.** Nam
8000: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
8010: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20  database table. 
8020: 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   The master data
8030: 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73  base table.** is
8040: 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65   a special table
8050: 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
8060: 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62  names and attrib
8070: 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75  utes of all.** u
8080: 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ser tables and i
8090: 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ndices..*/.#defi
80a0: 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  ne MASTER_NAME  
80b0: 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73       "sqlite_mas
80c0: 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d  ter".#define TEM
80d0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22  P_MASTER_NAME  "
80e0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
80f0: 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  er"../*.** The r
8100: 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
8110: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
8120: 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  table..*/.#defin
8130: 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20  e MASTER_ROOT   
8140: 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
8150: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68   name of the sch
8160: 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64  ema table..*/.#d
8170: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42  efine SCHEMA_TAB
8180: 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54  LE(x)  ((!OMIT_T
8190: 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54  EMPDB)&&(x==1)?T
81a0: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a  EMP_MASTER_NAME:
81b0: 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a  MASTER_NAME)../*
81c0: 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63  .** A convenienc
81d0: 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74  e macro that ret
81e0: 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
81f0: 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a  of elements in.*
8200: 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23  * an array..*/.#
8210: 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65  define ArraySize
8220: 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69  (X)    ((int)(si
8230: 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58  zeof(X)/sizeof(X
8240: 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65  [0])))../*.** De
8250: 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61  termine if the a
8260: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77  rgument is a pow
8270: 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65  er of two.*/.#de
8280: 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77  fine IsPowerOfTw
8290: 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d  o(X) (((X)&((X)-
82a0: 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  1))==0)../*.** T
82b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c  he following val
82c0: 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74  ue as a destruct
82d0: 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20  or means to use 
82e0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e  sqlite3DbFree().
82f0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44  .** The sqlite3D
8300: 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20  bFree() routine 
8310: 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72  requires two par
8320: 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20  ameters instead 
8330: 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61  of the.** one pa
8340: 72 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73  rameter that des
8350: 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c  tructors normall
8360: 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68  y want.  So we h
8370: 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65  ave to introduce
8380: 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76  .** this magic v
8390: 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f  alue that the co
83a0: 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64  de knows to hand
83b0: 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20  le differently. 
83c0: 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20   Any.** pointer 
83d0: 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61  will work here a
83e0: 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20  s long as it is 
83f0: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51  distinct from SQ
8400: 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61  LITE_STATIC.** a
8410: 6e 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  nd SQLITE_TRANSI
8420: 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ENT..*/.#define 
8430: 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20  SQLITE_DYNAMIC  
8440: 20 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72   ((sqlite3_destr
8450: 75 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74  uctor_type)sqlit
8460: 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f  e3MallocSize)../
8470: 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45  *.** When SQLITE
8480: 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66  _OMIT_WSD is def
8490: 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74  ined, it means t
84a0: 68 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70  hat the target p
84b0: 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20  latform does.** 
84c0: 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74  not support Writ
84d0: 61 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61  able Static Data
84e0: 20 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67   (WSD) such as g
84f0: 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63  lobal and static
8500: 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41   variables..** A
8510: 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73  ll variables mus
8520: 74 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74  t either be on t
8530: 68 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61  he stack or dyna
8540: 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
8550: 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65  d from.** the he
8560: 61 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73  ap.  When WSD is
8570: 20 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68   unsupported, th
8580: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
8590: 72 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65  rations scattere
85a0: 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20  d.** throughout 
85b0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20  the SQLite code 
85c0: 6d 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73  must become cons
85d0: 74 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20  tants instead.  
85e0: 54 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a  The SQLITE_WSD.*
85f0: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
8600: 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65  for this purpose
8610: 2e 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f  .  And instead o
8620: 66 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68  f referencing th
8630: 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69  e variable.** di
8640: 72 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69  rectly, we use i
8650: 74 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61  ts constant as a
8660: 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74   key to lookup t
8670: 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f  he run-time allo
8680: 63 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20  cated.** buffer 
8690: 74 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20  that holds real 
86a0: 76 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63  variable.  The c
86b0: 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20  onstant is also 
86c0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a  the initializer.
86d0: 2a 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74  ** for the run-t
86e0: 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75  ime allocated bu
86f0: 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  ffer..**.** In t
8700: 68 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68  he usual case wh
8710: 65 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f  ere WSD is suppo
8720: 72 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45  rted, the SQLITE
8730: 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a  _WSD and GLOBAL.
8740: 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65  ** macros become
8750: 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65   no-ops and have
8760: 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63   zero performanc
8770: 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66  e impact..*/.#if
8780: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8790: 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51  WSD.  #define SQ
87a0: 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20  LITE_WSD const. 
87b0: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
87c0: 74 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74  t,v) (*(t*)sqlit
87d0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69  e3_wsd_find((voi
87e0: 64 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28  d*)&(v), sizeof(
87f0: 76 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73  v))).  #define s
8800: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
8810: 69 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74  ig GLOBAL(struct
8820: 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20   Sqlite3Config, 
8830: 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20  sqlite3Config). 
8840: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64   int sqlite3_wsd
8850: 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74  _init(int N, int
8860: 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c   J);.  void *sql
8870: 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f  ite3_wsd_find(vo
8880: 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23  id *K, int L);.#
8890: 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53  else.  #define S
88a0: 51 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66  QLITE_WSD.  #def
88b0: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
88c0: 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  v.  #define sqli
88d0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
88e0: 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65  sqlite3Config.#e
88f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
8900: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
8910: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70   are used to sup
8920: 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77  press compiler w
8930: 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a  arnings and to.*
8940: 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20  * make it clear 
8950: 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  to human readers
8960: 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   when a function
8970: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65   parameter is de
8980: 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65  liberately.** le
8990: 66 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e  ft unused within
89a0: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
89b0: 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73  unction. This us
89c0: 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68  ually happens wh
89d0: 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e  en.** a function
89e0: 20 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61   is called via a
89f0: 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
8a00: 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74  r. For example t
8a10: 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  he.** implementa
8a20: 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61  tion of an SQL a
8a30: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61  ggregate step ca
8a40: 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75  llback may not u
8a50: 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65  se the.** parame
8a60: 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ter indicating t
8a70: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
8a80: 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f  uments passed to
8a90: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a   the aggregate,.
8aa0: 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74  ** if it knows t
8ab0: 68 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f  hat this is enfo
8ac0: 72 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a  rced elsewhere..
8ad0: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e  **.** When a fun
8ae0: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
8af0: 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61  is not used at a
8b00: 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  ll within the bo
8b10: 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  dy of a function
8b20: 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72  ,.** it is gener
8b30: 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55  ally named "NotU
8b40: 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64  sed" or "NotUsed
8b50: 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67  2" to make thing
8b60: 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a  s even clearer..
8b70: 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73  ** However, thes
8b80: 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73  e macros may als
8b90: 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70  o be used to sup
8ba0: 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72  press warnings r
8bb0: 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72  elated to.** par
8bc0: 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79  ameters that may
8bd0: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75   or may not be u
8be0: 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  sed depending on
8bf0: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74   compilation opt
8c00: 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61  ions..** For exa
8c10: 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d  mple those param
8c20: 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20  eters only used 
8c30: 69 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74  in assert() stat
8c40: 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65  ements. In these
8c50: 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61  .** cases the pa
8c60: 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d  rameters are nam
8c70: 65 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73  ed as per the us
8c80: 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e  ual conventions.
8c90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53  .*/.#define UNUS
8ca0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20  ED_PARAMETER(x) 
8cb0: 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e  (void)(x).#defin
8cc0: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
8cd0: 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f  ER2(x,y) UNUSED_
8ce0: 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55  PARAMETER(x),UNU
8cf0: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29  SED_PARAMETER(y)
8d00: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20  ../*.** Forward 
8d10: 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74  references to st
8d20: 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65  ructures.*/.type
8d30: 64 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e  def struct AggIn
8d40: 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65  fo AggInfo;.type
8d50: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43  def struct AuthC
8d60: 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65  ontext AuthConte
8d70: 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  xt;.typedef stru
8d80: 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41  ct AutoincInfo A
8d90: 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65  utoincInfo;.type
8da0: 64 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65  def struct Bitve
8db0: 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65  c Bitvec;.typede
8dc0: 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  f struct CollSeq
8dd0: 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65   CollSeq;.typede
8de0: 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  f struct Column 
8df0: 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20  Column;.typedef 
8e00: 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79  struct Db Db;.ty
8e10: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68  pedef struct Sch
8e20: 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65  ema Schema;.type
8e30: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20  def struct Expr 
8e40: 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74  Expr;.typedef st
8e50: 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78  ruct ExprList Ex
8e60: 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  prList;.typedef 
8e70: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
8e80: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e90: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
8ea0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
8eb0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8ec0: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
8ed0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8ee0: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
8ef0: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
8f00: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
8f10: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
8f20: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
8f30: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8f40: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
8f50: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
8f60: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
8f70: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
8f80: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
8f90: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
8fa0: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
8fb0: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
8fc0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
8fd0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
8fe0: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
8ff0: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
9000: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
9010: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
9020: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
9030: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9040: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
9050: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65  pedef struct Pre
9060: 55 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65  Update PreUpdate
9070: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9080: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
9090: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
90a0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
90b0: 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e   RenameToken Ren
90c0: 61 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65  ameToken;.typede
90d0: 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20  f struct RowSet 
90e0: 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20  RowSet;.typedef 
90f0: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
9100: 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65   Savepoint;.type
9110: 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63  def struct Selec
9120: 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65  t Select;.typede
9130: 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54  f struct SQLiteT
9140: 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65  hread SQLiteThre
9150: 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ad;.typedef stru
9160: 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65  ct SelectDest Se
9170: 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65  lectDest;.typede
9180: 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  f struct SrcList
9190: 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65   SrcList;.typede
91a0: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
91b0: 5f 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f  _str StrAccum; /
91c0: 2a 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73  * Internal alias
91d0: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72   for sqlite3_str
91e0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75   */.typedef stru
91f0: 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a  ct Table Table;.
9200: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
9210: 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f  ableLock TableLo
9220: 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ck;.typedef stru
9230: 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a  ct Token Token;.
9240: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
9250: 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77  reeView TreeView
9260: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9270: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
9280: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9290: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
92a0: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
92b0: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
92c0: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
92d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
92e0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
92f0: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
9300: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73  pedef struct Ups
9310: 65 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65  ert Upsert;.type
9320: 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c  def struct VTabl
9330: 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  e VTable;.typede
9340: 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78  f struct VtabCtx
9350: 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65   VtabCtx;.typede
9360: 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  f struct Walker 
9370: 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20  Walker;.typedef 
9380: 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f  struct WhereInfo
9390: 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65   WhereInfo;.type
93a0: 64 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f  def struct Windo
93b0: 77 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65  w Window;.typede
93c0: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
93d0: 74 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  th;.../*.** The 
93e0: 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
93f0: 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
9400: 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
9410: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
9420: 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
9430: 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
9440: 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
9450: 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
9460: 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
9470: 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
9480: 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
9490: 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
94a0: 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
94b0: 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
94c0: 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
94d0: 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64  on ix86..*/.#ifd
94e0: 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53  ef SQLITE_BITMAS
94f0: 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66  K_TYPE.  typedef
9500: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9510: 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65  TYPE Bitmask;.#e
9520: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36  lse.  typedef u6
9530: 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69  4 Bitmask;.#endi
9540: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  f../*.** The num
9550: 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
9560: 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
9570: 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
9580: 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
9590: 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
95a0: 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
95b0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
95c0: 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
95d0: 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
95e0: 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
95f0: 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
9600: 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28  MASKBIT32(n) (((
9610: 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c  unsigned int)1)<
9620: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c  <(n)).#define AL
9630: 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74  LBITS      ((Bit
9640: 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56  mask)-1)../* A V
9650: 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f  List object reco
9660: 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65  rds a mapping be
9670: 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73  tween parameters
9680: 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63  /variables/wildc
9690: 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53  ards.** in the S
96a0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75  QL statement (su
96b0: 63 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72  ch as $abc, @pqr
96c0: 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74  , or :xyz) and t
96d0: 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61  he integer.** va
96e0: 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73  riable number as
96f0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
9700: 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53  at parameter.  S
9710: 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65  ee the format de
9720: 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20  scription.** on 
9730: 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74  the sqlite3VList
9740: 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f  Add() routine fo
9750: 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69  r more informati
9760: 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20  on.  A VList is 
9770: 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61  really.** just a
9780: 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67  n array of integ
9790: 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ers..*/.typedef 
97a0: 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a  int VList;../*.*
97b0: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
97c0: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
97d0: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
97e0: 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20  the "u8" and.** 
97f0: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
9800: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
9810: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
9820: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
9830: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
9840: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
9850: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
9860: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
9870: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
9880: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
9890: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
98a0: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23  ude "pcache.h".#
98b0: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
98c0: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
98d0: 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45  "../* The SQLITE
98e0: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63  _EXTRA_DURABLE c
98f0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
9900: 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74  on used to set t
9910: 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79  he default.** sy
9920: 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e  nchronous settin
9930: 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20  g to EXTRA.  It 
9940: 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70  is no longer sup
9950: 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  ported..*/.#ifde
9960: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
9970: 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67  URABLE.# warning
9980: 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41   Use SQLITE_DEFA
9990: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d  ULT_SYNCHRONOUS=
99a0: 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c  3 instead of SQL
99b0: 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c  ITE_EXTRA_DURABL
99c0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
99d0: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
99e0: 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a  ONOUS 3.#endif..
99f0: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79  /*.** Default sy
9a00: 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73  nchronous levels
9a10: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
9a20: 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c  t (for historcal
9a30: 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41   reasons) the PA
9a40: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f  GER_SYNCHRONOUS_
9a50: 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a  * macros differ.
9a60: 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  ** from the SQLI
9a70: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9a80: 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20  RONOUS value by 
9a90: 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  1..**.**        
9aa0: 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f     PAGER_SYNCHRO
9ab0: 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55  NOUS       DEFAU
9ac0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a  LT_SYNCHRONOUS.*
9ad0: 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20  *   OFF         
9ae0: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a              0.**
9b00: 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20     NORMAL       
9b10: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
9b20: 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20             1.** 
9b30: 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20    FULL          
9b40: 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3               
9b50: 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20            2.**  
9b60: 20 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34   EXTRA         4
9b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b80: 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a           3.**.**
9b90: 20 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e   The "PRAGMA syn
9ba0: 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d  chronous" statem
9bb0: 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68  ent also uses th
9bc0: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9bd0: 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  bers..** In othe
9be0: 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72  r words, the zer
9bf0: 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20  o-based numbers 
9c00: 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c  are used for all
9c10: 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66   external interf
9c20: 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  aces.** and the 
9c30: 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73  one-based values
9c40: 20 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e   are used intern
9c50: 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ally..*/.#ifndef
9c60: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9c70: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65  SYNCHRONOUS.# de
9c80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
9c90: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
9ca0: 32 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  2.#endif.#ifndef
9cb0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9cc0: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  WAL_SYNCHRONOUS.
9cd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9ce0: 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43  DEFAULT_WAL_SYNC
9cf0: 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44  HRONOUS SQLITE_D
9d00: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9d10: 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  US.#endif../*.**
9d20: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66   Each database f
9d30: 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73  ile to be access
9d40: 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
9d50: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
9d60: 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ** of the follow
9d70: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20  ing structure.  
9d80: 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c  There are normal
9d90: 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20  ly two of these 
9da0: 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e  structures.** in
9db0: 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b   the sqlite.aDb[
9dc0: 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d  ] array.  aDb[0]
9dd0: 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
9de0: 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a  abase file and.*
9df0: 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20  * aDb[1] is the 
9e00: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
9e10: 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f  ed to hold tempo
9e20: 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64  rary tables.  Ad
9e30: 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61  ditional.** data
9e40: 62 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74  bases may be att
9e50: 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  ached..*/.struct
9e60: 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44   Db {.  char *zD
9e70: 62 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  bSName;      /* 
9e80: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74  Name of this dat
9e90: 61 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e  abase. (schema n
9ea0: 61 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d  ame, not filenam
9eb0: 65 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  e) */.  Btree *p
9ec0: 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Bt;          /* 
9ed0: 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63  The B*Tree struc
9ee0: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61  ture for this da
9ef0: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
9f00: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
9f10: 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67  ;     /* How agg
9f20: 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69  ressive at synci
9f30: 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20  ng data to disk 
9f40: 2a 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74  */.  u8 bSyncSet
9f50: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
9f60: 65 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e  e if "PRAGMA syn
9f70: 63 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20  chronous=N" has 
9f80: 62 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63  been run */.  Sc
9f90: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
9fa0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
9fb0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
9fc0: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
9fd0: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
9fe0: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
9ff0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
a000: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
a010: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
a020: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
a030: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
a040: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a050: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
a060: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
a070: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
a080: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
a090: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
a0a0: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
a0b0: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
a0c0: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
a0d0: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
a0e0: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
a0f0: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
a100: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
a110: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
a120: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
a130: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
a140: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
a150: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
a160: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
a170: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
a180: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
a190: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
a1a0: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
a1b0: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
a1c0: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
a1d0: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
a1e0: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
a1f0: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
a200: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
a210: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
a220: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
a230: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
a240: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
a250: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
a260: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
a270: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
a280: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
a290: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
a2a0: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
a2b0: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
a2c0: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
a2d0: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
a2e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
a2f0: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
a300: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
a310: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
a320: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
a330: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
a340: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
a350: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
a360: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
a370: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
a380: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
a390: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
a3a0: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
a3b0: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
a3c0: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
a3d0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a3e0: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
a3f0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
a400: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
a410: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
a420: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
a430: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
a440: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
a450: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
a460: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
a470: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
a480: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
a490: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
a4a0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
a4b0: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
a4c0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
a4d0: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
a4e0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
a4f0: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
a500: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
a510: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
a520: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
a530: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
a540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
a550: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
a560: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
a570: 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61   */.  u16 schema
a580: 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c  Flags;     /* Fl
a590: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
a5a0: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
a5b0: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
a5c0: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
a5d0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
a5e0: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
a5f0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
a600: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
a610: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
a620: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
a630: 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e  ts in the.** Db.
a640: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
a650: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
a660: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
a670: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
a680: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a690: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
a6a0: 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
a6b0: 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79  DbHasAnyProperty
a6c0: 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e  (D,I,P)  (((D)->
a6d0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a6e0: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a6f0: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53  !=0).#define DbS
a700: 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  etProperty(D,I,P
a710: 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  )     (D)->aDb[I
a720: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
a730: 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  aFlags|=(P).#def
a740: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
a750: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
a760: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a770: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e  ->schemaFlags&=~
a780: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
a790: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
a7a0: 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  e DB.pSchema->fl
a7b0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
a7c0: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
a7d0: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
a7e0: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
a7f0: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
a800: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
a810: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
a820: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
a830: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
a840: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
a850: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
a860: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
a870: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
a880: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
a890: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
a8a0: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
a8b0: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
a8c0: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
a8d0: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
a8e0: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
a8f0: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
a900: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
a910: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
a920: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
a930: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
a940: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
a950: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
a960: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
a970: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
a980: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
a990: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
a9a0: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
a9b0: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
a9c0: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64  h 0 bytes) */.#d
a9d0: 65 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61  efine DB_ResetWa
a9e0: 6e 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20  nted     0x0008 
a9f0: 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63   /* Reset the sc
aa00: 68 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d  hema when nSchem
aa10: 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a  aLock==0 */../*.
aa20: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
aa30: 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73   different kinds
aa40: 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20   of things that 
aa50: 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a  can be limited.*
aa60: 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69  * using the sqli
aa70: 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65  te3_limit() inte
aa80: 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rface..*/.#defin
aa90: 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  e SQLITE_N_LIMIT
aaa0: 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57   (SQLITE_LIMIT_W
aab0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29  ORKER_THREADS+1)
aac0: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
aad0: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
aae0: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
aaf0: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
ab00: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
ab10: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
ab20: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
ab30: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
ab40: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
ab50: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
ab60: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
ab70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
ab80: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
ab90: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
aba0: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
abb0: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
abc0: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
abd0: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
abe0: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
abf0: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
ac00: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
ac10: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
ac20: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
ac30: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
ac40: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
ac50: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
ac60: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
ac70: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
ac80: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
ac90: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
aca0: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
acb0: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
acc0: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
acd0: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
ace0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
acf0: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
ad00: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
ad10: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
ad20: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
ad30: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
ad40: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
ad50: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
ad60: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
ad70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
ad80: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
ad90: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
ada0: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
adb0: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
adc0: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
add0: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
ade0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
adf0: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
ae00: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
ae10: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
ae20: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
ae30: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
ae40: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
ae50: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
ae60: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
ae70: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
ae80: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
ae90: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
aea0: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
aeb0: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
aec0: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
aed0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
aee0: 20 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20   u32 bDisable;  
aef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79           /* Only
af00: 20 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f   operate the loo
af10: 6b 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f  kaside when zero
af20: 20 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20   */.  u16 sz;   
af30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
af40: 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75   Size of each bu
af50: 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f  ffer in bytes */
af60: 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b  .  u8 bMalloced;
af70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
af80: 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74  ue if pStart obt
af90: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
afa0: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20  e3_malloc() */. 
afb0: 20 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20   u32 nSlot;     
afc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
afd0: 65 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20  er of lookaside 
afe0: 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
aff0: 2a 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b  */.  u32 anStat[
b000: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
b010: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
b020: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
b030: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
b040: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49  ookasideSlot *pI
b050: 6e 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  nit;   /* List o
b060: 66 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72  f buffers not pr
b070: 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f  eviously used */
b080: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
b090: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
b0a0: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
b0b0: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
b0c0: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
b0d0: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
b0e0: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
b0f0: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
b100: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
b110: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
b120: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
b130: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
b140: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
b150: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
b160: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
b170: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
b180: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
b190: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
b1a0: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
b1b0: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
b1c0: 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75   for built-in fu
b1d0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
b1e0: 6e 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f  ns.  (Applicatio
b1f0: 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e  n-defined.** fun
b200: 63 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67  ctions use a reg
b210: 75 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65  ular table table
b220: 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a   from hash.h.).*
b230: 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46  *.** Hash each F
b240: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
b250: 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65   into one of the
b260: 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d   FuncDefHash.a[]
b270: 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69   slots..** Colli
b280: 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65  sions are on the
b290: 20 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68   FuncDef.u.pHash
b2a0: 20 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65   chain.  Use the
b2b0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53   SQLITE_FUNC_HAS
b2c0: 48 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20  H().** macro to 
b2d0: 63 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f  compute a hash o
b2e0: 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e  n the function n
b2f0: 61 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ame..*/.#define 
b300: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b310: 5f 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75  _SZ 23.struct Fu
b320: 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75  ncDefHash {.  Fu
b330: 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f  ncDef *a[SQLITE_
b340: 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20  FUNC_HASH_SZ];  
b350: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
b360: 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  le for functions
b370: 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53   */.};.#define S
b380: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28  QLITE_FUNC_HASH(
b390: 43 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25  C,L) (((C)+(L))%
b3a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b3b0: 5f 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c  _SZ)..#ifdef SQL
b3c0: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
b3d0: 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e  ICATION./*.** In
b3e0: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69  formation held i
b3f0: 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20  n the "sqlite3" 
b400: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
b410: 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75  ion object and u
b420: 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65  sed.** to manage
b430: 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   user authentica
b440: 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  tion..*/.typedef
b450: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
b460: 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33  userauth sqlite3
b470: 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63  _userauth;.struc
b480: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
b490: 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65  th {.  u8 authLe
b4a0: 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
b4b0: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
b4c0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c  authentication l
b4d0: 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  evel */.  int nA
b4e0: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
b4f0: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
b500: 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69  of the zAuthPW i
b510: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61  n bytes */.  cha
b520: 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20  r *zAuthPW;     
b530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
b540: 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61  ssword used to a
b550: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20  uthenticate */. 
b560: 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72   char *zAuthUser
b570: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
b580: 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64  * User name used
b590: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
b5a0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
b5b0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71  ed values for sq
b5c0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61  lite3_userauth.a
b5d0: 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66  uthLevel */.#def
b5e0: 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77  ine UAUTH_Unknow
b5f0: 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41  n     0     /* A
b600: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f  uthentication no
b610: 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f  t yet checked */
b620: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46  .#define UAUTH_F
b630: 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20  ail        1    
b640: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
b650: 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a  ication failed *
b660: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
b670: 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20  User        2   
b680: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
b690: 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75  ed as a normal u
b6a0: 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ser */.#define U
b6b0: 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20  AUTH_Admin      
b6c0: 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   3     /* Authen
b6d0: 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64  ticated as an ad
b6e0: 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a  ministrator */..
b6f0: 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65  /* Functions use
b700: 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61  d only by user a
b710: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67  uthorization log
b720: 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ic */.int sqlite
b730: 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63  3UserAuthTable(c
b740: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
b750: 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68   sqlite3UserAuth
b760: 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74  CheckLogin(sqlit
b770: 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
b780: 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
b790: 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73  e3UserAuthInit(s
b7a0: 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
b7b0: 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28  qlite3CryptFunc(
b7c0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
b7d0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
b7e0: 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f  ue**);..#endif /
b7f0: 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
b800: 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
b810: 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66  ./*.** typedef f
b820: 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  or the authoriza
b830: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  tion callback fu
b840: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65  nction..*/.#ifde
b850: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
b860: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74  THENTICATION.  t
b870: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
b880: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
b890: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
b8a0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
b8b0: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8d0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
b8e0: 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
b8f0: 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  r*);.#else.  typ
b900: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
b910: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
b920: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
b930: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b940: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b960: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
b970: 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
b980: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b990: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20  T_DEPRECATED./* 
b9a0: 54 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61  This is an extra
b9b0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61   SQLITE_TRACE ma
b9c0: 63 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74  cro that indicat
b9d0: 65 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63  es "legacy" trac
b9e0: 69 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74  ing.** in the st
b9f0: 79 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74  yle of sqlite3_t
ba00: 72 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  race().*/.#defin
ba10: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c  e SQLITE_TRACE_L
ba20: 45 47 41 43 59 20 20 20 20 20 20 20 20 20 20 30  EGACY          0
ba30: 78 34 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74  x40     /* Use t
ba40: 68 65 20 6c 65 67 61 63 79 20 78 54 72 61 63 65  he legacy xTrace
ba50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ba60: 54 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c  TE_TRACE_XPROFIL
ba70: 45 20 20 20 20 20 20 20 20 30 78 38 30 20 20 20  E        0x80   
ba80: 20 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67    /* Use the leg
ba90: 61 63 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a  acy xProfile */.
baa0: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51  #else.#define SQ
bab0: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
bac0: 59 20 20 20 20 20 20 20 20 20 20 30 0a 23 64 65  Y          0.#de
bad0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43  fine SQLITE_TRAC
bae0: 45 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20  E_XPROFILE      
baf0: 20 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    0.#endif /* SQ
bb00: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
bb10: 41 54 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ATED */.#define 
bb20: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e  SQLITE_TRACE_NON
bb30: 4c 45 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30  LEGACY_MASK  0x0
bb40: 66 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20  f     /* Normal 
bb50: 66 6c 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  flags */.../*.**
bb60: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63   Each database c
bb70: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20  onnection is an 
bb80: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
bb90: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
bba0: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  ure..*/.struct s
bbb0: 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74  qlite3 {.  sqlit
bbc0: 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20  e3_vfs *pVfs;   
bbd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49           /* OS I
bbe0: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74  nterface */.  st
bbf0: 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65  ruct Vdbe *pVdbe
bc00: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
bc10: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69  ist of active vi
bc20: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a  rtual machines *
bc30: 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66  /.  CollSeq *pDf
bc40: 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  ltColl;         
bc50: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
bc60: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
bc70: 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a  nce (BINARY) */.
bc80: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
bc90: 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  *mutex;         
bca0: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  /* Connection mu
bcb0: 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62  tex */.  Db *aDb
bcc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bcd0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61         /* All ba
bce0: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  ckends */.  int 
bcf0: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
bd00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
bd10: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
bd20: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
bd30: 20 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61   */.  u32 mDbFla
bd40: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bd50: 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63      /* flags rec
bd60: 6f 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20  ording internal 
bd70: 73 74 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66  state */.  u64 f
bd80: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
bd90: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67           /* flag
bda0: 73 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72  s settable by pr
bdb0: 61 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77  agmas. See below
bdc0: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
bdd0: 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  wid;            
bde0: 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20      /* ROWID of 
bdf0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65  most recent inse
be00: 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  rt (see above) *
be10: 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20  /.  i64 szMmap; 
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be30: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61    /* Default mma
be40: 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a  p_size setting *
be50: 2f 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c  /.  u32 nSchemaL
be60: 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
be70: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65    /* Do not rese
be80: 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65  t the schema whe
be90: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20  n non-zero */.  
bea0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65  unsigned int ope
beb0: 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  nFlags;       /*
bec0: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
bed0: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
bee0: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
bef0: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
bf00: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
bf10: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
bf20: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
bf30: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
bf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf50: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
bf60: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
bf70: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
bf80: 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b    int iSysErrno;
bf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfa0: 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66  /* Errno value f
bfb0: 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20  rom last system 
bfc0: 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64  error */.  u16 d
bfd0: 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20  bOptFlags;      
bfe0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
bff0: 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61  s to enable/disa
c000: 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ble optimization
c010: 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  s */.  u8 enc;  
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c030: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
c040: 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75  oding */.  u8 au
c050: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
c060: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
c070: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
c080: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
c090: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
c0a0: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
c0b0: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
c0c0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
c0d0: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
c0e0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
c0f0: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
c100: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
c110: 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e   */.  u8 bBenign
c120: 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  Malloc;         
c130: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65      /* Do not re
c140: 71 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72  quire OOMs if tr
c150: 75 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  ue */.  u8 dfltL
c160: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
c170: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
c180: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
c190: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
c1a0: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
c1b0: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
c1c0: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
c1d0: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
c1e0: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
c1f0: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
c200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c210: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
c220: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
c230: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
c240: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
c250: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
c260: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
c270: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
c280: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
c290: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
c2a0: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
c2b0: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
c2c0: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
c2d0: 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b   */.  u8 mTrace;
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2f0: 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d      /* zero or m
c300: 6f 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ore SQLITE_TRACE
c310: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e   flags */.  u8 n
c320: 6f 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20  oSharedCache;   
c330: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
c340: 65 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63  e if no shared-c
c350: 61 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ache backends */
c360: 0a 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20  .  u8 nSqlExec; 
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c380: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65   /* Number of pe
c390: 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63  nding OP_SqlExec
c3a0: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e   opcodes */.  in
c3b0: 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20  t nextPagesize; 
c3c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
c3d0: 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41  agesize after VA
c3e0: 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20  CUUM if >0 */.  
c3f0: 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20  u32 magic;      
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c410: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
c420: 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79  r detect library
c430: 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74   misuse */.  int
c440: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
c450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
c460: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
c470: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
c480: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61  ) */.  int nTota
c490: 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  lChange;        
c4a0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
c4b0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
c4c0: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
c4d0: 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69  ) */.  int aLimi
c4e0: 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  t[SQLITE_N_LIMIT
c4f0: 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a  ];   /* Limits *
c500: 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74  /.  int nMaxSort
c510: 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  erMmap;         
c520: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a    /* Maximum siz
c530: 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70  e of regions map
c540: 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f  ped by sorter */
c550: 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  .  struct sqlite
c560: 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20  3InitInfo {     
c570: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
c580: 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74  used during init
c590: 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  ialization */.  
c5a0: 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20    int newTnum;  
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c5c0: 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62   Rootpage of tab
c5d0: 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  le being initial
c5e0: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69  ized */.    u8 i
c5f0: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
c600: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
c610: 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e   db file is bein
c620: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
c630: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c650: 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72   /* TRUE if curr
c660: 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69  ently initializi
c670: 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ng */.    unsign
c680: 65 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  ed orphanTrigger
c690: 20 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74   : 1; /* Last st
c6a0: 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61  atement is orpha
c6b0: 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72  ned TEMP trigger
c6c0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c6d0: 20 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a   imposterTable :
c6e0: 20 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20   1; /* Building 
c6f0: 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c  an imposter tabl
c700: 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
c710: 64 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20  d reopenMemdb : 
c720: 31 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69  1;   /* ATTACH i
c730: 73 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65  s really a reope
c740: 6e 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f  n using MemDB */
c750: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
c760: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
c770: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c780: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
c790: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
c7a0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
c7b0: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
c7c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c7d0: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
c7e0: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
c7f0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
c800: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
c810: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c820: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
c830: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
c840: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
c850: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
c860: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c870: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
c880: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
c890: 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20   int nVDestroy; 
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8b0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c8c0: 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f  ve OP_VDestroy o
c8d0: 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  perations */.  i
c8e0: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c900: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
c910: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
c920: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
c930: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
c940: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
c950: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
c960: 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72  s */.  int (*xTr
c970: 61 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76  ace)(u32,void*,v
c980: 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20  oid*,void*);    
c990: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
c9a0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
c9b0: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9d0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c9e0: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
c9f0: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
ca00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
ca10: 43 41 54 45 44 0a 20 20 76 6f 69 64 20 28 2a 78  CATED.  void (*x
ca20: 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63  Profile)(void*,c
ca30: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b  onst char*,u64);
ca40: 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66    /* Profiling f
ca50: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
ca60: 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20  d *pProfileArg; 
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca80: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
ca90: 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75  nt to profile fu
caa0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  nction */.#endif
cab0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
cac0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
cad0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
cae0: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
caf0: 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  ack() */.  int (
cb00: 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  *xCommitCallback
cb10: 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20  )(void*);    /* 
cb20: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
cb30: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
cb40: 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67  id *pRollbackArg
cb50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
cb60: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
cb70: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
cb80: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
cb90: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
cba0: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
cbb0: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
cbc0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
cbd0: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
cbe0: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
cbf0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
cc00: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
cc10: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
cc20: 5f 69 6e 74 36 34 29 3b 0a 20 20 50 61 72 73 65  _int64);.  Parse
cc30: 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
cc40: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
cc50: 65 6e 74 20 70 61 72 73 65 20 2a 2f 0a 23 69 66  ent parse */.#if
cc60: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
cc70: 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
cc80: 0a 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64  .  void *pPreUpd
cc90: 61 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  ateArg;         
cca0: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
ccb0: 6e 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65  nt to xPreUpdate
ccc0: 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
ccd0: 69 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43  id (*xPreUpdateC
cce0: 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52  allback)(   /* R
ccf0: 65 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20  egistered using 
cd00: 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74  sqlite3_preupdat
cd10: 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20  e_hook() */.    
cd20: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
cd30: 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63  nt,char const*,c
cd40: 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74  har const*,sqlit
cd50: 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33  e3_int64,sqlite3
cd60: 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72  _int64.  );.  Pr
cd70: 65 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64  eUpdate *pPreUpd
cd80: 61 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43  ate;        /* C
cd90: 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76  ontext for activ
cda0: 65 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c  e pre-update cal
cdb0: 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20  lback */.#endif 
cdc0: 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  /* SQLITE_ENABLE
cdd0: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20  _PREUPDATE_HOOK 
cde0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cdf0: 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
ce00: 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29   (*xWalCallback)
ce10: 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33  (void *, sqlite3
ce20: 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
ce30: 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
ce40: 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a  pWalArg;.#endif.
ce50: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
ce60: 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  ded)(void*,sqlit
ce70: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
ce80: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
ce90: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
cea0: 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69  ed16)(void*,sqli
ceb0: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
cec0: 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  p,const void*);.
ced0: 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65    void *pCollNee
cee0: 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65  dedArg;.  sqlite
cef0: 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20  3_value *pErr;  
cf00: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
cf10: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73  recent error mes
cf20: 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  sage */.  union 
cf30: 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69  {.    volatile i
cf40: 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64  nt isInterrupted
cf50: 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c  ; /* True if sql
cf60: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68  ite3_interrupt h
cf70: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
cf80: 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74  /.    double not
cf90: 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20  Used1;          
cfa0: 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20    /* Spacer */. 
cfb0: 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69   } u1;.  Lookasi
cfc0: 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  de lookaside;   
cfd0: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73         /* Lookas
cfe0: 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69  ide malloc confi
cff0: 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e  guration */.#ifn
d000: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
d010: 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
d020: 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41  sqlite3_xauth xA
d030: 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  uth;          /*
d040: 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a   Access authoriz
d050: 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a  ation function *
d060: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41  /.  void *pAuthA
d070: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
d080: 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e    /* 1st argumen
d090: 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20  t to the access 
d0a0: 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  auth function */
d0b0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
d0c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
d0d0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
d0e0: 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29  int (*xProgress)
d0f0: 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a  (void *);     /*
d100: 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   The progress ca
d110: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
d120: 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20   *pProgressArg; 
d130: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
d140: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f  ument to the pro
d150: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
d160: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72  /.  unsigned nPr
d170: 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20  ogressOps;      
d180: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f    /* Number of o
d190: 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72  pcodes for progr
d1a0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
d1b0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
d1c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
d1d0: 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56  ALTABLE.  int nV
d1e0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
d1f0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63          /* Alloc
d200: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54  ated size of aVT
d210: 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  rans */.  Hash a
d220: 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20  Module;         
d230: 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c          /* popul
d240: 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  ated by sqlite3_
d250: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
d260: 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56  */.  VtabCtx *pV
d270: 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20  tabCtx;         
d280: 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f     /* Context fo
d290: 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f  r active vtab co
d2a0: 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a  nnect/create */.
d2b0: 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61    VTable **aVTra
d2c0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
d2d0: 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65  /* Virtual table
d2e0: 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e  s with open tran
d2f0: 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54  sactions */.  VT
d300: 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63  able *pDisconnec
d310: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  t;          /* D
d320: 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20  isconnect these 
d330: 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f  in next sqlite3_
d340: 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e  prepare() */.#en
d350: 64 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63  dif.  Hash aFunc
d360: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d370: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
d380: 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e of connection 
d390: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48  functions */.  H
d3a0: 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20  ash aCollSeq;   
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d3c0: 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  All collating se
d3d0: 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73  quences */.  Bus
d3e0: 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e  yHandler busyHan
d3f0: 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75  dler;      /* Bu
d400: 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  sy callback */. 
d410: 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d   Db aDbStatic[2]
d420: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
d430: 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66  * Static space f
d440: 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74  or the 2 default
d450: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53   backends */.  S
d460: 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
d470: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  oint;        /* 
d480: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73  List of active s
d490: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
d4a0: 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20  nt busyTimeout; 
d4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d4c0: 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d  Busy handler tim
d4d0: 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f  eout, in msec */
d4e0: 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e  .  int nSavepoin
d4f0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
d500: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f   /* Number of no
d510: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
d520: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
d530: 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20  t nStatement;   
d540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d550: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
d560: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
d570: 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34  ctions  */.  i64
d580: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
d590: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
d5a0: 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  t deferred const
d5b0: 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e  raints this tran
d5c0: 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36  saction. */.  i6
d5d0: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
d5e0: 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ns;         /* N
d5f0: 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65  et deferred imme
d600: 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74  diate constraint
d610: 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79  s */.  int *pnBy
d620: 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20  tesFreed;       
d630: 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e       /* If not N
d640: 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74  ULL, increment t
d650: 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20  his in DbFree() 
d660: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
d670: 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
d680: 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66  OTIFY.  /* The f
d690: 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c  ollowing variabl
d6a0: 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65  es are all prote
d6b0: 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54  cted by the STAT
d6c0: 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d  IC_MASTER.  ** m
d6d0: 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c  utex, not by sql
d6e0: 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79  ite3.mutex. They
d6f0: 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64   are used by cod
d700: 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20  e in notify.c.. 
d710: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
d720: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
d730: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
d740: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
d750: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
d760: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
d770: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
d780: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
d790: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
d7a0: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
d7b0: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
d7c0: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
d7d0: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
d7e0: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
d7f0: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
d800: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
d810: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
d820: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
d830: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
d840: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
d850: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
d860: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
d870: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
d880: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
d890: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
d8a0: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
d8b0: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
d8c0: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
d8d0: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
d8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d8f0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
d900: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
d910: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
d920: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
d930: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
d940: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
d950: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
d960: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
d970: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
d980: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
d990: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
d9a0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  /.#endif.#ifdef 
d9b0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
d9c0: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c  ENTICATION.  sql
d9d0: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75  ite3_userauth au
d9e0: 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73  th;        /* Us
d9f0: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
da00: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  n information */
da10: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
da20: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73  * A macro to dis
da30: 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69  cover the encodi
da40: 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ng of a database
da50: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
da60: 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62  EMA_ENC(db) ((db
da70: 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d  )->aDb[0].pSchem
da80: 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20  a->enc).#define 
da90: 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28  ENC(db)        (
daa0: 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a  (db)->enc)../*.*
dab0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
dac0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
dad0: 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56  3.flags..**.** V
dae0: 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
daf0: 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
db00: 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
db10: 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79    SQLITE_FullFSy
db20: 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f  nc     == PAGER_
db30: 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20  FULLFSYNC.**    
db40: 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c    SQLITE_CkptFul
db50: 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f  lFSync == PAGER_
db60: 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a  CKPT_FULLFSYNC.*
db70: 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61  *      SQLITE_Ca
db80: 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50  cheSpill    == P
db90: 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c  AGER_CACHE_SPILL
dba0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
dbb0: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20  TE_WriteSchema  
dbc0: 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a    0x00000001  /*
dbd0: 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51   OK to update SQ
dbe0: 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23  LITE_MASTER */.#
dbf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
dc00: 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30  gacyFileFmt  0x0
dc10: 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61  0000002  /* Crea
dc20: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  te new databases
dc30: 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a   in format 1 */.
dc40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
dc50: 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78  ullColNames   0x
dc60: 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f  00000004  /* Sho
dc70: 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61  w full column na
dc80: 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f  mes on SELECT */
dc90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dca0: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
dcb0: 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73  x00000008  /* Us
dcc0: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
dcd0: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
dce0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
dcf0: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
dd00: 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20  0000010  /* Use 
dd10: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
dd20: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
dd30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68  fine SQLITE_Cach
dd40: 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30  eSpill     0x000
dd50: 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00020  /* OK to 
dd60: 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68  spill pager cach
dd70: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
dd80: 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65  ITE_ShortColName
dd90: 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f  s  0x00000040  /
dda0: 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c  * Show short col
ddb0: 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  umns names */.#d
ddc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
ddd0: 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30  ntRows      0x00
dde0: 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74  000080  /* Count
ddf0: 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79   rows changed by
de00: 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20   INSERT, */.    
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54        /*   DELET
de40: 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64  E, or UPDATE and
de50: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20   return */.     
de60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f       /*   the co
de90: 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c  unt using a call
dea0: 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  back. */.#define
deb0: 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c   SQLITE_NullCall
dec0: 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30  back   0x0000010
ded0: 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  0  /* Invoke the
dee0: 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69   callback once i
def0: 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20  f the */.       
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df20: 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73     /*   result s
df30: 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23  et is empty */.#
df40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67  define SQLITE_Ig
df50: 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30  noreChecks   0x0
df60: 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e  0000200  /* Do n
df70: 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b  ot enforce check
df80: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
df90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
dfa0: 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78  eadUncommit   0x
dfb0: 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41  00000400  /* REA
dfc0: 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e  D UNCOMMITTED in
dfd0: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f   shared-cache */
dfe0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dff0: 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30  NoCkptOnClose  0
e000: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f  x00000800  /* No
e010: 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63   checkpoint on c
e020: 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f  lose()/DETACH */
e030: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e040: 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30  ReverseOrder   0
e050: 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65  x00001000  /* Re
e060: 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20  verse unordered 
e070: 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69  SELECTs */.#defi
e080: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69  ne SQLITE_RecTri
e090: 67 67 65 72 73 20 20 20 20 30 78 30 30 30 30 32  ggers    0x00002
e0a0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72  000  /* Enable r
e0b0: 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
e0c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e0d0: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
e0e0: 20 20 20 30 78 30 30 30 30 34 30 30 30 20 20 2f     0x00004000  /
e0f0: 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67  * Enforce foreig
e100: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
e110: 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s  */.#define SQ
e120: 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20  LITE_AutoIndex  
e130: 20 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20      0x00008000  
e140: 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61  /* Enable automa
e150: 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  tic indexes */.#
e160: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f  define SQLITE_Lo
e170: 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30  adExtension  0x0
e180: 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0010000  /* Enab
e190: 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le load_extensio
e1a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
e1b0: 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20  ITE_LoadExtFunc 
e1c0: 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f     0x00020000  /
e1d0: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
e1e0: 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75  tension() SQL fu
e1f0: 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nc */.#define SQ
e200: 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67  LITE_EnableTrigg
e210: 65 72 20 20 30 78 30 30 30 34 30 30 30 30 20 20  er  0x00040000  
e220: 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
e230: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
e240: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66  efine SQLITE_Def
e250: 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 30  erFKs       0x00
e260: 30 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72  080000  /* Defer
e270: 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69   all FK constrai
e280: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
e290: 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20  QLITE_QueryOnly 
e2a0: 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20       0x00100000 
e2b0: 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61   /* Disable data
e2c0: 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  base changes */.
e2d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
e2e0: 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78  ellSizeCk     0x
e2f0: 30 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65  00200000  /* Che
e300: 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69  ck btree cell si
e310: 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23  zes on load */.#
e320: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74  define SQLITE_Ft
e330: 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30  s3Tokenizer  0x0
e340: 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0400000  /* Enab
e350: 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65  le fts3_tokenize
e360: 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  r(2) */.#define 
e370: 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53  SQLITE_EnableQPS
e380: 47 20 20 20 20 20 30 78 30 30 38 30 30 30 30 30  G     0x00800000
e390: 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e    /* Query Plann
e3a0: 65 72 20 53 74 61 62 69 6c 69 74 79 20 47 75 61  er Stability Gua
e3b0: 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65  rantee*/.#define
e3c0: 20 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72 45   SQLITE_TriggerE
e3d0: 51 50 20 20 20 20 20 30 78 30 31 30 30 30 30 30  QP     0x0100000
e3e0: 30 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67 67  0  /* Show trigg
e3f0: 65 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  er EXPLAIN QUERY
e400: 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65   PLAN */.#define
e410: 20 53 51 4c 49 54 45 5f 52 65 73 65 74 44 61 74   SQLITE_ResetDat
e420: 61 62 61 73 65 20 20 30 78 30 32 30 30 30 30 30  abase  0x0200000
e430: 30 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20  0  /* Reset the 
e440: 64 61 74 61 62 61 73 65 20 2a 2f 0a 23 64 65 66  database */.#def
e450: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
e460: 79 41 6c 74 65 72 20 20 20 20 30 78 30 34 30 30  yAlter    0x0400
e470: 30 30 30 30 20 20 2f 2a 20 4c 65 67 61 63 79 20  0000  /* Legacy 
e480: 41 4c 54 45 52 20 54 41 42 4c 45 20 62 65 68 61  ALTER TABLE beha
e490: 76 69 6f 75 72 20 2a 2f 0a 23 64 65 66 69 6e 65  viour */.#define
e4a0: 20 53 51 4c 49 54 45 5f 4e 6f 53 63 68 65 6d 61   SQLITE_NoSchema
e4b0: 45 72 72 6f 72 20 20 30 78 30 38 30 30 30 30 30  Error  0x0800000
e4c0: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 70  0  /* Do not rep
e4d0: 6f 72 74 20 73 63 68 65 6d 61 20 70 61 72 73 65  ort schema parse
e4e0: 20 65 72 72 6f 72 73 2a 2f 0a 23 64 65 66 69 6e   errors*/.#defin
e4f0: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 6e 73 69  e SQLITE_Defensi
e500: 76 65 20 20 20 20 20 20 30 78 31 30 30 30 30 30  ve      0x100000
e510: 30 30 20 20 2f 2a 20 49 6e 70 75 74 20 53 51 4c  00  /* Input SQL
e520: 20 69 73 20 6c 69 6b 65 6c 79 20 68 6f 73 74 69   is likely hosti
e530: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  le */.#define SQ
e540: 4c 49 54 45 5f 44 71 73 44 44 4c 20 20 20 20 20  LITE_DqsDDL     
e550: 20 20 20 20 30 78 32 30 30 30 30 30 30 30 20 20      0x20000000  
e560: 2f 2a 20 64 62 6c 2d 71 75 6f 74 65 64 20 73 74  /* dbl-quoted st
e570: 72 69 6e 67 73 20 61 6c 6c 6f 77 65 64 20 69 6e  rings allowed in
e580: 20 44 44 4c 2a 2f 0a 23 64 65 66 69 6e 65 20 53   DDL*/.#define S
e590: 51 4c 49 54 45 5f 44 71 73 44 4d 4c 20 20 20 20  QLITE_DqsDML    
e5a0: 20 20 20 20 20 30 78 34 30 30 30 30 30 30 30 20       0x40000000 
e5b0: 20 2f 2a 20 64 62 6c 2d 71 75 6f 74 65 64 20 73   /* dbl-quoted s
e5c0: 74 72 69 6e 67 73 20 61 6c 6c 6f 77 65 64 20 69  trings allowed i
e5d0: 6e 20 44 4d 4c 2a 2f 0a 0a 2f 2a 20 46 6c 61 67  n DML*/../* Flag
e5e0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64  s used only if d
e5f0: 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 64 65 66  ebugging */.#def
e600: 69 6e 65 20 48 49 28 58 29 20 20 28 28 75 36 34  ine HI(X)  ((u64
e610: 29 28 58 29 3c 3c 33 32 29 0a 23 69 66 64 65 66  )(X)<<32).#ifdef
e620: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64   SQLITE_DEBUG.#d
e630: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
e640: 54 72 61 63 65 20 20 20 20 20 20 20 48 49 28 30  Trace       HI(0
e650: 78 30 30 30 31 29 20 20 2f 2a 20 44 65 62 75 67  x0001)  /* Debug
e660: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
e670: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
e680: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
e690: 4c 69 73 74 69 6e 67 20 20 20 20 48 49 28 30 78  Listing    HI(0x
e6a0: 30 30 30 32 29 20 20 2f 2a 20 44 65 62 75 67 20  0002)  /* Debug 
e6b0: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
e6c0: 20 70 72 6f 67 73 20 2a 2f 0a 23 64 65 66 69 6e   progs */.#defin
e6d0: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
e6e0: 63 65 20 20 20 20 20 20 48 49 28 30 78 30 30 30  ce      HI(0x000
e6f0: 34 29 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  4)  /* True to t
e700: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
e710: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
e720: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
e730: 72 61 63 65 20 48 49 28 30 78 30 30 30 38 29 20  race HI(0x0008) 
e740: 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65   /* Trace sqlite
e750: 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c  3VdbeAddOp() cal
e760: 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ls */.#define SQ
e770: 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20  LITE_VdbeEQP    
e780: 20 20 20 20 48 49 28 30 78 30 30 31 30 29 20 20      HI(0x0010)  
e790: 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e  /* Debug EXPLAIN
e7a0: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23   QUERY PLAN */.#
e7b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 61  define SQLITE_Pa
e7c0: 72 73 65 72 54 72 61 63 65 20 20 20 20 48 49 28  rserTrace    HI(
e7d0: 30 78 30 30 32 30 29 20 20 2f 2a 20 50 52 41 47  0x0020)  /* PRAG
e7e0: 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d  MA parser_trace=
e7f0: 4f 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ON */.#endif../*
e800: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
e810: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d  es for sqlite3.m
e820: 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  DbFlags.*/.#defi
e830: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e840: 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20  Change   0x0001 
e850: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
e860: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
e870: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
e880: 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74  FLAG_PreferBuilt
e890: 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50  in  0x0002  /* P
e8a0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
e8b0: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
e8c0: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61  define DBFLAG_Va
e8d0: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
e8e0: 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  004  /* Currentl
e8f0: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
e900: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
e910: 56 61 63 75 75 6d 49 6e 74 6f 20 20 20 20 20 30  VacuumInto     0
e920: 78 30 30 30 38 20 20 2f 2a 20 43 75 72 72 65 6e  x0008  /* Curren
e930: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 56 41 43 55  tly running VACU
e940: 55 4d 20 49 4e 54 4f 20 2a 2f 0a 23 64 65 66 69  UM INTO */.#defi
e950: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e960: 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 31 30 20  KnownOk  0x0010 
e970: 20 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e   /* Schema is kn
e980: 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20  own to be valid 
e990: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  */../*.** Bits o
e9a0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
e9b0: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
e9c0: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
e9d0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
e9e0: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
e9f0: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
ea00: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
ea10: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
ea20: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
ea30: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
ea40: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
ea50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
ea60: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
ea70: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
ea80: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
ea90: 6e 65 20 53 51 4c 49 54 45 5f 57 69 6e 64 6f 77  ne SQLITE_Window
eaa0: 46 75 6e 63 20 20 20 20 20 30 78 30 30 30 32 20  Func     0x0002 
eab0: 20 20 2f 2a 20 55 73 65 20 78 49 6e 76 65 72 73    /* Use xInvers
eac0: 65 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e  e for window fun
ead0: 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
eae0: 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79  e SQLITE_GroupBy
eaf0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20  Order   0x0004  
eb00: 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65   /* GROUPBY cove
eb10: 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a  r of ORDERBY */.
eb20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
eb30: 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78  actorOutConst 0x
eb40: 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61  0008   /* Consta
eb50: 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a  nt factoring */.
eb60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
eb70: 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78  istinctOpt    0x
eb80: 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e  0010   /* DISTIN
eb90: 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73  CT using indexes
eba0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ebb0: 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20  TE_CoverIdxScan 
ebc0: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f    0x0020   /* Co
ebd0: 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61  vering index sca
ebe0: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ebf0: 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a  LITE_OrderByIdxJ
ec00: 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20  oin 0x0040   /* 
ec10: 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e  ORDER BY of join
ec20: 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23  s via index */.#
ec30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
ec40: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
ec50: 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  080   /* Transit
ec60: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
ec70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ec80: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
ec90: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0100   /* Omi
eca0: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
ecb0: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
ecc0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
ecd0: 4f 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30  OfView    0x0200
ece0: 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d     /* The count-
ecf0: 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61  of-view optimiza
ed00: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ed10: 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e  SQLITE_CursorHin
ed20: 74 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f  ts    0x0400   /
ed30: 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48  * Add OP_CursorH
ed40: 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23  int opcodes */.#
ed50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
ed60: 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30  at34         0x0
ed70: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
ed80: 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61  T3 or STAT4 data
ed90: 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65 78   */.   /* TH3 ex
eda0: 70 65 63 74 73 20 74 68 65 20 53 74 61 74 33 34  pects the Stat34
edb0: 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74    ^^^^^^ value t
edc0: 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20 44 6f  o be 0x0800.  Do
edd0: 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a 2f  n't change it */
ede0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
edf0: 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20 20 30  PushDown       0
ee00: 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65 20 70  x1000   /* The p
ee10: 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a  ush-down optimiz
ee20: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
ee30: 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79   SQLITE_Simplify
ee40: 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20 20 20  Join   0x2000   
ee50: 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46 54 20  /* Convert LEFT 
ee60: 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a  JOIN to JOIN */.
ee70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ee80: 6b 69 70 53 63 61 6e 20 20 20 20 20 20 20 30 78  kipScan       0x
ee90: 34 30 30 30 20 20 20 2f 2a 20 53 6b 69 70 2d 73  4000   /* Skip-s
eea0: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
eeb0: 53 51 4c 49 54 45 5f 50 72 6f 70 61 67 61 74 65  SQLITE_Propagate
eec0: 43 6f 6e 73 74 20 30 78 38 30 30 30 20 20 20 2f  Const 0x8000   /
eed0: 2a 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 70  * The constant p
eee0: 72 6f 70 61 67 61 74 69 6f 6e 20 6f 70 74 20 2a  ropagation opt *
eef0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ef00: 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20  _AllOpts        
ef10: 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20  0xffff   /* All 
ef20: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
ef30: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66  ../*.** Macros f
ef40: 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68  or testing wheth
ef50: 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69  er or not optimi
ef60: 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62  zations are enab
ef70: 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e  led or disabled.
ef80: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  .*/.#define Opti
ef90: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
efa0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64  (db, mask)  (((d
efb0: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
efc0: 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69  mask))!=0).#defi
efd0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
efe0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
eff0: 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74     (((db)->dbOpt
f000: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30  Flags&(mask))==0
f010: 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  )../*.** Return 
f020: 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f  true if it OK to
f030: 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74   factor constant
f040: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74   expressions int
f050: 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  o the initializa
f060: 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68  tion.** code. Th
f070: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
f080: 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72  Parse object for
f090: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
f0a0: 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  tor..*/.#define 
f0b0: 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29  ConstFactorOk(P)
f0c0: 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61   ((P)->okConstFa
f0d0: 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  ctor)../*.** Pos
f0e0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
f0f0: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
f100: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
f110: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
f120: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
f130: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
f140: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
f150: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
f160: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
f170: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
f180: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
f190: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
f1a0: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
f1b0: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
f1c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
f1d0: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
f1e0: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
f1f0: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
f200: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f210: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
f220: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
f230: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
f240: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
f250: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f260: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
f270: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
f280: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
f290: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
f2a0: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
f2b0: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
f2c0: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
f2d0: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
f2e0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
f2f0: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
f300: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
f310: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
f320: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
f330: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
f340: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
f350: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
f360: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
f370: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
f380: 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62  cture.  For glob
f390: 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  al built-in func
f3a0: 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74  tions (ex: subst
f3b0: 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e  r(), max(), coun
f3c0: 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  t()).** a pointe
f3d0: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
f3e0: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
f3f0: 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  he sqlite3Builti
f400: 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63  nFunctions objec
f410: 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f  t..** For per-co
f420: 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61  nnection applica
f430: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e  tion-defined fun
f440: 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65  ctions, a pointe
f450: 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72  r to this.** str
f460: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
f470: 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20  n the db->aHash 
f480: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  hash table..**.*
f490: 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20 66 69  * The u.pHash fi
f4a0: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 74  eld is used by t
f4b0: 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  he global built-
f4c0: 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73  ins.  The u.pDes
f4d0: 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64  tructor.** field
f4e0: 20 69 73 20 75 73 65 64 20 62 79 20 70 65 72 2d   is used by per-
f4f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64  connection app-d
f500: 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f  ef functions..*/
f510: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20  .struct FuncDef 
f520: 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20  {.  i8 nArg;    
f530: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f540: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
f550: 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d    -1 means unlim
f560: 69 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 66 75  ited */.  u32 fu
f570: 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  ncFlags;       /
f580: 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69  * Some combinati
f590: 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e  on of SQLITE_FUN
f5a0: 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  C_* */.  void *p
f5b0: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a  UserData;     /*
f5c0: 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d   User data param
f5d0: 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65  eter */.  FuncDe
f5e0: 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  f *pNext;      /
f5f0: 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20  * Next function 
f600: 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a  with same name *
f610: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e  /.  void (*xSFun
f620: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
f630: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
f640: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e  value**); /* fun
f650: 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f  c or agg-step */
f660: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
f670: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
f680: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
f690: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20           /* Agg 
f6a0: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76  finalizer */.  v
f6b0: 6f 69 64 20 28 2a 78 56 61 6c 75 65 29 28 73 71  oid (*xValue)(sq
f6c0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6e0: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
f6f0: 61 67 67 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76  agg value */.  v
f700: 6f 69 64 20 28 2a 78 49 6e 76 65 72 73 65 29 28  oid (*xInverse)(
f710: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f720: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
f730: 75 65 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73  ue**); /* invers
f740: 65 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  e agg-step */.  
f750: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
f760: 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65  e;   /* SQL name
f770: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
f780: 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  . */.  union {. 
f790: 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73     FuncDef *pHas
f7a0: 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  h;      /* Next 
f7b0: 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74  with a different
f7c0: 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61   name but the sa
f7d0: 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46  me hash */.    F
f7e0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
f7f0: 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a  Destructor;   /*
f800: 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   Reference count
f810: 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  ed destructor fu
f820: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b  nction */.  } u;
f830: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
f840: 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73  structure encaps
f850: 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75  ulates a user-fu
f860: 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f  nction destructo
f870: 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a  r callback (as.*
f880: 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69  * configured usi
f890: 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  ng create_functi
f8a0: 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72  on_v2()) and a r
f8b0: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72  eference counter
f8c0: 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65  . When.** create
f8d0: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69  _function_v2() i
f8e0: 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61  s called to crea
f8f0: 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69  te a function wi
f900: 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c  th a destructor,
f910: 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a  .** a single obj
f920: 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
f930: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46   is allocated. F
f940: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52  uncDestructor.nR
f950: 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  ef is set to.** 
f960: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75  the number of Fu
f970: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72  ncDef objects cr
f980: 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20  eated (either 1 
f990: 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20  or 3, depending 
f9a0: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72  on whether.** or
f9b0: 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69   not the specifi
f9c0: 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53  ed encoding is S
f9d0: 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20  QLITE_ANY). The 
f9e0: 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63  FuncDef.pDestruc
f9f0: 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66  tor.** member of
fa00: 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77   each of the new
fa10: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
fa20: 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   is set to point
fa30: 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65   to the allocate
fa40: 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63  d.** FuncDestruc
fa50: 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  tor..**.** There
fa60: 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20  after, when one 
fa70: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f  of the FuncDef o
fa80: 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65  bjects is delete
fa90: 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  d, the reference
faa0: 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69  .** count on thi
fab0: 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72  s object is decr
fac0: 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74  emented. When it
fad0: 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20   reaches 0, the 
fae0: 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73  destructor.** is
faf0: 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65   invoked and the
fb00: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
fb10: 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e  structure freed.
fb20: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
fb30: 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e  estructor {.  in
fb40: 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28  t nRef;.  void (
fb50: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
fb60: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  *);.  void *pUse
fb70: 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rData;.};../*.**
fb80: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
fb90: 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61   for FuncDef.fla
fba0: 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  gs.  Note that t
fbb0: 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f  he _LENGTH and _
fbc0: 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73  TYPEOF.** values
fbd0: 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   must correspond
fbe0: 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   to OPFLAG_LENGT
fbf0: 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
fc00: 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a  TYPEOFARG.  And.
fc10: 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ** SQLITE_FUNC_C
fc20: 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20  ONSTANT must be 
fc30: 74 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49  the same as SQLI
fc40: 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43  TE_DETERMINISTIC
fc50: 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
fc60: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
fc70: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20  nts in the code 
fc80: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a  to verify this..
fc90: 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
fca0: 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
fcb0: 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
fcc0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fcd0: 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d  UNC_MINMAX    ==
fce0: 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20    NC_MinMaxAgg  
fcf0: 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78      == SF_MinMax
fd00: 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  Agg.**     SQLIT
fd10: 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20  E_FUNC_LENGTH   
fd20: 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   ==  OPFLAG_LENG
fd30: 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c  THARG.**     SQL
fd40: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
fd50: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59     ==  OPFLAG_TY
fd60: 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53  PEOFARG.**     S
fd70: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
fd80: 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f  ANT  ==  SQLITE_
fd90: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72  DETERMINISTIC fr
fda0: 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20  om the API.**   
fdb0: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e    SQLITE_FUNC_EN
fdc0: 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20  CMASK   depends 
fdd0: 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d  on SQLITE_UTF* m
fde0: 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49  acros in the API
fdf0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
fe00: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
fe10: 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54   0x0003 /* SQLIT
fe20: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55  E_UTF8, SQLITE_U
fe30: 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c  TF16BE or UTF16L
fe40: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
fe50: 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20  ITE_FUNC_LIKE   
fe60: 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64    0x0004 /* Cand
fe70: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
fe80: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
fe90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fea0: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
feb0: 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73  0x0008 /* Case-s
fec0: 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79  ensitive LIKE-ty
fed0: 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  pe function */.#
fee0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
fef0: 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30  NC_EPHEM    0x00
ff00: 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e  10 /* Ephemeral.
ff10: 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44    Delete with VD
ff20: 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BE */.#define SQ
ff30: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ff40: 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c  LL 0x0020 /* sql
ff50: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
ff60: 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61  eq() might be ca
ff70: 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lled*/.#define S
ff80: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
ff90: 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75  H   0x0040 /* Bu
ffa0: 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20  ilt-in length() 
ffb0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
ffc0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ffd0: 54 59 50 45 4f 46 20 20 20 30 78 30 30 38 30 20  TYPEOF   0x0080 
ffe0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
fff0: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
10000 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10010 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78  FUNC_COUNT    0x
10020 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0100 /* Built-in
10030 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67   count(*) aggreg
10040 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ate */.#define S
10050 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45  QLITE_FUNC_COALE
10060 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75  SCE 0x0200 /* Bu
10070 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
10080 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f  ) or ifnull() */
10090 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
100a0 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78  FUNC_UNLIKELY 0x
100b0 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0400 /* Built-in
100c0 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63   unlikely() func
100d0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
100e0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
100f0 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43  TANT 0x0800 /* C
10100 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67  onstant inputs g
10110 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f  ive a constant o
10120 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65  utput */.#define
10130 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
10140 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20  MAX   0x1000 /* 
10150 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61  True for min() a
10160 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67 61  nd max() aggrega
10170 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
10180 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10190 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53  NG  0x2000 /* "S
101a0 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c  low Change". Val
101b0 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69  ue constant duri
101c0 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20 20 20  ng a.           
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67           ** sing
101f0 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74  le query - might
10200 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d   change over tim
10210 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
10220 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54  ITE_FUNC_AFFINIT
10230 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c  Y 0x4000 /* Buil
10240 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20  t-in affinity() 
10250 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
10260 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10270 4f 46 46 53 45 54 20 20 20 30 78 38 30 30 30 20  OFFSET   0x8000 
10280 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69  /* Built-in sqli
10290 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63  te_offset() func
102a0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
102b0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44  SQLITE_FUNC_WIND
102c0 4f 57 20 20 20 30 78 30 30 30 31 30 30 30 30 20  OW   0x00010000 
102d0 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 77 69 6e 64  /* Built-in wind
102e0 6f 77 2d 6f 6e 6c 79 20 66 75 6e 63 74 69 6f 6e  ow-only function
102f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
10300 54 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c  TE_FUNC_INTERNAL
10310 20 30 78 30 30 30 34 30 30 30 30 20 2f 2a 20 46   0x00040000 /* F
10320 6f 72 20 75 73 65 20 62 79 20 4e 65 73 74 65 64  or use by Nested
10330 50 61 72 73 65 28 29 20 6f 6e 6c 79 20 2a 2f 0a  Parse() only */.
10340 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
10350 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f  wing three macro
10360 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c  s, FUNCTION(), L
10370 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47  IKEFUNC() and AG
10380 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a  GREGATE() are.**
10390 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
103a0 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73  the initializers
103b0 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66   for the FuncDef
103c0 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a   structures..**.
103d0 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  **   FUNCTION(zN
103e0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
103f0 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
10400 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
10410 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
10420 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
10430 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
10440 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65  ame.**     imple
10450 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63  mented by C func
10460 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20  tion xFunc that 
10470 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
10480 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20  uments. The.**  
10490 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20     value passed 
104a0 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20  as iArg is cast 
104b0 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64  to a (void*) and
104c0 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a   made available.
104d0 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73  **     as the us
104e0 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
104f0 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f  _user_data()) fo
10500 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  r the function. 
10510 49 66 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65  If.**     argume
10520 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20  nt bNC is true, 
10530 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  then the SQLITE_
10540 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c  FUNC_NEEDCOLL fl
10550 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  ag is set..**.**
10560 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     VFUNCTION(zNa
10570 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10580 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
10590 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
105a0 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
105b0 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
105c0 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a  _CONSTANT flag..
105d0 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f  **.**   DFUNCTIO
105e0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
105f0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10600 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
10610 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
10620 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
10630 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
10640 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61  lag and.**     a
10650 64 64 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  dds the SQLITE_F
10660 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67  UNC_SLOCHNG flag
10670 2e 20 20 55 73 65 64 20 66 6f 72 20 64 61 74 65  .  Used for date
10680 20 26 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e   & time function
10690 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e  s.**     and fun
106a0 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69  ctions like sqli
106b0 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61  te_version() tha
106c0 74 20 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75  t can change, bu
106d0 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20  t not during.** 
106e0 20 20 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65      a single que
106f0 72 79 2e 20 20 54 68 65 20 69 41 72 67 20 69 73  ry.  The iArg is
10700 20 69 67 6e 6f 72 65 64 2e 20 20 54 68 65 20 75   ignored.  The u
10710 73 65 72 2d 64 61 74 61 20 69 73 20 61 6c 77 61  ser-data is alwa
10720 79 73 20 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f  ys set.**     to
10730 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e   a NULL pointer.
10740 20 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65    The bNC parame
10750 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  ter is not used.
10760 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41  .**.**   PURE_DA
10770 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
10780 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10790 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 66 6f  ).**     Used fo
107a0 72 20 22 70 75 72 65 22 20 64 61 74 65 2f 74 69  r "pure" date/ti
107b0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68  me functions, th
107c0 69 73 20 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65  is macro is like
107d0 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20   DFUNCTION.**   
107e0 20 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74    except that it
107f0 20 64 6f 65 73 20 73 65 74 20 74 68 65 20 53 51   does set the SQ
10800 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
10810 4e 54 20 66 6c 61 67 73 2e 20 20 69 41 72 67 20  NT flags.  iArg 
10820 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65  is.**     ignore
10830 64 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 64  d and the user-d
10840 61 74 61 20 66 6f 72 20 74 68 65 73 65 20 66 75  ata for these fu
10850 6e 63 74 69 6f 6e 73 20 69 73 20 73 65 74 20 74  nctions is set t
10860 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62  o an .**     arb
10870 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20  itrary non-NULL 
10880 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e  pointer.  The bN
10890 43 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  C parameter is n
108a0 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20  ot used..**.**  
108b0 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
108c0 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
108d0 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  C, xStep, xFinal
108e0 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
108f0 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65   create an aggre
10900 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  gate function de
10910 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  finition impleme
10920 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74  nted by.**     t
10930 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78  he C functions x
10940 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e  Step and xFinal.
10950 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20   The first four 
10960 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20  parameters.**   
10970 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65    are interprete
10980 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
10990 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34  y as the first 4
109a0 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a   parameters to.*
109b0 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29  *     FUNCTION()
109c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54  ..**.**   WFUNCT
109d0 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
109e0 20 69 41 72 67 2c 20 78 53 74 65 70 2c 20 78 46   iArg, xStep, xF
109f0 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49  inal, xValue, xI
10a00 6e 76 65 72 73 65 29 0a 2a 2a 20 20 20 20 20 55  nverse).**     U
10a10 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
10a20 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10a30 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
10a40 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
10a50 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
10a60 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
10a70 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
10a80 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
10a90 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
10aa0 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
10ab0 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
10ac0 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
10ad0 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
10ae0 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
10af0 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
10b00 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
10b10 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
10b20 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
10b30 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
10b40 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
10b50 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
10b60 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
10b70 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  rg arguments and
10b80 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
10b90 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a  by a call to C.*
10ba0 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
10bb0 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
10bc0 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
10bd0 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
10be0 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
10bf0 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
10c00 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
10c10 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
10c20 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
10c30 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
10c40 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
10c50 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
10c60 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
10c70 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
10c80 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
10c90 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10ca0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10cb0 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10cc0 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
10cd0 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
10ce0 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10cf0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10d00 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10d10 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
10d20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
10d30 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10d40 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28  efine VFUNCTION(
10d50 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10d60 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
10d70 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10d80 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
10d90 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
10da0 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
10db0 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
10dc0 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
10dd0 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10de0 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49  .#define DFUNCTI
10df0 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10e00 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10e10 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10e20 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
10e30 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a  |SQLITE_UTF8, \.
10e40 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20     0, 0, xFunc, 
10e50 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10e60 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50   {0} }.#define P
10e70 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20  URE_DATE(zName, 
10e80 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10e90 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
10ea0 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
10eb0 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
10ec0 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  F8|SQLITE_FUNC_C
10ed0 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76  ONSTANT, \.   (v
10ee0 6f 69 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e  oid*)&sqlite3Con
10ef0 66 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  fig, 0, xFunc, 0
10f00 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10f10 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55  {0} }.#define FU
10f20 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e  NCTION2(zName, n
10f30 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10f40 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67  xFunc, extraFlag
10f50 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c  s) \.  {nArg,SQL
10f60 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10f70 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
10f80 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
10f90 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
10fa0 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f  ags,\.   SQLITE_
10fb0 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10fc0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10fd0 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10fe0 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46   }.#define STR_F
10ff0 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
11000 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20  Arg, pArg, bNC, 
11010 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
11020 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
11030 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
11040 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
11050 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
11060 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e     pArg, 0, xFun
11070 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
11080 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49  me, }.#define LI
11090 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
110a0 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20  rg, arg, flags) 
110b0 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
110c0 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
110d0 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67  SQLITE_UTF8|flag
110e0 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29  s, \.   (void *)
110f0 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
11100 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
11110 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
11120 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
11130 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
11140 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
11150 78 56 61 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72  xValue) \.  {nAr
11160 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
11170 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
11180 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
11190 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
111a0 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
111b0 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c  xFinal,xValue,0,
111c0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65  #zName, {0}}.#de
111d0 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28  fine AGGREGATE2(
111e0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
111f0 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
11200 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29  nal, extraFlags)
11210 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
11220 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
11230 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
11240 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a  )|extraFlags, \.
11250 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
11260 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53  _PTR(arg), 0, xS
11270 74 65 70 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61  tep,xFinal,xFina
11280 6c 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  l,0,#zName, {0}}
11290 0a 23 64 65 66 69 6e 65 20 57 41 47 47 52 45 47  .#define WAGGREG
112a0 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
112b0 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
112c0 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c   xFinal, xValue,
112d0 20 78 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a   xInverse, f) \.
112e0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
112f0 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
11300 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66  FUNC_NEEDCOLL)|f
11310 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
11320 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
11330 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78  , xStep,xFinal,x
11340 56 61 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23  Value,xInverse,#
11350 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66  zName, {0}}.#def
11360 69 6e 65 20 49 4e 54 45 52 4e 41 4c 5f 46 55 4e  ine INTERNAL_FUN
11370 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
11380 67 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  g, xFunc) \.  {n
11390 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
113a0 5f 49 4e 54 45 52 4e 41 4c 7c 53 51 4c 49 54 45  _INTERNAL|SQLITE
113b0 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e  _UTF8|SQLITE_FUN
113c0 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20  C_CONSTANT, \.  
113d0 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c   0, 0, xFunc, 0,
113e0 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b   0, 0, #zName, {
113f0 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  0} }.../*.** All
11400 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
11410 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
11420 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
11430 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
11440 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
11450 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
11460 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
11470 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
11480 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
11490 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
114a0 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
114b0 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
114c0 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
114d0 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
114e0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
114f0 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
11500 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11520 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
11530 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
11540 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
11550 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11570 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
11580 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
11590 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
115a0 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
115b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
115c0 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
115d0 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
115e0 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11600 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
11610 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
11620 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
11630 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
11640 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
11650 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
11660 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
11670 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
11680 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
11690 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
116a0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
116b0 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
116c0 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
116d0 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
116e0 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
116f0 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
11700 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
11710 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
11720 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
11730 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
11740 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
11750 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
11760 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
11770 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
11780 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
11790 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
117a0 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
117b0 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
117c0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
117d0 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
117e0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
117f0 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
11800 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11820 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
11830 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
11840 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
11850 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11870 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
11880 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
11890 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
118a0 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
118b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
118c0 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
118d0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c  nction */.  Tabl
118e0 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20  e *pEpoTab;     
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11900 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61   /* Eponymous ta
11910 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64  ble for this mod
11920 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ule */.};../*.**
11930 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
11940 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
11950 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
11960 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
11970 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
11980 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
11990 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
119a0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
119b0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
119c0 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20  s column, \000, 
119d0 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f  then the type */
119e0 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
119f0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
11a00 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
11a10 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
11a20 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
11a30 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
11a40 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
11a50 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
11a60 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
11a70 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
11a80 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
11a90 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
11aa0 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
11ab0 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
11ac0 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
11ad0 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
11ae0 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
11af0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
11b00 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e  size of value in
11b10 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69   this column. si
11b20 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a  zeof(INT)==1 */.
11b30 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
11b40 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
11b50 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
11b60 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
11b70 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
11b80 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
11b90 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
11ba0 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
11bb0 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
11bc0 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
11bd0 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
11be0 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
11bf0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11c00 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
11c10 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
11c20 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
11c30 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
11c40 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41  efine COLFLAG_HA
11c50 53 54 59 50 45 20 20 30 78 30 30 30 34 20 20 20  STYPE  0x0004   
11c60 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f   /* Type name fo
11c70 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  llows column nam
11c80 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  e */.#define COL
11c90 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 30 78  FLAG_UNIQUE   0x
11ca0 30 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0008    /* Colum
11cb0 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20 22  n def contains "
11cc0 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22 20  UNIQUE" or "PK" 
11cd0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11ce0 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78 30  AG_SORTERREF 0x0
11cf0 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f 72  010   /* Use sor
11d00 74 65 72 2d 72 65 66 73 20 77 69 74 68 20 74 68  ter-refs with th
11d10 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a  is column */../*
11d20 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
11d30 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
11d40 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
11d50 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11d60 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
11d70 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
11d80 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
11d90 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
11da0 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
11db0 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
11dc0 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
11dd0 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
11de0 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
11df0 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
11e00 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
11e10 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
11e20 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
11e30 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
11e40 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
11e50 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
11e60 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
11e70 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
11e80 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
11e90 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
11ea0 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
11eb0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11ec0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
11ed0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11ee0 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
11ef0 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11f10 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
11f20 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
11f30 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
11f40 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
11f50 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
11f60 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
11f70 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
11f80 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
11f90 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
11fa0 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
11fb0 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
11fc0 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
11fd0 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
11fe0 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
11ff0 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
12000 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
12010 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
12020 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
12030 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
12040 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
12050 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
12060 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
12070 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
12080 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
12090 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44  ITE_SO_UNDEFINED
120a0 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f   -1 /* No sort o
120b0 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a  rder specified *
120c0 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
120d0 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
120e0 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
120f0 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
12100 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
12110 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
12120 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
12130 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
12140 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
12150 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
12160 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
12170 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
12180 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
12190 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
121a0 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a   consecutively..
121b0 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
121c0 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
121d0 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
121e0 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
121f0 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
12200 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
12210 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
12220 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
12230 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
12240 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
12250 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
12260 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
12270 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
12280 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
12290 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
122a0 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
122b0 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
122c0 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
122d0 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
122e0 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
122f0 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
12300 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
12310 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
12320 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
12330 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
12340 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
12350 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
12360 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
12370 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
12380 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
12390 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
123a0 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
123b0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
123c0 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
123d0 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
123e0 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
123f0 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
12400 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
12410 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
12420 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
12430 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
12440 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lue..*/.#define 
12450 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
12460 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20      0x47../*.** 
12470 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
12480 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
12490 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
124a0 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
124b0 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
124c0 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20  affinity..**.** 
124d0 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  The SQLITE_NOTNU
124e0 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d  LL flag is a com
124f0 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c  bination of NULL
12500 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c  EQ and JUMPIFNUL
12510 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20  L..** It causes 
12520 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66  an assert() to f
12530 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70  ire if either op
12540 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61  erand to a compa
12550 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f  rison.** operato
12560 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69  r is NULL.  It i
12570 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61  s added to certa
12580 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  in comparison op
12590 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72  erators to.** pr
125a0 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65  ove that the ope
125b0 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73  rands are always
125c0 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64   NOT NULL..*/.#d
125d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45  efine SQLITE_KEE
125e0 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20  PNULL     0x08  
125f0 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f  /* Used by vecto
12600 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64  r == or <> */.#d
12610 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
12620 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20  PIFNULL   0x10  
12630 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
12640 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
12650 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
12660 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
12670 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65    0x20  /* Store
12680 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
12690 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
126a0 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
126b0 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
126c0 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
126d0 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  =NULL */.#define
126e0 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
126f0 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73       0x90  /* As
12700 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e  sert that operan
12710 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c  ds are never NUL
12720 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  L */../*.** An o
12730 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
12740 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  pe is created fo
12750 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74  r each virtual t
12760 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a  able present in.
12770 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
12780 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  schema..**.** If
12790 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
127a0 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
127b0 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
127c0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
127d0 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
127e0 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
127f0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
12800 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
12810 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
12820 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
12830 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
12840 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12850 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
12860 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
12870 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
12880 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
12890 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
128a0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
128b0 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
128c0 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
128d0 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
128e0 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
128f0 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  ween.** database
12900 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
12910 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
12920 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
12930 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63  y database.** sc
12940 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
12950 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
12960 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
12970 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
12980 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
12990 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
129a0 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
129b0 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
129c0 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
129d0 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
129e0 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
129f0 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
12a00 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
12a10 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
12a20 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
12a30 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
12a40 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
12a50 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77  real tables.** w
12a60 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
12a70 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
12a80 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
12a90 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a  of the callers.*
12aa0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
12ab0 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
12ac0 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
12ad0 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
12ae0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
12af0 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
12b00 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
12b10 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
12b20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
12b30 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
12b40 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
12b50 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
12b60 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
12b70 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
12b80 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
12b90 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
12ba0 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
12bb0 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
12bc0 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
12bd0 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
12be0 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
12bf0 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
12c00 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
12c10 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
12c20 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
12c30 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
12c40 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
12c50 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
12c60 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
12c70 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
12c80 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
12c90 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
12ca0 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
12cb0 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
12cc0 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
12cd0 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
12ce0 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
12cf0 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
12d00 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
12d10 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
12d20 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
12d30 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
12d40 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
12d50 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
12d60 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
12d70 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
12d80 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
12d90 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64  e not.** deleted
12da0 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
12db0 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
12dc0 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
12dd0 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69  ct()ed.** immedi
12de0 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
12df0 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
12e00 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
12e10 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
12e20 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
12e30 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
12e40 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
12e50 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
12e60 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
12e70 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
12e80 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
12e90 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
12ea0 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20  Disconnected.** 
12eb0 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
12ec0 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
12ed0 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
12ee0 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
12ef0 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
12f00 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
12f10 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
12f20 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
12f30 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
12f40 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
12f50 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
12f60 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
12f70 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
12f80 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
12f90 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
12fa0 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
12fb0 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
12fc0 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
12fd0 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
12fe0 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
12ff0 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
13000 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
13010 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
13020 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
13030 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
13040 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71  located by.** sq
13050 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c  lite3DbMalloc(),
13060 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65   using the conne
13070 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f  ction handle sto
13080 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62  red in VTable.db
13090 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74   as.** the first
130a0 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
130b0 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
130c0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
130d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
130e0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
130f0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13100 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13110 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
13120 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
13130 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
13140 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
13150 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
13160 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
13170 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
13180 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
13190 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
131a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
131b0 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
131c0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
131d0 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
131e0 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
131f0 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
13200 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
13210 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
13220 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
13230 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
13240 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
13250 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
13260 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
13270 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
13280 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
13290 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
132a0 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f  ** The schema fo
132b0 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65  r each SQL table
132c0 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70   and view is rep
132d0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
132e0 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74  ry.** by an inst
132f0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
13300 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
13310 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
13320 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
13330 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
13340 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
13350 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
13360 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
13370 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
13380 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
13390 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
133a0 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
133b0 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
133c0 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
133d0 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
133e0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
133f0 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
13400 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
13410 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
13420 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
13430 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
13440 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
13450 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
13460 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13470 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
13480 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
13490 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
134a0 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
134b0 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69  lumn */.  ExprLi
134c0 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
134d0 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
134e0 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20  traints */.     
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20    /*   ... also 
13510 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e  used as column n
13520 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49  ame list in a VI
13530 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  EW */.  int tnum
13540 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13550 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  Root BTree page 
13560 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a  for this table *
13570 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b  /.  u32 nTabRef;
13580 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13590 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
135a0 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
135b0 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20    u32 tabFlags; 
135c0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
135d0 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
135e0 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
135f0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
13600 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
13610 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
13620 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31  he rowid */.  i1
13630 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
13640 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13650 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
13660 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
13670 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
13680 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
13690 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
136a0 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
136b0 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
136c0 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
136d0 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
136e0 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
136f0 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
13700 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
13710 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
13720 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
13730 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
13740 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
13750 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
13760 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f  endif.  u8 keyCo
13770 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
13780 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
13790 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
137a0 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
137b0 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
137c0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
137d0 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
137e0 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
137f0 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
13800 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
13810 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
13820 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
13830 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
13840 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
13850 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
13860 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
13870 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
13880 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
13890 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
138a0 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20  /* 0: module 1: 
138b0 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e  schema 2: vtab n
138c0 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a  ame 3...: args *
138d0 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
138e0 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
138f0 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
13900 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
13910 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
13920 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
13930 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
13940 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
13950 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
13960 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
13970 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
13980 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
13990 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
139a0 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
139b0 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
139c0 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
139d0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
139e0 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
139f0 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f  Flags..**.** TF_
13a00 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65  OOOHidden applie
13a10 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76  s to tables or v
13a20 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69  iew that have hi
13a30 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61  dden columns tha
13a40 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65  t are.** followe
13a50 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  d by non-hidden 
13a60 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c  columns.  Exampl
13a70 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54  e:  "CREATE VIRT
13a80 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e  UAL TABLE x USIN
13a90 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44  G.** vtab1(a HID
13aa0 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63  DEN, b);".  Sinc
13ab0 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68  e "b" is a non-h
13ac0 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74  idden column but
13ad0 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a   "a" is hidden,.
13ae0 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64  ** the TF_OOOHid
13af0 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f  den attribute wo
13b00 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69  uld apply in thi
13b10 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61  s case.  Such ta
13b20 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20  bles require.** 
13b30 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  special handling
13b40 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70   during INSERT p
13b50 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64  rocessing..*/.#d
13b60 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
13b70 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  y        0x0001 
13b80 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
13b90 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
13ba0 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
13bb0 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30  eral       0x000
13bc0 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
13bd0 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
13be0 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
13bf0 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20  aryKey   0x0004 
13c00 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
13c10 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
13c20 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
13c30 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30  increment   0x00
13c40 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
13c50 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
13c60 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
13c70 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53  .#define TF_HasS
13c80 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30  tat1        0x00
13c90 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67  10    /* nRowLog
13ca0 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c  Est set from sql
13cb0 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65  ite_stat1 */.#de
13cc0 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
13cd0 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20  owid    0x0020  
13ce0 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20    /* No rowid.  
13cf0 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
13d00 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  he key */.#defin
13d10 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  e TF_NoVisibleRo
13d20 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f  wid  0x0040    /
13d30 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
13d40 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
13d50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
13d60 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
13d70 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d  x0080    /* Out-
13d80 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
13d90 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69  columns */.#defi
13da0 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20  ne TF_StatsUsed 
13db0 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20        0x0100    
13dc0 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72  /* Query planner
13dd0 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63   decisions affec
13de0 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20  ted by.         
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e00 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49              ** I
13e10 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74  ndex.aiRowLogEst
13e20 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65  [] values */.#de
13e30 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75  fine TF_HasNotNu
13e40 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20  ll      0x0200  
13e50 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f    /* Contains NO
13e60 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
13e70 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ts */.#define TF
13e80 5f 53 68 61 64 6f 77 20 20 20 20 20 20 20 20 20  _Shadow         
13e90 20 30 78 30 34 30 30 20 20 20 20 2f 2a 20 54 72   0x0400    /* Tr
13ea0 75 65 20 66 6f 72 20 61 20 73 68 61 64 6f 77 20  ue for a shadow 
13eb0 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
13ec0 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
13ed0 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
13ee0 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
13ef0 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
13f00 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
13f10 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
13f20 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
13f30 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
13f40 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
13f50 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
13f60 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
13f70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
13f80 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
13f90 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
13fa0 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 58  tual(X)      ((X
13fb0 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23  )->nModuleArg).#
13fc0 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
13fd0 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
13fe0 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
13ff0 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
14000 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e  mine if a column
14010 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f   is hidden.  IsO
14020 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
14030 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f  umn().** only wo
14040 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74  rks for non-virt
14050 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69  ual tables (ordi
14060 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  nary tables and 
14070 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a  views) and is.**
14080 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e   always false un
14090 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42  less SQLITE_ENAB
140a0 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
140b0 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54  S is defined.  T
140c0 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f  he.** IsHiddenCo
140d0 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20  lumn() macro is 
140e0 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e  general purpose.
140f0 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
14100 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
14110 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20  DDEN_COLUMNS).# 
14120 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
14130 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
14140 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67    (((X)->colFlag
14150 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
14160 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  EN)!=0).#  defin
14170 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
14180 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
14190 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
141a0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
141b0 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
141c0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
141d0 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65  TUALTABLE).#  de
141e0 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
141f0 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
14200 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
14210 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
14220 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
14230 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
14240 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65  olumn(X) 0.#else
14250 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
14260 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20  denColumn(X)    
14270 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
14280 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
14290 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e  nColumn(X) 0.#en
142a0 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68  dif.../* Does th
142b0 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72  e table have a r
142c0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
142d0 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20  HasRowid(X)     
142e0 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
142f0 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  & TF_WithoutRowi
14300 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56  d)==0).#define V
14310 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28  isibleRowid(X) (
14320 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
14330 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
14340 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45  id)==0)../*.** E
14350 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
14360 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e  constraint is an
14370 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
14380 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
14390 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f  ture..**.** A fo
143a0 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73  reign key is ass
143b0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f  ociated with two
143c0 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66   tables.  The "f
143d0 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a  rom" table is.**
143e0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
143f0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46  contains the REF
14400 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74  ERENCES clause t
14410 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20  hat creates the 
14420 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20  foreign.** key. 
14430 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20   The "to" table 
14440 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  is the table tha
14450 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68  t is named in th
14460 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
14470 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72  use..** Consider
14480 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a   this example:.*
14490 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
144a0 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20  TABLE ex1(.**   
144b0 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52      a INTEGER PR
144c0 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20  IMARY KEY,.**   
144d0 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f      b INTEGER CO
144e0 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46  NSTRAINT fk1 REF
144f0 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a  ERENCES ex2(x).*
14500 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46  *     );.**.** F
14510 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22  or foreign key "
14520 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74  fk1", the from-t
14530 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e  able is "ex1" an
14540 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  d the to-table i
14550 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69  s "ex2"..** Equi
14560 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a  valent names:.**
14570 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62  .**     from-tab
14580 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c  le == child-tabl
14590 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61  e.**       to-ta
145a0 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61  ble == parent-ta
145b0 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52  ble.**.** Each R
145c0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
145d0 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e   generates an in
145e0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
145f0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
14600 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74  e.** which is at
14610 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72  tached to the fr
14620 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74  om-table.  The t
14630 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74  o-table need not
14640 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74   exist when.** t
14650 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
14660 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65   created.  The e
14670 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20  xistence of the 
14680 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  to-table is not 
14690 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  checked..**.** T
146a0 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70  he list of all p
146b0 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64  arents for child
146c0 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64   Table X is held
146d0 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a   at X.pFKey..**.
146e0 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c  ** A list of all
146f0 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20   children for a 
14700 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77  table named Z (w
14710 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65  hich might not e
14720 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73  ven exist).** is
14730 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e   held in Schema.
14740 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20  fkeyHash with a 
14750 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a  hash key of Z..*
14760 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
14770 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
14780 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
14790 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
147a0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
147b0 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
147c0 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
147d0 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77    /* Next FKey w
147e0 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ith the same in 
147f0 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65  pFrom. Next pare
14800 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20  nt of pFrom */. 
14810 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20   char *zTo;     
14820 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61     /* Name of ta
14830 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79  ble that the key
14840 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a   points to (aka:
14850 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b   Parent) */.  FK
14860 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
14870 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65  /* Next with the
14880 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20   same zTo. Next 
14890 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f  child of zTo. */
148a0 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
148b0 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
148c0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
148d0 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
148e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
148f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
14900 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
14910 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
14920 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
14930 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f  eferred;       /
14940 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
14950 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
14960 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
14970 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41  OMMIT */.  u8 aA
14980 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20  ction[2];       
14990 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e   /* ON DELETE an
149a0 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69  d ON UPDATE acti
149b0 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ons, respectivel
149c0 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  y */.  Trigger *
149d0 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20  apTrigger[2];/* 
149e0 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
149f0 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
14a00 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
14a10 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70  ap {      /* Map
14a20 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  ping of columns 
14a30 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75  in pFrom to colu
14a40 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20  mns in zTo */.  
14a50 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20    int iFrom;    
14a60 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
14a70 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46   of column in pF
14a80 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  rom */.    char 
14a90 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  *zCol;          
14aa0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
14ab0 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e  mn in zTo.  If N
14ac0 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20  ULL use PRIMARY 
14ad0 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
14ae0 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  1];            /
14af0 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
14b00 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
14b10 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  umns */.};../*.*
14b20 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
14b30 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
14b40 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
14b50 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
14b60 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
14b70 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
14b80 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
14b90 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
14ba0 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
14bb0 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
14bc0 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
14bd0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
14be0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
14bf0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
14c00 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
14c10 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
14c20 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
14c30 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
14c40 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
14c50 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
14c60 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
14c70 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
14c80 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
14c90 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
14ca0 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
14cb0 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
14cc0 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
14cd0 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
14ce0 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
14cf0 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
14d00 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
14d10 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
14d20 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
14d30 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
14d40 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
14d50 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
14d60 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
14d70 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
14d80 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
14d90 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
14da0 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
14db0 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
14dc0 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
14dd0 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
14de0 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
14df0 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
14e00 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
14e10 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
14e20 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
14e30 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
14e40 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
14e50 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
14e60 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
14e70 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
14e80 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
14e90 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
14ea0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
14eb0 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
14ec0 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
14ed0 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
14ee0 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
14ef0 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
14f00 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
14f10 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
14f20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
14f30 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
14f40 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
14f50 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
14f60 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
14f70 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
14f80 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
14f90 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
14fa0 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
14fb0 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
14fc0 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
14fd0 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
14fe0 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
14ff0 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
15000 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
15010 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
15020 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  n key..**.** The
15030 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
15040 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
15050 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
15060 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
15070 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
15080 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
15090 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
150a0 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
150b0 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
150c0 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
150d0 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
150e0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
150f0 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
15100 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
15110 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
15120 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
15130 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
15140 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
15150 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
15160 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
15170 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
15180 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
15190 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
151a0 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
151b0 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
151c0 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
151d0 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
151e0 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
151f0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
15200 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
15210 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
15220 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
15230 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
15240 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
15250 45 5f 55 70 64 61 74 65 20 20 20 36 20 20 20 2f  E_Update   6   /
15260 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61 20 44  * Process as a D
15270 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e 20 75  O UPDATE in an u
15280 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65  psert */.#define
15290 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37 20 20   OE_Restrict 7  
152a0 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
152b0 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
152c0 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
152d0 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
152e0 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20 20  OE_SetNull  8   
152f0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
15300 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
15310 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
15320 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20 20 20  OE_SetDflt  9   
15330 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
15340 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
15350 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
15360 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
15370 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63 61 64  e  10  /* Cascad
15380 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
15390 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
153a0 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f 20 77  ult  11  /* Do w
153b0 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
153c0 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
153d0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
153e0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
153f0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
15400 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
15410 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
15420 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
15430 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
15440 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
15450 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  ol the.** compar
15460 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
15470 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a  index keys..**.*
15480 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72  * Note that aSor
15490 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f  tOrder[] and aCo
154a0 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64  ll[] have nField
154b0 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65  +1 slots.  There
154c0 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73  .** are nField s
154d0 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c  lots for the col
154e0 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78  umns of an index
154f0 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20   then one extra 
15500 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20  slot.** for the 
15510 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64  rowid at the end
15520 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49  ..*/.struct KeyI
15530 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66  nfo {.  u32 nRef
15540 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
15550 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e  umber of referen
15560 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49  ces to this KeyI
15570 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  nfo object */.  
15580 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
15590 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
155a0 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68  ding - one of th
155b0 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61  e SQLITE_UTF* va
155c0 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b  lues */.  u16 nK
155d0 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a  eyField;      /*
155e0 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63   Number of key c
155f0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
15600 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c  dex */.  u16 nAl
15610 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20  lField;      /* 
15620 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69  Total columns, i
15630 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75  ncluding key plu
15640 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71  s others */.  sq
15650 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
15660 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
15670 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
15680 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
15690 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72  ;     /* Sort or
156a0 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  der for each col
156b0 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  umn. */.  CollSe
156c0 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
156d0 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
156e0 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
156f0 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
15700 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f  };../*.** This o
15710 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65  bject holds a re
15720 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62  cord which has b
15730 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69  een parsed out i
15740 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a  nto individual.*
15750 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68  * fields, for th
15760 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f  e purposes of do
15770 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  ing a comparison
15780 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
15790 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
157a0 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
157b0 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
157c0 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
157d0 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
157e0 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
157f0 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
15800 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
15810 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
15820 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
15830 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
15840 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
15850 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
15860 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
15870 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
15880 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
15890 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
158a0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e  opcode..**.** An
158b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
158c0 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20  s object serves 
158d0 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64  as a "key" for d
158e0 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e  oing a search on
158f0 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74  .** an index b+t
15900 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66  ree. The goal of
15910 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74   the search is t
15920 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79  o find the entry
15930 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73   that.** is clos
15940 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65  ed to the key de
15950 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20  scribed by this 
15960 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62  object.  This ob
15970 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a  ject might hold.
15980 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78  ** just a prefix
15990 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68   of the key.  Th
159a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
159b0 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a  ds is given by.*
159c0 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  * pKeyInfo->nFie
159d0 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31  ld..**.** The r1
159e0 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61   and r2 fields a
159f0 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f  re the values to
15a00 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20   return if this 
15a10 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
15a20 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74  .** or greater t
15a30 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65  han a key in the
15a40 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69   btree, respecti
15a50 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65  vely.  These are
15a60 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20   normally.** -1 
15a70 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76  and +1 respectiv
15a80 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62  ely, but might b
15a90 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31  e inverted to +1
15aa0 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62   and -1 if the b
15ab0 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44  -tree.** is in D
15ac0 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  ESC order..**.**
15ad0 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69   The key compari
15ae0 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63  son functions ac
15af0 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65  tually return de
15b00 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68  fault_rc when th
15b10 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71  ey find.** an eq
15b20 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  uals comparison.
15b30 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e    default_rc can
15b40 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31   be -1, 0, or +1
15b50 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a  .  If there are.
15b60 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72  ** multiple entr
15b70 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65  ies in the b-tre
15b80 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
15b90 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c  key (when only l
15ba0 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65  ooking.** at the
15bb0 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d   first pKeyInfo-
15bc0 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20  >nFields,) then 
15bd0 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
15be0 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a  e set to -1 to.*
15bf0 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  * cause the sear
15c00 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  ch to find the l
15c10 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31  ast match, or +1
15c20 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65   to cause the se
15c30 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20  arch to.** find 
15c40 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e  the first match.
15c50 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
15c60 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
15c70 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53  ons will set eqS
15c80 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74  een to true if t
15c90 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20  hey ever.** get 
15ca0 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74  and equal result
15cb0 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
15cc0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
15cd0 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f  to a b-tree reco
15ce0 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61  rd..** When defa
15cf0 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73  ult_rc!=0, the s
15d00 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20  earch might end 
15d10 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64  up on the record
15d20 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20   immediately.** 
15d30 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74  before the first
15d40 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69   match or immedi
15d50 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
15d60 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65  last match.  The
15d70 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64  .** eqSeen field
15d80 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77   will indicate w
15d90 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
15da0 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69   exact match exi
15db0 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d  sts in the.** b-
15dc0 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tree..*/.struct 
15dd0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b  UnpackedRecord {
15de0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
15df0 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  Info;  /* Collat
15e00 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64  ion and sort-ord
15e10 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  er information *
15e20 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20  /.  Mem *aMem;  
15e30 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
15e40 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
15e50 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
15e60 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
15e70 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
15e80 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20  i8 default_rc;  
15e90 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
15ea0 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73  n result if keys
15eb0 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
15ec0 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  u8 errCode;     
15ed0 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74      /* Error det
15ee0 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64  ected by xRecord
15ef0 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54  Compare (CORRUPT
15f00 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20   or NOMEM) */.  
15f10 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  i8 r1;          
15f20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
15f30 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c  return if (lhs <
15f40 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32   rhs) */.  i8 r2
15f50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15f60 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
15f70 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
15f80 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b   */.  u8 eqSeen;
15f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
15fa0 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79  e if an equality
15fb0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20   comparison has 
15fc0 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a  been seen */.};.
15fd0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
15fe0 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
15ff0 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
16000 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
16010 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
16020 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
16030 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
16040 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
16050 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
16060 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
16070 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
16080 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
16090 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
160a0 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
160b0 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
160c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
160d0 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
160e0 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
160f0 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
16100 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
16110 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
16120 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
16130 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
16140 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
16150 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
16160 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
16170 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
16180 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
16190 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
161a0 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
161b0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
161c0 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
161d0 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
161e0 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
161f0 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
16200 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
16210 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
16220 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
16230 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
16240 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f   the.** first co
16250 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
16260 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
16270 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
16280 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
16290 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
162a0 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
162b0 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
162c0 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
162d0 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
162e0 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
162f0 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
16300 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
16310 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
16320 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
16330 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
16340 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
16350 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
16360 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
16370 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
16380 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
16390 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
163a0 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
163b0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
163c0 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
163d0 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
163e0 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
163f0 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
16400 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
16410 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c  resolution.** al
16420 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f  gorithm to emplo
16430 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74  y whenever an at
16440 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
16450 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e   insert a non-un
16460 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e  ique.** element.
16470 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72  .**.** While par
16480 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41  sing a CREATE TA
16490 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e  BLE or CREATE IN
164a0 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  DEX statement in
164b0 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e   order to.** gen
164c0 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20  erate VDBE code 
164d0 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70  (as opposed to p
164e0 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20  arsing one read 
164f0 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d  from an sqlite_m
16500 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61  aster.** table a
16510 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e  s part of parsin
16520 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  g an existing da
16530 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20  tabase schema), 
16540 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e  transient instan
16550 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  ces.** of this s
16560 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20  tructure may be 
16570 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73  created. In this
16580 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e   case the Index.
16590 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73  tnum variable is
165a0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
165b0 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  e the address of
165c0 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74   a VDBE instruct
165d0 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62  ion, not a datab
165e0 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  ase page.** numb
165f0 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20  er (it cannot - 
16600 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67  the database pag
16610 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74  e is not allocat
16620 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42  ed until the VDB
16630 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20  E.** program is 
16640 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63  executed). See c
16650 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52  onvertToWithoutR
16660 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20  owidTable() for 
16670 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75  details..*/.stru
16680 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
16690 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
166a0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
166b0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
166c0 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
166d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
166e0 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
166f0 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
16700 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
16710 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
16720 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
16730 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
16740 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
16750 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
16760 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
16770 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
16780 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
16790 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
167a0 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
167b0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
167c0 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
167d0 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
167e0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
167f0 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
16800 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
16810 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
16820 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
16830 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
16840 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
16850 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
16860 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
16870 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
16880 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
16890 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
168a0 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
168b0 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
168c0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  .  const char **
168d0 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41  azColl;     /* A
168e0 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
168f0 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
16900 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
16910 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
16920 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
16930 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
16940 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
16950 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c    ExprList *aCol
16960 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f  Expr;      /* Co
16970 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  lumn expressions
16980 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
169a0 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
169b0 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
169c0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
169d0 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
169e0 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
169f0 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
16a00 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
16a10 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
16a20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16a30 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
16a40 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
16a50 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
16a60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16a70 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
16a80 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
16a90 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
16aa0 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
16ab0 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
16ac0 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
16ad0 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
16ae0 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
16af0 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
16b00 20 20 2f 2a 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a    /* 0:Normal 1:
16b10 55 4e 49 51 55 45 2c 20 32 3a 50 52 49 4d 41 52  UNIQUE, 2:PRIMAR
16b20 59 20 4b 45 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a  Y KEY, 3:IPK */.
16b30 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
16b40 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
16b50 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
16b60 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
16b70 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
16b80 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
16b90 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
16ba0 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
16bb0 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
16bc0 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
16bd0 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
16be0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
16bf0 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
16c00 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
16c10 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16c20 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
16c30 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
16c40 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
16c50 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
16c60 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
16c70 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
16c80 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
16c90 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73  if true */.  uns
16ca0 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31  igned hasStat1:1
16cb0 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f  ;     /* aiRowLo
16cc0 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65  gEst values come
16cd0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
16ce0 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  t1 */.  unsigned
16cf0 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20   bNoQuery:1;    
16d00 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74   /* Do not use t
16d10 68 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74  his index to opt
16d20 69 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f  imize queries */
16d30 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 41 73 63  .  unsigned bAsc
16d40 4b 65 79 42 75 67 3a 31 3b 20 20 20 2f 2a 20 54  KeyBug:1;   /* T
16d50 72 75 65 20 69 66 20 74 68 65 20 62 62 61 37 62  rue if the bba7b
16d60 36 39 66 39 38 34 39 62 35 62 66 20 62 75 67 20  69f9849b5bf bug 
16d70 61 70 70 6c 69 65 73 20 2a 2f 0a 23 69 66 64 65  applies */.#ifde
16d80 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
16d90 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20  STAT3_OR_STAT4. 
16da0 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
16db0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16dc0 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
16dd0 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
16de0 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c    int nSampleCol
16df0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  ;          /* Si
16e00 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c  ze of IndexSampl
16e10 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20  e.anEq[] and so 
16e20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  on */.  tRowcnt 
16e30 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20  *aAvgEq;        
16e40 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20   /* Average nEq 
16e50 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20  values for keys 
16e60 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a  not in aSample *
16e70 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  /.  IndexSample 
16e80 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20  *aSample;    /* 
16e90 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  Samples of the l
16ea0 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a  eft-most key */.
16eb0 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77    tRowcnt *aiRow
16ec0 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f  Est;       /* No
16ed0 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74  n-logarithmic st
16ee0 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69  at1 data for thi
16ef0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f  s index */.  tRo
16f00 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20  wcnt nRowEst0;  
16f10 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
16f20 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20  arithmic number 
16f30 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69  of rows in the i
16f40 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ndex */.#endif. 
16f50 20 42 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f 74 49   Bitmask colNotI
16f60 64 78 65 64 3b 20 20 20 20 20 2f 2a 20 30 20 66  dxed;     /* 0 f
16f70 6f 72 20 75 6e 69 6e 64 65 78 65 64 20 63 6f 6c  or unindexed col
16f80 75 6d 6e 73 20 69 6e 20 70 54 61 62 20 2a 2f 0a  umns in pTab */.
16f90 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
16fa0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64  d values for Ind
16fb0 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64  ex.idxType.*/.#d
16fc0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
16fd0 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20  TYPE_APPDEF     
16fe0 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20   0   /* Created 
16ff0 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44  using CREATE IND
17000 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  EX */.#define SQ
17010 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49  LITE_IDXTYPE_UNI
17020 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20  QUE      1   /* 
17030 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49  Implements a UNI
17040 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  QUE constraint *
17050 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
17060 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
17070 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74  KEY  2   /* Is t
17080 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  he PRIMARY KEY f
17090 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  or the table */.
170a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
170b0 44 58 54 59 50 45 5f 49 50 4b 20 20 20 20 20 20  DXTYPE_IPK      
170c0 20 20 20 33 20 20 20 2f 2a 20 49 4e 54 45 47 45     3   /* INTEGE
170d0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  R PRIMARY KEY in
170e0 64 65 78 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  dex */../* Retur
170f0 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
17100 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
17110 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
17120 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
17130 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
17140 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
17150 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
17160 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
17170 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
17180 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
17190 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
171a0 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
171b0 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
171c0 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68  =OE_None)../* Th
171d0 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e  e Index.aiColumn
171e0 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f  [] values are no
171f0 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20  rmally positive 
17200 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a  integer.  But.**
17210 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20   there are some 
17220 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
17230 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61  that have specia
17240 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64  l meaning:.*/.#d
17250 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20  efine XN_ROWID  
17260 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49     (-1)     /* I
17270 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
17280 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64   the rowid */.#d
17290 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20  efine XN_EXPR   
172a0 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49     (-2)     /* I
172b0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
172c0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
172d0 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  /../*.** Each sa
172e0 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
172f0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
17300 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
17310 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
17320 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
17330 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
17340 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
17350 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
17360 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
17370 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
17380 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
17390 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
173a0 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
173b0 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
173c0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
173d0 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
173e0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
173f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
17400 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
17410 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
17420 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
17430 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
17440 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
17450 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
17460 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
17470 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
17480 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
17490 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
174a0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
174b0 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
174c0 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
174d0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
174e0 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
174f0 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
17500 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
17510 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
17520 20 74 6f 20 75 73 65 20 77 69 74 68 69 6e 20 74   to use within t
17530 68 65 20 66 6c 61 67 73 20 61 72 67 75 6d 65 6e  he flags argumen
17540 74 20 74 6f 20 73 71 6c 69 74 65 33 47 65 74 54  t to sqlite3GetT
17550 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  oken()..*/.#defi
17560 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45 4e 5f  ne SQLITE_TOKEN_
17570 51 55 4f 54 45 44 20 20 20 20 30 78 31 20 2f 2a  QUOTED    0x1 /*
17580 20 54 6f 6b 65 6e 20 69 73 20 61 20 71 75 6f 74   Token is a quot
17590 65 64 20 69 64 65 6e 74 69 66 69 65 72 2e 20 2a  ed identifier. *
175a0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
175b0 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44 20 20  _TOKEN_KEYWORD  
175c0 20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e 20 69 73   0x2 /* Token is
175d0 20 61 20 6b 65 79 77 6f 72 64 2e 20 2a 2f 0a 0a   a keyword. */..
175e0 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
175f0 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
17600 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
17610 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
17620 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
17630 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
17640 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
17650 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
17660 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 74  .** The memory t
17670 68 61 74 20 22 7a 22 20 70 6f 69 6e 74 73 20 74  hat "z" points t
17680 6f 20 69 73 20 6f 77 6e 65 64 20 62 79 20 6f 74  o is owned by ot
17690 68 65 72 20 6f 62 6a 65 63 74 73 2e 20 20 54 61  her objects.  Ta
176a0 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68 61 74 20  ke care.** that 
176b0 74 68 65 20 6f 77 6e 65 72 20 6f 66 20 74 68 65  the owner of the
176c0 20 22 7a 22 20 73 74 72 69 6e 67 20 64 6f 65 73   "z" string does
176d0 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61 74 65 20   not deallocate 
176e0 74 68 65 20 73 74 72 69 6e 67 20 62 65 66 6f 72  the string befor
176f0 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65 6e 20 67  e.** the Token g
17700 6f 65 73 20 6f 75 74 20 6f 66 20 73 63 6f 70 65  oes out of scope
17710 21 20 20 56 65 72 79 20 6f 66 74 65 6e 2c 20 74  !  Very often, t
17720 68 65 20 22 7a 22 20 70 6f 69 6e 74 73 20 74 6f  he "z" points to
17730 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a 20 69   some place.** i
17740 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
17750 74 68 65 20 50 61 72 73 65 2e 7a 53 71 6c 20 74  the Parse.zSql t
17760 65 78 74 2e 20 20 42 75 74 20 69 74 20 6d 69 67  ext.  But it mig
17770 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74 20 74 6f  ht also point to
17780 20 61 0a 2a 2a 20 73 74 61 74 69 63 20 73 74 72   a.** static str
17790 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ing..*/.struct T
177a0 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
177b0 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
177c0 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
177d0 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
177e0 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
177f0 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
17800 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
17810 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
17820 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
17830 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
17840 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
17850 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
17860 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
17870 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17880 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
17890 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
178a0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
178b0 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
178c0 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
178d0 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
178e0 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
178f0 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
17900 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
17910 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
17920 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
17930 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
17940 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
17950 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
17960 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
17970 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
17980 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17990 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
179a0 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
179b0 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
179c0 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
179d0 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
179e0 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
179f0 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
17a00 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
17a10 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
17a20 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
17a30 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
17a40 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
17a50 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
17a60 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
17a70 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
17a80 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
17a90 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
17aa0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
17ab0 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
17ac0 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
17ad0 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17af0 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
17b00 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
17b10 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
17b20 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
17b30 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
17b40 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
17b50 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
17b60 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
17b70 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b90 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
17ba0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
17bb0 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
17bc0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
17bd0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
17be0 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
17bf0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
17c00 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
17c10 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
17c20 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
17c30 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
17c40 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
17c50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
17c60 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
17c70 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
17c80 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
17c90 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
17ca0 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
17cb0 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
17cc0 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
17cd0 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
17ce0 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
17cf0 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
17d00 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
17d10 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
17d20 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
17d30 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
17d40 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
17d50 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
17d60 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
17d70 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17d80 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
17d90 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17da0 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
17db0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
17dc0 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
17dd0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
17de0 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
17df0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
17e00 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
17e10 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
17e20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
17e30 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
17e40 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
17e50 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
17e60 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
17e70 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
17e80 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
17e90 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
17ea0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
17eb0 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
17ec0 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
17ed0 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
17ee0 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
17ef0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17f00 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
17f10 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
17f20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
17f30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
17f40 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
17f50 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
17f60 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f80 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
17f90 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
17fa0 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
17fb0 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
17fe0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
17ff0 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
18000 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
18010 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
18020 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
18030 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
18040 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
18050 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
18060 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
18070 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
18080 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
18090 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
180a0 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
180b0 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
180c0 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
180d0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
180e0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
180f0 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
18100 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
18110 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
18120 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
18130 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
18140 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
18150 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
18160 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
18170 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18180 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
18190 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
181a0 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
181b0 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
181c0 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
181d0 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
181e0 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
181f0 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
18200 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
18210 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
18220 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
18230 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
18240 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
18250 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
18260 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
18270 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
18280 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
18290 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
182a0 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
182b0 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
182c0 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
182d0 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
182e0 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
182f0 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
18300 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
18310 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
18320 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
18330 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
18340 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
18350 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
18360 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
18370 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
18380 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
18390 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
183a0 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
183b0 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
183c0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
183d0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
183e0 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
183f0 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
18400 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
18410 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
18420 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
18430 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
18440 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
18450 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
18460 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
18470 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
18480 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
18490 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
184a0 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
184b0 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
184c0 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
184d0 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
184e0 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
184f0 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
18500 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
18510 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
18520 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
18530 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
18540 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
18550 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
18560 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
18570 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
18580 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
18590 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
185a0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
185b0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
185c0 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
185d0 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
185e0 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54  TK_BLOB,.** or T
185f0 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
18600 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
18610 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
18620 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
18630 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
18640 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
18650 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
18660 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
18670 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a  en contains the.
18680 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
18690 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
186a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
186b0 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
186c0 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
186d0 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
186e0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
186f0 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
18700 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
18710 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
18720 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
18730 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
18740 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
18750 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
18760 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
18770 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
18780 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
18790 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
187a0 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
187b0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
187c0 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
187d0 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
187e0 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
187f0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
18800 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
18810 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
18820 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
18830 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
18840 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
18850 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
18860 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
18870 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
18880 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
18890 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
188a0 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
188b0 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
188c0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
188d0 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
188e0 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
188f0 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
18900 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64  List is.** valid
18910 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
18920 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
18930 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
18940 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
18950 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
18960 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
18970 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
18980 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
18990 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
189a0 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
189b0 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
189c0 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
189d0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
189e0 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
189f0 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
18a00 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
18a10 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
18a20 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
18a30 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
18a40 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
18a50 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
18a60 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
18a70 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
18a80 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
18a90 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
18aa0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
18ab0 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
18ac0 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
18ad0 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
18ae0 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
18af0 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
18b00 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18b10 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
18b20 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
18b30 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a  a question mark.
18b40 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
18b50 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
18b60 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
18b70 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
18b80 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75   the index.** nu
18b90 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
18ba0 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
18bb0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18bc0 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
18bd0 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
18be0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
18bf0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
18c00 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
18c10 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
18c20 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
18c30 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
18c40 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
18c50 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
18c60 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
18c70 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
18c80 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
18c90 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
18ca0 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
18cb0 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
18cc0 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
18cd0 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
18ce0 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
18cf0 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
18d00 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
18d10 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
18d20 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
18d30 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
18d40 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
18d50 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
18d60 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
18d70 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
18d80 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
18d90 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
18da0 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
18db0 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
18dc0 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
18dd0 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
18de0 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
18df0 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
18e00 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
18e10 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
18e20 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
18e30 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
18e40 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
18e50 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
18e60 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
18e70 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
18e80 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
18e90 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
18ea0 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
18eb0 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
18ec0 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
18ed0 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
18ee0 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
18ef0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
18f00 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
18f10 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
18f20 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
18f30 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
18f40 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
18f50 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
18f60 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
18f70 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
18f80 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
18f90 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
18fa0 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
18fb0 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
18fc0 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
18fd0 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
18fe0 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
18ff0 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
19000 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
19010 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
19020 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
19030 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
19040 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
19050 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
19060 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
19070 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
19080 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
19090 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
190a0 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
190b0 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
190c0 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
190d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
190e0 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
190f0 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
19100 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
19110 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  affinity;       
19120 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
19130 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  y of the column 
19140 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f  or 0 if not a co
19150 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c  lumn */.  u32 fl
19160 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
19170 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
19180 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c  s.  EP_* See bel
19190 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ow */.  union {.
191a0 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e      char *zToken
191b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  ;          /* To
191c0 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20  ken value. Zero 
191d0 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64  terminated and d
191e0 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69  equoted */.    i
191f0 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20  nt iValue;      
19200 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67        /* Non-neg
19210 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61  ative integer va
19220 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c  lue if EP_IntVal
19230 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20  ue */.  } u;..  
19240 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b  /* If the EP_Tok
19250 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73  enOnly flag is s
19260 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
19270 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
19280 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
19290 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
192a0 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
192b0 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
192c0 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
192d0 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
192e0 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
192f0 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
19300 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
19310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
19350 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
19360 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
19370 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
19380 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
19390 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
193a0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
193b0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
193c0 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
193d0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
193e0 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
193f0 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
19400 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
19410 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
19420 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
19430 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
19440 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
19450 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
19460 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
19470 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
19480 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
19490 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
194a0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
194b0 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
194c0 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
194d0 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
194e0 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
194f0 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
19500 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
19510 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
19520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
19560 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
19570 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
19580 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
19590 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
195a0 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
195b0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
195c0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
195d0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
195e0 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
195f0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
19600 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
19610 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19630 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
19640 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
19670 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
19680 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
196b0 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
196c0 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a  imes likelihood.
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
196f0 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67 69 73  ELECT: 1st regis
19700 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65  ter of result ve
19710 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20  ctor */.  ynVar 
19720 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
19730 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
19740 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
19750 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
19780 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
19790 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
197a0 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
197c0 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e  TK_SELECT_COLUMN
197d0 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  : column of the 
197e0 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f  result vector */
197f0 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
19800 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
19810 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
19820 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
19830 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
19840 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
19850 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
19860 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
19870 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
19880 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
19890 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
198a0 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 2f   /* TK_REGISTER/
198b0 54 4b 5f 54 52 55 54 48 3a 20 6f 72 69 67 69 6e  TK_TRUTH: origin
198c0 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72  al value of Expr
198d0 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20  .op.            
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
198f0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76  TK_COLUMN: the v
19900 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f  alue of p5 for O
19910 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  P_Column.       
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43    ** TK_AGG_FUNC
19940 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65  TION: nesting de
19950 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  pth */.  AggInfo
19960 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20   *pAggInfo;     
19970 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47  /* Used by TK_AG
19980 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f  G_COLUMN and TK_
19990 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a  AGG_FUNCTION */.
199a0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 54 61    union {.    Ta
199b0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
199c0 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
199d0 4e 3a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e  N: Table contain
199e0 69 6e 67 20 63 6f 6c 75 6d 6e 2e 20 43 61 6e 20  ing column. Can 
199f0 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20  be NULL.        
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c 75     ** for a colu
19a20 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 6f  mn of an index o
19a30 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  n an expression 
19a40 2a 2f 0a 20 20 20 20 57 69 6e 64 6f 77 20 2a 70  */.    Window *p
19a50 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Win;          /*
19a60 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 3a 20 57 69   TK_FUNCTION: Wi
19a70 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e 20  ndow definition 
19a80 66 6f 72 20 74 68 65 20 66 75 6e 63 20 2a 2f 0a  for the func */.
19a90 20 20 20 20 73 74 72 75 63 74 20 7b 20 20 20 20      struct {    
19aa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
19ab0 5f 49 4e 2c 20 54 4b 5f 53 45 4c 45 43 54 2c 20  _IN, TK_SELECT, 
19ac0 61 6e 64 20 54 4b 5f 45 58 49 53 54 53 20 2a 2f  and TK_EXISTS */
19ad0 0a 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72  .      int iAddr
19ae0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
19af0 20 53 75 62 72 6f 75 74 69 6e 65 20 65 6e 74 72   Subroutine entr
19b00 79 20 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20  y address */.   
19b10 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
19b20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  ;         /* Reg
19b30 69 73 74 65 72 20 75 73 65 64 20 74 6f 20 68 6f  ister used to ho
19b40 6c 64 20 72 65 74 75 72 6e 20 61 64 64 72 65 73  ld return addres
19b50 73 20 2a 2f 0a 20 20 20 20 7d 20 73 75 62 3b 0a  s */.    } sub;.
19b60 20 20 7d 20 79 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } y;.};../*.**
19b70 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
19b80 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
19b90 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
19ba0 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
19bb0 0a 2a 2a 20 56 61 6c 75 65 20 72 65 73 74 72 69  .** Value restri
19bc0 63 74 69 6f 6e 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ctions:.**.**   
19bd0 20 20 20 20 20 20 20 45 50 5f 41 67 67 20 3d 3d         EP_Agg ==
19be0 20 4e 43 5f 48 61 73 41 67 67 20 3d 3d 20 53 46   NC_HasAgg == SF
19bf0 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 20  _HasAgg.**      
19c00 20 20 20 20 45 50 5f 57 69 6e 20 3d 3d 20 4e 43      EP_Win == NC
19c10 5f 48 61 73 57 69 6e 0a 2a 2f 0a 23 64 65 66 69  _HasWin.*/.#defi
19c20 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
19c30 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
19c40 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49  inates in ON/USI
19c50 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74  NG clause of out
19c60 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
19c70 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
19c80 30 78 30 30 30 30 30 32 20 2f 2a 20 41 67 67 72  0x000002 /* Aggr
19c90 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
19ca0 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
19cb0 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
19cc0 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30  EP_HasFunc   0x0
19cd0 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e  00004 /* Contain
19ce0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75  s one or more fu
19cf0 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b  nctions of any k
19d00 69 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ind */.#define E
19d10 50 5f 46 69 78 65 64 43 6f 6c 20 20 30 78 30 30  P_FixedCol  0x00
19d20 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d  0008 /* TK_Colum
19d30 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66  n with a known f
19d40 69 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64  ixed value */.#d
19d50 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20  efine EP_Agg    
19d60 20 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 43     0x000010 /* C
19d70 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
19d80 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
19d90 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
19da0 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20  ne EP_VarSelect 
19db0 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c  0x000020 /* pSel
19dc0 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ect is correlate
19dd0 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20  d, not constant 
19de0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62  */.#define EP_Db
19df0 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30  lQuoted 0x000040
19e00 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20   /* token.z was 
19e10 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e  originally in ".
19e20 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  .." */.#define E
19e30 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30  P_InfixFunc 0x00
19e40 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  0080 /* True for
19e50 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69   an infix functi
19e60 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20  on: LIKE, GLOB, 
19e70 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  etc */.#define E
19e80 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30  P_Collate   0x00
19e90 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0100 /* Tree con
19ea0 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41  tains a TK_COLLA
19eb0 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  TE operator */.#
19ec0 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69  define EP_Generi
19ed0 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20  c   0x000200 /* 
19ee0 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f  Ignore COLLATE o
19ef0 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68  r affinity on th
19f00 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69  is tree */.#defi
19f10 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
19f20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
19f30 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
19f40 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
19f50 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
19f60 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30  sSelect 0x000800
19f70 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
19f80 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
19f90 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
19fa0 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70  .#define EP_Skip
19fb0 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f        0x001000 /
19fc0 2a 20 4f 70 65 72 61 74 6f 72 20 64 6f 65 73 20  * Operator does 
19fd0 6e 6f 74 20 63 6f 6e 74 72 69 62 75 74 65 20 74  not contribute t
19fe0 6f 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 23 64  o affinity */.#d
19ff0 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
1a000 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45     0x002000 /* E
1a010 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
1a020 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
1a030 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
1a040 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30  e EP_TokenOnly 0
1a050 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20  x004000 /* Expr 
1a060 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45  struct EXPR_TOKE
1a070 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
1a080 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1a090 45 50 5f 57 69 6e 20 20 20 20 20 20 20 30 78 30  EP_Win       0x0
1a0a0 30 38 30 30 30 20 2f 2a 20 43 6f 6e 74 61 69 6e  08000 /* Contain
1a0b0 73 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  s window functio
1a0c0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ns */.#define EP
1a0d0 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30  _MemToken  0x010
1a0e0 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  000 /* Need to s
1a0f0 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
1a100 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
1a110 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63  efine EP_NoReduc
1a120 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43  e  0x020000 /* C
1a130 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
1a140 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
1a150 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c  /.#define EP_Unl
1a160 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20  ikely  0x040000 
1a170 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72  /* unlikely() or
1a180 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75   likelihood() fu
1a190 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
1a1a0 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30  e EP_ConstFunc 0
1a1b0 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c  x080000 /* A SQL
1a1c0 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
1a1d0 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75  T or _SLOCHNG fu
1a1e0 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
1a1f0 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30  e EP_CanBeNull 0
1a200 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62  x100000 /* Can b
1a210 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e  e null despite N
1a220 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
1a230 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
1a240 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30  _Subquery  0x200
1a250 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  000 /* Tree cont
1a260 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54  ains a TK_SELECT
1a270 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
1a280 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20  fine EP_Alias   
1a290 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73    0x400000 /* Is
1a2a0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20   an alias for a 
1a2b0 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
1a2c0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
1a2d0 4c 65 61 66 20 20 20 20 20 20 30 78 38 30 30 30  Leaf      0x8000
1a2e0 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74  00 /* Expr.pLeft
1a2f0 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53  , .pRight, .u.pS
1a300 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a  elect all NULL *
1a310 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e  /.#define EP_Win
1a320 46 75 6e 63 20 20 30 78 31 30 30 30 30 30 30 20  Func  0x1000000 
1a330 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e 20 77  /* TK_FUNCTION w
1a340 69 74 68 20 45 78 70 72 2e 79 2e 70 57 69 6e 20  ith Expr.y.pWin 
1a350 73 65 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  set */.#define E
1a360 50 5f 53 75 62 72 74 6e 20 20 20 30 78 32 30 30  P_Subrtn   0x200
1a370 30 30 30 30 20 2f 2a 20 55 73 65 73 20 45 78 70  0000 /* Uses Exp
1a380 72 2e 79 2e 73 75 62 2e 20 54 4b 5f 49 4e 2c 20  r.y.sub. TK_IN, 
1a390 5f 53 45 4c 45 43 54 2c 20 6f 72 20 5f 45 58 49  _SELECT, or _EXI
1a3a0 53 54 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  STS */.#define E
1a3b0 50 5f 51 75 6f 74 65 64 20 20 20 30 78 34 30 30  P_Quoted   0x400
1a3c0 30 30 30 30 20 2f 2a 20 54 4b 5f 49 44 20 77 61  0000 /* TK_ID wa
1a3d0 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 71 75 6f  s originally quo
1a3e0 74 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ted */.#define E
1a3f0 50 5f 53 74 61 74 69 63 20 20 20 30 78 38 30 30  P_Static   0x800
1a400 30 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20  0000 /* Held in 
1a410 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69  memory not obtai
1a420 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
1a430 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
1a440 49 73 54 72 75 65 20 20 30 78 31 30 30 30 30 30  IsTrue  0x100000
1a450 30 30 20 2f 2a 20 41 6c 77 61 79 73 20 68 61 73  00 /* Always has
1a460 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 6f   boolean value o
1a470 66 20 54 52 55 45 20 2a 2f 0a 23 64 65 66 69 6e  f TRUE */.#defin
1a480 65 20 45 50 5f 49 73 46 61 6c 73 65 20 30 78 32  e EP_IsFalse 0x2
1a490 30 30 30 30 30 30 30 20 2f 2a 20 41 6c 77 61 79  0000000 /* Alway
1a4a0 73 20 68 61 73 20 62 6f 6f 6c 65 61 6e 20 76 61  s has boolean va
1a4b0 6c 75 65 20 6f 66 20 46 41 4c 53 45 20 2a 2f 0a  lue of FALSE */.
1a4c0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72  ./*.** The EP_Pr
1a4d0 6f 70 61 67 61 74 65 20 6d 61 73 6b 20 69 73 20  opagate mask is 
1a4e0 61 20 73 65 74 20 6f 66 20 70 72 6f 70 65 72 74  a set of propert
1a4f0 69 65 73 20 74 68 61 74 20 61 75 74 6f 6d 61 74  ies that automat
1a500 69 63 61 6c 6c 79 20 70 72 6f 70 61 67 61 74 65  ically propagate
1a510 0a 2a 2a 20 75 70 77 61 72 64 73 20 69 6e 74 6f  .** upwards into
1a520 20 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a   parent nodes..*
1a530 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f  /.#define EP_Pro
1a540 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61  pagate (EP_Colla
1a550 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79 7c 45  te|EP_Subquery|E
1a560 50 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a  P_HasFunc)../*.*
1a570 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
1a580 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
1a590 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
1a5a0 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a  r bits in the.**
1a5b0 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
1a5c0 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78  d..*/.#define Ex
1a5d0 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c  prHasProperty(E,
1a5e0 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c  P)     (((E)->fl
1a5f0 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
1a600 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50  fine ExprHasAllP
1a610 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28  roperty(E,P)  ((
1a620 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  (E)->flags&(P))=
1a630 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78  =(P)).#define Ex
1a640 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c  prSetProperty(E,
1a650 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67  P)     (E)->flag
1a660 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45  s|=(P).#define E
1a670 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79  xprClearProperty
1a680 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61  (E,P)   (E)->fla
1a690 67 73 26 3d 7e 28 50 29 0a 23 64 65 66 69 6e 65  gs&=~(P).#define
1a6a0 20 45 78 70 72 41 6c 77 61 79 73 54 72 75 65 28   ExprAlwaysTrue(
1a6b0 45 29 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  E)   (((E)->flag
1a6c0 73 26 28 45 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45  s&(EP_FromJoin|E
1a6d0 50 5f 49 73 54 72 75 65 29 29 3d 3d 45 50 5f 49  P_IsTrue))==EP_I
1a6e0 73 54 72 75 65 29 0a 23 64 65 66 69 6e 65 20 45  sTrue).#define E
1a6f0 78 70 72 41 6c 77 61 79 73 46 61 6c 73 65 28 45  xprAlwaysFalse(E
1a700 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
1a710 28 45 50 5f 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f  (EP_FromJoin|EP_
1a720 49 73 46 61 6c 73 65 29 29 3d 3d 45 50 5f 49 73  IsFalse))==EP_Is
1a730 46 61 6c 73 65 29 0a 0a 2f 2a 20 54 68 65 20 45  False)../* The E
1a740 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
1a750 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65  y() macro is use
1a760 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69  d for Verificati
1a770 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a  on, Validation,.
1a780 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  ** and Accredita
1a790 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77  tion only.  It w
1a7a0 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65  orks like ExprSe
1a7b0 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69  tProperty() duri
1a7c0 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73  ng VVA.** proces
1a7d0 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d  ses but is a no-
1a7e0 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e  op for delivery.
1a7f0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
1a800 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65  E_DEBUG.# define
1a810 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
1a820 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66  rty(E,P)  (E)->f
1a830 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a  lags|=(P).#else.
1a840 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
1a850 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
1a860 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
1a870 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
1a880 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ne the number of
1a890 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20   bytes required 
1a8a0 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72  by a normal Expr
1a8b0 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45  .** struct, an E
1a8c0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
1a8d0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
1a8e0 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e  lag set in Expr.
1a8f0 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20  flags.** and an 
1a900 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
1a910 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
1a920 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23  y flag set..*/.#
1a930 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c  define EXPR_FULL
1a940 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73  SIZE           s
1a950 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20  izeof(Expr)     
1a960 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69        /* Full si
1a970 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  ze */.#define EX
1a980 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20  PR_REDUCEDSIZE  
1a990 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
1a9a0 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20  xpr,iTable)  /* 
1a9b0 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20  Common features 
1a9c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
1a9d0 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20  TOKENONLYSIZE   
1a9e0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
1a9f0 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77  ,pLeft)   /* Few
1aa00 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a  er features */..
1aa10 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73  /*.** Flags pass
1aa20 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ed to the sqlite
1aa30 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74  3ExprDup() funct
1aa40 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61  ion. See the hea
1aa50 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61  der comment.** a
1aa60 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
1aa70 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
1aa80 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
1aa90 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
1aaa0 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
1aab0 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
1aac0 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
1aad0 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
1aae0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
1aaf0 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
1ab00 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
1ab10 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
1ab20 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
1ab30 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
1ab40 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
1ab50 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
1ab60 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
1ab70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
1ab80 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
1ab90 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
1aba0 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
1abb0 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
1abc0 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
1abd0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
1abe0 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
1abf0 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
1ac00 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
1ac10 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
1ac20 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
1ac30 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
1ac40 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
1ac50 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
1ac60 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
1ac70 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
1ac80 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
1ac90 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
1aca0 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
1acb0 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
1acc0 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
1acd0 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
1ace0 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
1acf0 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
1ad00 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
1ad10 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
1ad20 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
1ad30 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
1ad40 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
1ad50 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
1ad60 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
1ad70 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
1ad80 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
1ad90 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
1ada0 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
1adb0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
1adc0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
1add0 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
1ade0 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
1adf0 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
1ae00 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
1ae10 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
1ae20 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
1ae30 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
1ae40 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
1ae50 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
1ae60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
1ae70 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
1ae80 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63   list */.  struc
1ae90 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
1aea0 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
1aeb0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
1aec0 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
1aed0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
1aee0 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
1aef0 20 74 72 65 65 20 66 6f 72 20 74 68 69 73 20 65   tree for this e
1af00 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
1af10 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1af20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
1af30 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
1af40 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
1af50 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
1af60 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
1af70 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
1af80 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
1af90 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
1afa0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
1afb0 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
1afc0 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
1afd0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
1afe0 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
1aff0 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
1b000 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
1b010 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
1b020 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
1b030 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
1b040 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
1b050 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
1b060 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
1b070 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
1b080 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
1b090 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
1b0a0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
1b0b0 53 6f 72 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a  SorterRef :1; /*
1b0c0 20 44 65 66 65 72 20 65 76 61 6c 75 61 74 69 6f   Defer evaluatio
1b0d0 6e 20 75 6e 74 69 6c 20 61 66 74 65 72 20 73 6f  n until after so
1b0e0 72 74 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 69  rting */.    uni
1b0f0 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63  on {.      struc
1b100 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20  t {.        u16 
1b110 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20  iOrderByCol;    
1b120 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42    /* For ORDER B
1b130 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  Y, column number
1b140 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a   in result set *
1b150 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41  /.        u16 iA
1b160 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
1b170 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61  /* Index into Pa
1b180 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72  rse.aAlias[] for
1b190 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20   zName */.      
1b1a0 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69  } x;.      int i
1b1b0 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20  ConstExprReg;   
1b1c0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69     /* Register i
1b1d0 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c  n which Expr val
1b1e0 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a  ue is cached */.
1b1f0 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31      } u;.  } a[1
1b200 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
1b210 20 20 20 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20      /* One slot 
1b220 66 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  for each express
1b230 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
1b240 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1b250 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1b260 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68   structure can h
1b270 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73  old a simple lis
1b280 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  t of identifiers
1b290 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65  ,.** such as the
1b2a0 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e   list "a,b,c" in
1b2b0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1b2c0 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a  tatements:.**.**
1b2d0 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
1b2e0 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45  O t(a,b,c) VALUE
1b2f0 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43  S ...;.**      C
1b300 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20  REATE INDEX idx 
1b310 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20  ON t(a,b,c);.** 
1b320 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
1b330 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20  GER trig BEFORE 
1b340 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c  UPDATE ON t(a,b,
1b350 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68  c) ...;.**.** Th
1b360 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66  e IdList.a.idx f
1b370 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65  ield is used whe
1b380 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70  n the IdList rep
1b390 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74  resents the list
1b3a0 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61   of.** column na
1b3b0 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c  mes after a tabl
1b3c0 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53  e name in an INS
1b3d0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ERT statement.  
1b3e0 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  In the statement
1b3f0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52  .**.**     INSER
1b400 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
1b410 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22  ....**.** If "a"
1b420 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c   is the k-th col
1b430 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22  umn of table "t"
1b440 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b  , then IdList.a[
1b450 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74  0].idx==k..*/.st
1b460 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20  ruct IdList {.  
1b470 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74  struct IdList_it
1b480 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  em {.    char *z
1b490 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
1b4a0 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69  me of the identi
1b4b0 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  fier */.    int 
1b4c0 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  idx;          /*
1b4d0 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54   Index in some T
1b4e0 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61  able.aCol[] of a
1b4f0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e   column named zN
1b500 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20  ame */.  } *a;. 
1b510 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20   int nId;       
1b520 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69    /* Number of i
1b530 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68  dentifiers on th
1b540 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
1b550 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1b560 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
1b570 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
1b580 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1b590 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
1b5a0 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
1b5b0 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
1b5c0 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
1b5d0 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
1b5e0 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
1b5f0 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
1b600 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
1b610 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
1b620 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
1b630 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
1b640 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
1b650 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
1b660 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
1b670 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
1b680 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
1b690 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
1b6a0 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
1b6b0 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
1b6c0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
1b6d0 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
1b6e0 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
1b6f0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
1b700 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
1b710 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
1b720 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
1b730 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
1b740 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
1b750 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
1b760 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
1b770 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
1b780 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
1b790 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
1b7a0 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
1b7b0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
1b7c0 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
1b7d0 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
1b7e0 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
1b7f0 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
1b800 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
1b810 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
1b820 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
1b830 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
1b840 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
1b850 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
1b860 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
1b870 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
1b880 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
1b890 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
1b8a0 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
1b8b0 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
1b8c0 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
1b8d0 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
1b8e0 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
1b8f0 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
1b900 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
1b910 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
1b920 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
1b930 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
1b940 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74   SrcList {.  int
1b950 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a   nSrc;        /*
1b960 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
1b970 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
1b980 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
1b990 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c  se */.  u32 nAll
1b9a0 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  oc;      /* Numb
1b9b0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c  er of entries al
1b9c0 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62  located in a[] b
1b9d0 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74  elow */.  struct
1b9e0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a   SrcList_item {.
1b9f0 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68      Schema *pSch
1ba00 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20  ema;  /* Schema 
1ba10 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74  to which this it
1ba20 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20  em is fixed */. 
1ba30 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61     char *zDataba
1ba40 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  se;  /* Name of 
1ba50 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1ba60 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
1ba70 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1ba80 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1ba90 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  the table */.   
1baa0 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20   char *zAlias;  
1bab0 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61     /* The "B" pa
1bac0 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22  rt of a "A AS B"
1bad0 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20   phrase.  zName 
1bae0 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20  is the "A" */.  
1baf0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1bb00 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61      /* An SQL ta
1bb10 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
1bb20 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  g to zName */.  
1bb30 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1bb40 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20  t;  /* A SELECT 
1bb50 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69  statement used i
1bb60 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
1bb70 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  le name */.    i
1bb80 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20  nt addrFillSub; 
1bb90 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73   /* Address of s
1bba0 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e  ubroutine to man
1bbb0 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79  ifest a subquery
1bbc0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
1bbd0 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67  eturn;    /* Reg
1bbe0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65  ister holding re
1bbf0 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20  turn address of 
1bc00 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20  addrFillSub */. 
1bc10 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74     int regResult
1bc20 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
1bc30 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74  s holding result
1bc40 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e  s of a co-routin
1bc50 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
1bc60 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74  {.      u8 joint
1bc70 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70  ype;      /* Typ
1bc80 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65  e of join betwee
1bc90 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64  n this table and
1bca0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
1bcb0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1bcc0 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
1bcd0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1bce0 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
1bcf0 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
1bd00 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49      unsigned isI
1bd10 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f  ndexedBy :1;   /
1bd20 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1bd30 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59  is an INDEXED BY
1bd40 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1bd50 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46   unsigned isTabF
1bd60 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54  unc :1;     /* T
1bd70 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c  rue if table-val
1bd80 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e  ued-function syn
1bd90 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  tax */.      uns
1bda0 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
1bdb0 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
1bdc0 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
1bdd0 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
1bde0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
1bdf0 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
1be00 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
1be10 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
1be20 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1be30 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20  isRecursive :1; 
1be40 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65    /* True for re
1be50 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63  cursive referenc
1be60 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20  e in WITH */.   
1be70 20 7d 20 66 67 3b 0a 20 20 20 20 69 6e 74 20 69   } fg;.    int i
1be80 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
1be90 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
1bea0 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
1beb0 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
1bec0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
1bed0 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
1bee0 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
1bef0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
1bf00 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
1bf10 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
1bf20 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
1bf30 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
1bf40 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
1bf50 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
1bf60 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
1bf70 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  used */.    unio
1bf80 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  n {.      char *
1bf90 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f  zIndexedBy;    /
1bfa0 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
1bfb0 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
1bfc0 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
1bfd0 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74  /.      ExprList
1bfe0 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20   *pFuncArg;  /* 
1bff0 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62  Arguments to tab
1c000 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
1c010 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a  on */.    } u1;.
1c020 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e      Index *pIBIn
1c030 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73  dex;  /* Index s
1c040 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
1c050 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e  onding to u1.zIn
1c060 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61  dexedBy */.  } a
1c070 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
1c080 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
1c090 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
1c0a0 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
1c0b0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
1c0c0 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
1c0d0 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
1c0e0 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
1c0f0 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
1c100 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
1c110 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
1c120 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
1c130 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
1c140 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
1c150 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
1c160 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
1c170 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1c180 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
1c190 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
1c1a0 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
1c1b0 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
1c1c0 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
1c1d0 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
1c1e0 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
1c1f0 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
1c200 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
1c210 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
1c220 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1c230 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
1c240 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
1c250 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
1c260 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
1c270 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
1c280 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
1c290 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
1c2a0 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
1c2b0 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
1c2c0 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
1c2d0 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
1c2e0 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
1c2f0 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
1c300 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
1c310 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
1c320 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ber..**.** Value
1c330 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
1c340 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
1c350 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45  t()):.**     WHE
1c360 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d  RE_USE_LIMIT  ==
1c370 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a   SF_FixedLimit.*
1c380 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c390 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20  ORDERBY_NORMAL  
1c3a0 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70   0x0000 /* No-op
1c3b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c3c0 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20  E_ORDERBY_MIN   
1c3d0 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44     0x0001 /* ORD
1c3e0 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1c3f0 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20   for min() func 
1c400 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c410 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20  _ORDERBY_MAX    
1c420 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45    0x0002 /* ORDE
1c430 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1c440 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a  for max() func *
1c450 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c460 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20  ONEPASS_DESIRED 
1c470 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20   0x0004 /* Want 
1c480 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
1c490 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
1c4a0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1c4b0 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30  EPASS_MULTIROW 0
1c4c0 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53  x0008 /* ONEPASS
1c4d0 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74   is ok with mult
1c4e0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1c4f0 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
1c500 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
1c510 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  10 /* Ok to retu
1c520 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
1c530 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
1c540 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43  ne WHERE_OR_SUBC
1c550 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30  LAUSE     0x0020
1c560 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61   /* Processing a
1c570 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61   sub-WHERE as pa
1c580 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20  rt of.          
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
1c5b0 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69  he OR optimizati
1c5c0 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  on  */.#define W
1c5d0 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20  HERE_GROUPBY    
1c5e0 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20        0x0040 /* 
1c5f0 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c  pOrderBy is real
1c600 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  ly a GROUP BY */
1c610 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1c620 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20  ISTINCTBY       
1c630 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72  0x0080 /* pOrder
1c640 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44  by is really a D
1c650 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a  ISTINCT clause *
1c660 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c670 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20  WANT_DISTINCT   
1c680 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f   0x0100 /* All o
1c690 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62  utput needs to b
1c6a0 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64  e distinct */.#d
1c6b0 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54  efine WHERE_SORT
1c6c0 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30  BYGROUP      0x0
1c6d0 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73  200 /* Support s
1c6e0 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
1c6f0 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ted() */.#define
1c700 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c   WHERE_SEEK_TABL
1c710 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f  E       0x0400 /
1c720 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1c730 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62  eeks on main tab
1c740 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  le */.#define WH
1c750 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49  ERE_ORDERBY_LIMI
1c760 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f  T    0x0800 /* O
1c770 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20  RDERBY+LIMIT on 
1c780 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a  the inner loop *
1c790 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c7a0 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20  SEEK_UNIQ_TABLE 
1c7b0 20 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f   0x1000 /* Do no
1c7c0 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 69 66  t defer seeks if
1c7d0 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20   unique */.     
1c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7f0 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30     /*     0x2000
1c800 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c      not currentl
1c810 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  y used */.#defin
1c820 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49  e WHERE_USE_LIMI
1c830 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20  T        0x4000 
1c840 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54  /* Use the LIMIT
1c850 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74   in cost estimat
1c860 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  es */.          
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c880 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e       0x8000    n
1c890 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1c8a0 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  d */../* Allowed
1c8b0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
1c8c0 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
1c8d0 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
1c8e0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1c8f0 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
1c900 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
1c910 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
1c920 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c930 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
1c940 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
1c950 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
1c960 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1c970 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
1c980 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
1c990 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
1c9a0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c9b0 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
1c9c0 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
1c9d0 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
1c9e0 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
1c9f0 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
1ca00 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
1ca10 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
1ca20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
1ca30 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
1ca40 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
1ca50 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
1ca60 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
1ca70 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
1ca80 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
1ca90 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
1caa0 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
1cab0 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
1cac0 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
1cad0 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
1cae0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
1caf0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1cb00 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
1cb10 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
1cb20 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
1cb30 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
1cb40 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
1cb50 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
1cb60 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
1cb70 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
1cb80 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
1cb90 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
1cba0 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
1cbb0 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
1cbc0 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
1cbd0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
1cbe0 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a  the inner-most.*
1cbf0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
1cc00 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
1cc10 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
1cc20 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
1cc30 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
1cc40 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
1cc50 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
1cc60 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
1cc70 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
1cc80 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
1cc90 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
1cca0 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
1ccb0 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
1ccc0 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
1ccd0 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
1cce0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
1ccf0 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
1cd00 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
1cd10 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
1cd20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
1cd30 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
1cd40 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
1cd50 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
1cd60 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
1cd70 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
1cd80 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1cd90 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
1cda0 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
1cdb0 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
1cdc0 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
1cdd0 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
1cde0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
1cdf0 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
1ce00 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
1ce10 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
1ce20 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
1ce30 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
1ce40 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
1ce50 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1ce60 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1ce70 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
1ce80 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
1ce90 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
1cea0 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
1ceb0 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e  ve names */.  un
1cec0 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
1ced0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
1cee0 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
1cef0 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f  of result-set co
1cf00 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67  lumns */.    Agg
1cf10 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
1cf20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1cf30 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
1cf40 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
1cf50 2a 2f 0a 20 20 20 20 55 70 73 65 72 74 20 2a 70  */.    Upsert *p
1cf60 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f  Upsert;     /* O
1cf70 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1cf80 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  e information fr
1cf90 6f 6d 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a  om an upsert */.
1cfa0 20 20 7d 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43    } uNC;.  NameC
1cfb0 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20  ontext *pNext;  
1cfc0 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61  /* Next outer na
1cfd0 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c  me context.  NUL
1cfe0 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20  L for outermost 
1cff0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
1d000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d010 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73  ber of names res
1d020 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f  olved by this co
1d030 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  ntext */.  int n
1d040 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1d050 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1d060 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ors encountered 
1d070 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20  while resolving 
1d080 6e 61 6d 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  names */.  int n
1d090 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  cFlags;         
1d0a0 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
1d0b0 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  NC_* flags defin
1d0c0 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65  ed below */.  Se
1d0d0 6c 65 63 74 20 2a 70 57 69 6e 53 65 6c 65 63 74  lect *pWinSelect
1d0e0 3b 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61  ;  /* SELECT sta
1d0f0 74 65 6d 65 6e 74 20 66 6f 72 20 61 6e 79 20 77  tement for any w
1d100 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20  indow functions 
1d110 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
1d120 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1d130 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
1d140 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
1d150 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1d160 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65  traints (all che
1d170 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28  cked via assert(
1d180 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73  )):.**    NC_Has
1d190 41 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73  Agg    == SF_Has
1d1a0 41 67 67 20 20 20 20 3d 3d 20 45 50 5f 41 67 67  Agg    == EP_Agg
1d1b0 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78  .**    NC_MinMax
1d1c0 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78  Agg == SF_MinMax
1d1d0 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55  Agg == SQLITE_FU
1d1e0 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20  NC_MINMAX.**    
1d1f0 4e 43 5f 48 61 73 57 69 6e 20 20 20 20 3d 3d 20  NC_HasWin    == 
1d200 45 50 5f 57 69 6e 0a 2a 2a 0a 2a 2f 0a 23 64 65  EP_Win.**.*/.#de
1d210 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67  fine NC_AllowAgg
1d220 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67    0x0001  /* Agg
1d230 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1d240 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
1d250 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
1d260 50 61 72 74 49 64 78 20 20 20 30 78 30 30 30 32  PartIdx   0x0002
1d270 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1d280 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c  olving a partial
1d290 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a   index WHERE */.
1d2a0 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65  #define NC_IsChe
1d2b0 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20  ck   0x0004  /* 
1d2c0 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1d2d0 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45  g names in a CHE
1d2e0 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  CK constraint */
1d2f0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67  .#define NC_InAg
1d300 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a  gFunc 0x0008  /*
1d310 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69   True if analyzi
1d320 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  ng arguments to 
1d330 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23  an agg func */.#
1d340 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67  define NC_HasAgg
1d350 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 4f      0x0010  /* O
1d360 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
1d370 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
1d380 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1d390 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30  C_IdxExpr   0x00
1d3a0 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  20  /* True if r
1d3b0 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73  esolving columns
1d3c0 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45 58   of CREATE INDEX
1d3d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56   */.#define NC_V
1d3e0 61 72 53 65 6c 65 63 74 20 30 78 30 30 34 30 20  arSelect 0x0040 
1d3f0 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65 64   /* A correlated
1d400 20 73 75 62 71 75 65 72 79 20 68 61 73 20 62 65   subquery has be
1d410 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  en seen */.#defi
1d420 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20 20 20 20  ne NC_UEList    
1d430 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20  0x0080  /* True 
1d440 69 66 20 75 4e 43 2e 70 45 4c 69 73 74 20 69 73  if uNC.pEList is
1d450 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1d460 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20 20 30 78   NC_UAggInfo  0x
1d470 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0100  /* True if
1d480 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f 20 69 73   uNC.pAggInfo is
1d490 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1d4a0 20 4e 43 5f 55 55 70 73 65 72 74 20 20 20 30 78   NC_UUpsert   0x
1d4b0 30 32 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0200  /* True if
1d4c0 20 75 4e 43 2e 70 55 70 73 65 72 74 20 69 73 20   uNC.pUpsert is 
1d4d0 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1d4e0 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31  NC_MinMaxAgg 0x1
1d4f0 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20  000  /* min/max 
1d500 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e  aggregates seen.
1d510 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65    See note above
1d520 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43   */.#define NC_C
1d530 6f 6d 70 6c 65 78 20 20 20 30 78 32 30 30 30 20  omplex   0x2000 
1d540 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 66 75   /* True if a fu
1d550 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62 71 75 65  nction or subque
1d560 72 79 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ry seen */.#defi
1d570 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20  ne NC_AllowWin  
1d580 30 78 34 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f  0x4000  /* Windo
1d590 77 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  w functions are 
1d5a0 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
1d5b0 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 57 69  #define NC_HasWi
1d5c0 6e 20 20 20 20 30 78 38 30 30 30 20 20 2f 2a 20  n    0x8000  /* 
1d5d0 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 77 69 6e 64  One or more wind
1d5e0 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65  ow functions see
1d5f0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1d600 49 73 44 44 4c 20 20 20 20 30 78 31 30 30 30 30  IsDDL    0x10000
1d610 20 20 2f 2a 20 52 65 73 6f 6c 76 69 6e 67 20 6e    /* Resolving n
1d620 61 6d 65 73 20 69 6e 20 61 20 43 52 45 41 54 45  ames in a CREATE
1d630 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 0a 2f   statement */../
1d640 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1d650 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1d660 67 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  g object describ
1d670 65 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43  es a single ON C
1d680 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73  ONFLICT.** claus
1d690 65 20 69 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a  e in an upsert..
1d6a0 2a 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72  **.** The pUpser
1d6b0 74 54 61 72 67 65 74 20 66 69 65 6c 64 20 69 73  tTarget field is
1d6c0 20 6f 6e 6c 79 20 73 65 74 20 69 66 20 74 68 65   only set if the
1d6d0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1d6e0 75 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20  use includes.** 
1d6f0 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20  conflict-target 
1d700 63 6c 61 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e  clause.  (In "ON
1d710 20 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22 20   CONFLICT(a,b)" 
1d720 74 68 65 20 22 28 61 2c 62 29 22 20 69 73 20 74  the "(a,b)" is t
1d730 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74  he.** conflict-t
1d740 61 72 67 65 74 20 63 6c 61 75 73 65 2e 29 20 20  arget clause.)  
1d750 54 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65  The pUpsertTarge
1d760 74 57 68 65 72 65 20 69 73 20 74 68 65 20 6f 70  tWhere is the op
1d770 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20  tional.** WHERE 
1d780 63 6c 61 75 73 65 20 75 73 65 64 20 74 6f 20 69  clause used to i
1d790 64 65 6e 74 69 66 79 20 70 61 72 74 69 61 6c 20  dentify partial 
1d7a0 75 6e 69 71 75 65 20 69 6e 64 65 78 65 73 2e 0a  unique indexes..
1d7b0 2a 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53 65 74  **.** pUpsertSet
1d7c0 20 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   is the list of 
1d7d0 63 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d  column=expr term
1d7e0 73 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  s of the UPDATE 
1d7f0 73 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54  statement. .** T
1d800 68 65 20 70 55 70 73 65 72 74 53 65 74 20 66 69  he pUpsertSet fi
1d810 65 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20  eld is NULL for 
1d820 61 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f  a ON CONFLICT DO
1d830 20 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a   NOTHING.  The.*
1d840 2a 20 70 55 70 73 65 72 74 57 68 65 72 65 20 69  * pUpsertWhere i
1d850 73 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  s the WHERE clau
1d860 73 65 20 66 6f 72 20 74 68 65 20 55 50 44 41 54  se for the UPDAT
1d870 45 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66  E and is NULL if
1d880 20 74 68 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c   the.** WHERE cl
1d890 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2e  ause is omitted.
1d8a0 0a 2a 2f 0a 73 74 72 75 63 74 20 55 70 73 65 72  .*/.struct Upser
1d8b0 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
1d8c0 70 55 70 73 65 72 74 54 61 72 67 65 74 3b 20 20  pUpsertTarget;  
1d8d0 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63  /* Optional desc
1d8e0 72 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c  ription of confl
1d8f0 69 63 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  icting index */.
1d900 20 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 54    Expr *pUpsertT
1d910 61 72 67 65 74 57 68 65 72 65 3b 20 2f 2a 20 57  argetWhere; /* W
1d920 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1d930 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 74 61  partial index ta
1d940 72 67 65 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c  rgets */.  ExprL
1d950 69 73 74 20 2a 70 55 70 73 65 72 74 53 65 74 3b  ist *pUpsertSet;
1d960 20 20 20 20 20 2f 2a 20 54 68 65 20 53 45 54 20       /* The SET 
1d970 63 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f  clause from an O
1d980 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54  N CONFLICT UPDAT
1d990 45 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70  E */.  Expr *pUp
1d9a0 73 65 72 74 57 68 65 72 65 3b 20 20 20 20 20 20  sertWhere;      
1d9b0 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
1d9c0 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46   for the ON CONF
1d9d0 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20  LICT UPDATE */. 
1d9e0 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 61   /* The fields a
1d9f0 62 6f 76 65 20 63 6f 6d 70 72 69 73 65 20 74 68  bove comprise th
1da00 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
1da10 20 74 68 65 20 75 70 73 65 72 74 20 63 6c 61 75   the upsert clau
1da20 73 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 65  se..  ** The fie
1da30 6c 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75 73  lds below are us
1da40 65 64 20 74 6f 20 74 72 61 6e 73 66 65 72 20 69  ed to transfer i
1da50 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
1da60 74 68 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20  the INSERT.  ** 
1da70 70 72 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e 20  processing down 
1da80 69 6e 74 6f 20 74 68 65 20 55 50 44 41 54 45 20  into the UPDATE 
1da90 70 72 6f 63 65 73 73 69 6e 67 20 77 68 69 6c 65  processing while
1daa0 20 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 64 65   generating code
1dab0 2e 0a 20 20 2a 2a 20 55 70 73 65 72 74 20 6f 77  ..  ** Upsert ow
1dac0 6e 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ns the memory al
1dad0 6c 6f 63 61 74 65 64 20 61 62 6f 76 65 2c 20 62  located above, b
1dae0 75 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72  ut not the memor
1daf0 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e  y below. */.  In
1db00 64 65 78 20 2a 70 55 70 73 65 72 74 49 64 78 3b  dex *pUpsertIdx;
1db10 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74          /* Const
1db20 72 61 69 6e 74 20 74 68 61 74 20 70 55 70 73 65  raint that pUpse
1db30 72 74 54 61 72 67 65 74 20 69 64 65 6e 74 69 66  rtTarget identif
1db40 69 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ies */.  SrcList
1db50 20 2a 70 55 70 73 65 72 74 53 72 63 3b 20 20 20   *pUpsertSrc;   
1db60 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62     /* Table to b
1db70 65 20 75 70 64 61 74 65 64 20 2a 2f 0a 20 20 69  e updated */.  i
1db80 6e 74 20 72 65 67 44 61 74 61 3b 20 20 20 20 20  nt regData;     
1db90 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
1dba0 74 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  t register holdi
1dbb0 6e 67 20 61 72 72 61 79 20 6f 66 20 56 41 4c 55  ng array of VALU
1dbc0 45 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74  ES */.  int iDat
1dbd0 61 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  aCur;           
1dbe0 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68    /* Index of th
1dbf0 65 20 64 61 74 61 20 63 75 72 73 6f 72 20 2a 2f  e data cursor */
1dc00 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20  .  int iIdxCur; 
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dc20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72  Index of the fir
1dc30 73 74 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  st index cursor 
1dc40 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1dc50 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1dc60 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1dc70 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c  ure contains all
1dc80 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
1dc90 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
1dca0 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69  te code for a si
1dcb0 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  ngle SELECT stat
1dcc0 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ement..**.** See
1dcd0 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
1dce0 65 6e 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75  ent on the compu
1dcf0 74 65 4c 69 6d 69 74 52 65 67 69 73 74 65 72 73  teLimitRegisters
1dd00 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 61  () routine for a
1dd10 0a 2a 2a 20 64 65 74 61 69 6c 65 64 20 64 65 73  .** detailed des
1dd20 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20  cription of the 
1dd30 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 69  meaning of the i
1dd40 4c 69 6d 69 74 20 61 6e 64 20 69 4f 66 66 73 65  Limit and iOffse
1dd50 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20  t fields..**.** 
1dd60 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65  addrOpenEphm[] e
1dd70 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74  ntries contain t
1dd80 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50  he address of OP
1dd90 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
1dda0 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65  pcodes..** These
1ddb0 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20   addresses must 
1ddc0 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61  be stored so tha
1ddd0 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b  t we can go back
1dde0 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20   and fill in.** 
1ddf0 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61  the P4_KEYINFO a
1de00 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73  nd P2 parameters
1de10 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72   later.  Neither
1de20 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72   the KeyInfo nor
1de30 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
1de40 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20  f columns in P2 
1de50 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20  can be computed 
1de60 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
1de70 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70  .** as the OP_Op
1de80 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69  enEphm instructi
1de90 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61  on is coded beca
1dea0 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67  use not.** enoug
1deb0 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
1dec0 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64  out the compound
1ded0 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20   query is known 
1dee0 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a  at that point..*
1def0 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f  * The KeyInfo fo
1df00 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30  r addrOpenTran[0
1df10 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69  ] and [1] contai
1df20 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ns collating seq
1df30 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68  uences.** for th
1df40 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54  e result set.  T
1df50 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1df60 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63  ddrOpenEphm[2] c
1df70 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1df80 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66  g.** sequences f
1df90 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1dfa0 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
1dfb0 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70  t Select {.  Exp
1dfc0 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1dfd0 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64      /* The field
1dfe0 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
1dff0 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1e000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1e010 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20  ne of: TK_UNION 
1e020 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53  TK_ALL TK_INTERS
1e030 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f  ECT TK_EXCEPT */
1e040 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63  .  LogEst nSelec
1e050 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  tRow;     /* Est
1e060 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
1e070 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
1e080 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20    u32 selFlags; 
1e090 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
1e0a0 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
1e0b0 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
1e0c0 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
1e0d0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
1e0e0 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
1e0f0 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
1e100 2a 2f 0a 20 20 75 33 32 20 73 65 6c 49 64 3b 20  */.  u32 selId; 
1e110 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
1e120 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72  nique identifier
1e130 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73   number for this
1e140 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74   SELECT */.  int
1e150 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
1e160 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
1e170 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
1e180 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
1e190 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ct */.  SrcList 
1e1a0 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
1e1b0 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
1e1c0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
1e1d0 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
1e1e0 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1e1f0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1e200 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
1e210 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
1e220 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1e230 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
1e240 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
1e250 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1e260 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1e270 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
1e280 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
1e290 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
1e2a0 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
1e2b0 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
1e2c0 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
1e2d0 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
1e2e0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1e2f0 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
1e300 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
1e310 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
1e320 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
1e330 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
1e340 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1e350 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1e360 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
1e370 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49             /* WI
1e380 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68  TH clause attach
1e390 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1e3a0 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23  t. Or NULL. */.#
1e3b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1e3c0 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20  IT_WINDOWFUNC.  
1e3d0 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20  Window *pWin;   
1e3e0 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
1e3f0 66 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  f window functio
1e400 6e 73 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a  ns */.  Window *
1e410 70 57 69 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f  pWinDefn;      /
1e420 2a 20 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  * List of named 
1e430 77 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f  window definitio
1e440 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ns */.#endif.};.
1e450 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
1e460 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74  alues for Select
1e470 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20  .selFlags.  The 
1e480 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e  "SF" prefix stan
1e490 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63  ds for.** "Selec
1e4a0 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56  t Flag"..**.** V
1e4b0 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1e4c0 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69   (all checked vi
1e4d0 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20  a assert()).**  
1e4e0 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20     SF_HasAgg    
1e4f0 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a   == NC_HasAgg.**
1e500 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67       SF_MinMaxAg
1e510 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41  g  == NC_MinMaxA
1e520 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  gg     == SQLITE
1e530 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20  _FUNC_MINMAX.** 
1e540 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69      SF_FixedLimi
1e550 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c  t == WHERE_USE_L
1e560 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT.*/.#define 
1e570 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
1e580 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75    0x00001  /* Ou
1e590 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
1e5a0 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
1e5b0 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20  ne SF_All       
1e5c0 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a       0x00002  /*
1e5d0 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c   Includes the AL
1e5e0 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  L keyword */.#de
1e5f0 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64  fine SF_Resolved
1e600 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20         0x00004  
1e610 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68  /* Identifiers h
1e620 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
1e630 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1e640 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30  Aggregate      0
1e650 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61  x00008  /* Conta
1e660 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e  ins agg function
1e670 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
1e680 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
1e690 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30  sAgg         0x0
1e6a0 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0010  /* Contain
1e6b0 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
1e6c0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
1e6d0 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
1e6e0 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55  l  0x00020  /* U
1e6f0 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
1e700 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
1e710 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
1e720 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34  ded       0x0004
1e730 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
1e740 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
1e750 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
1e760 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
1e770 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20  Info    0x00080 
1e780 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
1e790 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
1e7a0 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  etadata */.#defi
1e7b0 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20  ne SF_Compound  
1e7c0 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a       0x00100  /*
1e7d0 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f   Part of a compo
1e7e0 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65  und query */.#de
1e7f0 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20  fine SF_Values  
1e800 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20         0x00200  
1e810 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66  /* Synthesized f
1e820 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73  rom VALUES claus
1e830 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1e840 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30  MultiValue     0
1e850 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c  x00400  /* Singl
1e860 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69  e VALUES term wi
1e870 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
1e880 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
1e890 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78  estedFrom     0x
1e8a0 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00800  /* Part o
1e8b0 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
1e8c0 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
1e8d0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d  .#define SF_MinM
1e8e0 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30  axAgg      0x010
1e8f0 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  00  /* Aggregate
1e900 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28   containing min(
1e910 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64  ) or max() */.#d
1e920 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69  efine SF_Recursi
1e930 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20  ve      0x02000 
1e940 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76   /* The recursiv
1e950 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75  e part of a recu
1e960 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65  rsive CTE */.#de
1e970 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d  fine SF_FixedLim
1e980 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20  it     0x04000  
1e990 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65  /* nSelectRow se
1e9a0 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20  t by a constant 
1e9b0 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT */.#define
1e9c0 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
1e9d0 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e     0x08000  /* N
1e9e0 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
1e9f0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1ea00 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1ea10 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20   SF_Converted   
1ea20 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42     0x10000  /* B
1ea30 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  y convertCompoun
1ea40 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1ea50 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1ea60 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20  F_IncludeHidden 
1ea70 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63   0x20000  /* Inc
1ea80 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  lude hidden colu
1ea90 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f  mns in output */
1eaa0 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
1eab0 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30  lexResult  0x400
1eac0 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f  00  /* Result co
1ead0 6e 74 61 69 6e 73 20 73 75 62 71 75 65 72 79 20  ntains subquery 
1eae0 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a  or function */..
1eaf0 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
1eb00 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61  s of a SELECT ca
1eb10 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
1eb20 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1eb30 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  , as defined.** 
1eb40 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  by one of the fo
1eb50 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20  llowing macros. 
1eb60 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69   The "SRT" prefi
1eb70 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
1eb80 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e  Result.** Type".
1eb90 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55  .**.**     SRT_U
1eba0 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65  nion       Store
1ebb0 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65   results as a ke
1ebc0 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  y in a temporary
1ebd0 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20   index.**       
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64                id
1ebf0 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73  entified by pDes
1ec00 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1ec10 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74  *     SRT_Except
1ec20 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73        Remove res
1ec30 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65  ults from the te
1ec40 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44  mporary index pD
1ec50 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1ec60 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73  .**     SRT_Exis
1ec70 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20  ts      Store a 
1ec80 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 in memory cell
1ec90 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1eca0 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  if the result.**
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecc0 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20       set is not 
1ecd0 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  empty..**.**    
1ece0 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1ecf0 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c   Throw the resul
1ed00 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69  ts away.  This i
1ed10 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54  s used by SELECT
1ed20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ed30 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
1ed40 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
1ed50 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75  rs whose only pu
1ed60 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20  rpose is.**     
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed80 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73  the side-effects
1ed90 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a   of functions..*
1eda0 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20  *.** All of the 
1edb0 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74  above are free t
1edc0 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f  o ignore their O
1edd0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20  RDER BY clause. 
1ede0 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f  Those that.** fo
1edf0 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20  llow must honor 
1ee00 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1ee10 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1ee20 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47  RT_Output      G
1ee30 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66  enerate a row of
1ee40 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74   output (using t
1ee50 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a  he OP_ResultRow.
1ee60 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ee70 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66         opcode) f
1ee80 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
1ee90 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a  he result set..*
1eea0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d  *.**     SRT_Mem
1eeb0 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61           Only va
1eec0 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  lid if the resul
1eed0 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  t is a single co
1eee0 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20  lumn..**        
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f               Sto
1ef00 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c  re the first col
1ef10 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74  umn of the first
1ef20 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20   result row.**  
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef40 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70     in register p
1ef50 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68  Dest->iSDParm th
1ef60 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72  en abandon the r
1ef70 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  est.**          
1ef80 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
1ef90 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64  e query.  This d
1efa0 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69  estination impli
1efb0 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a  es "LIMIT 1"..**
1efc0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20  .**     SRT_Set 
1efd0 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75          The resu
1efe0 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e  lt must be a sin
1eff0 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f  gle column.  Sto
1f000 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20  re each.**      
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f020 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20  ow of result as 
1f030 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65  the key in table
1f040 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1f050 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f060 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68          Apply th
1f070 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74  e affinity pDest
1f080 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65  ->affSdst before
1f090 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20   storing.**     
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0b0 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74  results.  Used t
1f0c0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20  o implement "IN 
1f0d0 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a  (SELECT ...)"..*
1f0e0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68  *.**     SRT_Eph
1f0f0 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20  emTab    Create 
1f100 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  an temporary tab
1f110 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1f120 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20  m and store.**  
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f140 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68     the result th
1f150 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20  ere. The cursor 
1f160 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74  is left open aft
1f170 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  er.**           
1f180 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f190 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69  ing.  This is li
1f1a0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63  ke SRT_Table exc
1f1b0 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20  ept that.**     
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  this destination
1f1e0 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68   uses OP_OpenEph
1f1f0 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65  emeral to create
1f200 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f210 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c          the tabl
1f220 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  e first..**.**  
1f230 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65     SRT_Coroutine
1f240 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f     Generate a co
1f250 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65  -routine that re
1f260 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20  turns a new row 
1f270 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
1f280 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1f290 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69  s each time it i
1f2a0 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20  s invoked.  The 
1f2b0 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20  entry point.**  
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2d0 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75     of the co-rou
1f2e0 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69  tine is stored i
1f2f0 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1f300 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20  ->iSDParm.**    
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
1f330 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
1f340 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65   pDest->nDest re
1f350 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  gisters.**      
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f370 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65  tarting with pDe
1f380 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a  st->iSdst..**.**
1f390 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20       SRT_Table  
1f3a0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1f3b0 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ts in temporary 
1f3c0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f3d0 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54  Parm..**     SRT
1f3e0 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69  _Fifo        Thi
1f3f0 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70  s is like SRT_Ep
1f400 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68  hemTab except th
1f410 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  at the table.** 
1f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f430 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74      is assumed t
1f440 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65  o already be ope
1f450 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73  n.  SRT_Fifo has
1f460 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f470 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69          the addi
1f480 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20  tional property 
1f490 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  of being able to
1f4a0 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20   ignore.**      
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f4c0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1f4d0 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1f4e0 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74  T_DistFifo    St
1f4f0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ore results in a
1f500 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1f510 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1f520 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f530 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f          But also
1f540 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74   use temporary t
1f550 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1f560 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20  arm+1 as.**     
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20  a record of all 
1f590 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e  prior results an
1f5a0 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70  d ignore any dup
1f5b0 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  licate.**       
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1f5d0 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a  ws.  Name means:
1f5e0 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f    "Distinct Fifo
1f5f0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1f600 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f  _Queue       Sto
1f610 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1f620 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1f630 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61  st->iSDParm (rea
1f640 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  lly.**          
1f650 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e             an in
1f660 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20  dex).  Append a 
1f670 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1f680 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72  so that all entr
1f690 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ies.**          
1f6a0 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64             are d
1f6b0 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20  istinct..**.**  
1f6c0 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65     SRT_DistQueue
1f6d0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1f6e0 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1f6f0 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1f700 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20  m only if.**    
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64   the same record
1f730 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
1f740 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20  stored before.  
1f750 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  The.**          
1f760 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
1f770 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61   at pDest->iSDPa
1f780 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72  rm+1 hold all pr
1f790 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23  ior stores..*/.#
1f7a0 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
1f7b0 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
1f7c0 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
1f7d0 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1f7e0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
1f7f0 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
1f800 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
1f810 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
1f820 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1f830 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
1f840 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
1f850 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
1f860 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
1f870 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
1f880 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
1f890 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
1f8a0 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65   anywhere */.#de
1f8b0 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20  fine SRT_Fifo   
1f8c0 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72        5  /* Stor
1f8d0 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
1f8e0 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
1f8f0 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
1f900 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f  ine SRT_DistFifo
1f910 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20       6  /* Like 
1f920 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e  SRT_Fifo, but un
1f930 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1f940 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1f950 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20  _Queue        7 
1f960 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1f970 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a   in an queue */.
1f980 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1f990 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c  Queue    8  /* L
1f9a0 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62  ike SRT_Queue, b
1f9b0 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1f9c0 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68  s only */../* Th
1f9d0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1f9e0 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
1f9f0 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
1fa00 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
1fa10 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
1fa20 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
1fa30 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64  T_DistQueue)..#d
1fa40 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74  efine SRT_Output
1fa50 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74         9  /* Out
1fa60 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  put each row of 
1fa70 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1fa80 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20  e SRT_Mem       
1fa90 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72    10  /* Store r
1faa0 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72  esult in a memor
1fab0 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e  y cell */.#defin
1fac0 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20  e SRT_Set       
1fad0 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72    11  /* Store r
1fae0 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69  esults as keys i
1faf0 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1fb00 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
1fb10 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65  ab    12  /* Cre
1fb20 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
1fb30 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
1fb40 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
1fb50 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
1fb60 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e  ine   13  /* Gen
1fb70 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
1fb80 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1fb90 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c  #define SRT_Tabl
1fba0 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53  e       14  /* S
1fbb0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
1fbc0 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
1fbd0 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a  matic rowid */..
1fbe0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1fbf0 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
1fc00 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65   describes where
1fc10 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72   to put of the r
1fc20 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53  esults of.** a S
1fc30 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1fc40 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1fc50 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65  tDest {.  u8 eDe
1fc60 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
1fc70 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
1fc80 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
1fc90 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
1fca0 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ove. */.  int iS
1fcb0 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f  DParm;         /
1fcc0 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
1fcd0 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
1fce0 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
1fcf0 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
1fd00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
1fd10 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
1fd20 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
1fd30 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
1fd40 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1fd50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
1fd60 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
1fd70 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53  */.  char *zAffS
1fd80 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  dst;      /* Aff
1fd90 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
1fda0 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
1fdb0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1fdc0 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20  rderBy;  /* Key 
1fdd0 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f  columns for SRT_
1fde0 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69  Queue and SRT_Di
1fdf0 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f  stQueue */.};../
1fe00 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
1fe10 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
1fe20 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
1fe30 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
1fe40 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20  UTOINCREMENT.** 
1fe50 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
1fe60 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
1fe70 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
1fe80 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
1fe90 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
1fea0 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
1feb0 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
1fec0 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
1fed0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
1fee0 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
1fef0 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
1ff00 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
1ff10 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
1ff20 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
1ff30 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
1ff40 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65  inserts are done
1ff50 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1ff60 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
1ff70 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
1ff80 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
1ff90 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
1ffa0 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
1ffb0 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
1ffc0 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
1ffd0 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
1ffe0 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
1fff0 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
20000 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
20010 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
20020 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
20030 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
20040 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
20050 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
20060 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
20070 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
20080 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
20090 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
200a0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
200b0 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
200c0 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
200d0 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
200e0 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
200f0 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
20100 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
20110 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
20120 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65  .};../*.** At le
20130 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65  ast one instance
20140 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
20150 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63  g structure is c
20160 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a  reated for each.
20170 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
20180 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
20190 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
201a0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
201b0 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
201c0 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
201d0 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
201e0 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
201f0 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
20200 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
20210 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
20220 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
20230 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
20240 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
20250 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
20260 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
20270 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
20280 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
20290 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
202a0 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
202b0 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
202c0 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
202d0 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
202e0 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
202f0 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
20300 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
20310 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
20320 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
20330 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
20340 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
20350 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
20360 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
20370 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
20380 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
20390 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
203a0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
203b0 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
203c0 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
203d0 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
203e0 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
203f0 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
20400 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
20410 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
20420 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e  .** statements).
20430 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20   Similarly, the 
20440 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
20450 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20  ask[1] variable 
20460 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d  is set to.** a m
20470 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
20480 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65  umns used by the
20490 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72   program..*/.str
204a0 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b  uct TriggerPrg {
204b0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
204c0 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72  gger;      /* Tr
204d0 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72  igger this progr
204e0 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f  am was coded fro
204f0 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  m */.  TriggerPr
20500 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  g *pNext;      /
20510 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20  * Next entry in 
20520 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
20530 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50  g list */.  SubP
20540 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
20550 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69  ;   /* Program i
20560 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69  mplementing pTri
20570 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20  gger/orconf */. 
20580 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20   int orconf;    
20590 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
205a0 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
205b0 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20  policy */.  u32 
205c0 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20  aColmask[2];    
205d0 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20      /* Masks of 
205e0 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c  old.*, new.* col
205f0 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f  umns accessed */
20600 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79  .};../*.** The y
20610 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20  DbMask datatype 
20620 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20  for the bitmask 
20630 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
20640 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69  databases..*/.#i
20650 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
20660 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64  ACHED>30.  typed
20670 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  ef unsigned char
20680 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45   yDbMask[(SQLITE
20690 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29  _MAX_ATTACHED+9)
206a0 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  /8];.# define Db
206b0 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
206c0 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31   (((M)[(I)/8]&(1
206d0 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a  <<((I)&7)))!=0).
206e0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
206f0 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73  ero(M)      mems
20700 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28  et((M),0,sizeof(
20710 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  M)).# define DbM
20720 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
20730 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c  (M)[(I)/8]|=(1<<
20740 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e  ((I)&7)).# defin
20750 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
20760 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  M)   sqlite3DbMa
20770 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64  skAllZero(M).# d
20780 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
20790 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65  ero(M)   (sqlite
207a0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
207b0 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79  )==0).#else.  ty
207c0 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69  pedef unsigned i
207d0 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65  nt yDbMask;.# de
207e0 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
207f0 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28  M,I)    (((M)&((
20800 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
20810 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
20820 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
20830 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e     (M)=0.# defin
20840 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
20850 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62       (M)|=(((yDb
20860 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20  Mask)1)<<(I)).# 
20870 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
20880 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30  Zero(M)   (M)==0
20890 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
208a0 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  NonZero(M)   (M)
208b0 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  !=0.#endif../*.*
208c0 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20  * An SQL parser 
208d0 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79  context.  A copy
208e0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
208f0 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72  re is passed thr
20900 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  ough.** the pars
20910 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f  er and down into
20920 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20   all the parser 
20930 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69  action routine i
20940 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61  n order to.** ca
20950 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72  rry around infor
20960 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67  mation that is g
20970 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74  lobal to the ent
20980 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a  ire parse..**.**
20990 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69   The structure i
209a0 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74  s divided into t
209b0 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20  wo parts.  When 
209c0 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63  the parser and c
209d0 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20  ode.** generate 
209e0 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20  call themselves 
209f0 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65  recursively, the
20a00 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74   first part of t
20a10 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  he structure.** 
20a20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20  is constant but 
20a30 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20  the second part 
20a40 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20  is reset at the 
20a50 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e  beginning and en
20a60 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63  d of.** each rec
20a70 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ursion..**.** Th
20a80 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64  e nTableLock and
20a90 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69   aTableLock vari
20aa0 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75  ables are only u
20ab0 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65  sed if the share
20ac0 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75  d-cache.** featu
20ad0 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
20ae0 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
20af0 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
20b00 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
20b10 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
20b20 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
20b30 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
20b40 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
20b50 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
20b60 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
20b70 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
20b80 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
20b90 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
20ba0 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
20bb0 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
20bc0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
20bd0 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
20be0 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
20bf0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
20c00 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
20c10 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
20c20 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
20c30 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
20c40 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
20c50 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
20c60 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
20c70 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
20c80 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
20c90 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
20ca0 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
20cb0 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
20cc0 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
20cd0 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
20ce0 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
20cf0 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
20d00 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
20d10 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
20d20 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
20d30 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
20d40 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
20d50 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
20d60 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
20d70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
20d80 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
20d90 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
20da0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
20db0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
20dc0 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
20dd0 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
20de0 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
20df0 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
20e00 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
20e10 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
20e20 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
20e30 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
20e40 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
20e50 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
20e60 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
20e70 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
20e80 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
20e90 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
20ea0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
20eb0 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
20ec0 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
20ed0 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
20ee0 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
20ef0 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f  /.  u8 disableLo
20f00 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62  okaside; /* Numb
20f10 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b  er of times look
20f20 61 73 69 64 65 20 68 61 73 20 62 65 65 6e 20 64  aside has been d
20f30 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20  isabled */.  u8 
20f40 64 69 73 61 62 6c 65 56 74 61 62 3b 20 20 20 20  disableVtab;    
20f50 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 61 6c 6c    /* Disable all
20f60 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
20f70 66 6f 72 20 74 68 69 73 20 70 61 72 73 65 20 2a  for this parse *
20f80 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
20f90 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
20fa0 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
20fb0 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
20fc0 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
20fd0 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
20fe0 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
20ff0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
21000 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
21010 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
21020 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21030 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
21040 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
21050 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21060 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
21070 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
21080 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
21090 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
210a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
210b0 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
210c0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 73 7a   far */.  int sz
210d0 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f  OpAlloc;       /
210e0 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72  * Bytes of memor
210f0 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  y space allocate
21100 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
21110 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54   */.  int iSelfT
21120 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ab;        /* Ta
21130 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ble associated w
21140 69 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  ith an index on 
21150 65 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76  expr, or negativ
21160 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
21170 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74           ** of t
21180 68 65 20 62 61 73 65 20 72 65 67 69 73 74 65 72  he base register
21190 20 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f   during check-co
211a0 6e 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f  nstraint eval */
211b0 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
211c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 2a          /* The *
211d0 6e 65 67 61 74 69 76 65 2a 20 6f 66 20 74 68 65  negative* of the
211e0 20 6e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c   number of label
211f0 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20  s used */.  int 
21200 6e 4c 61 62 65 6c 41 6c 6c 6f 63 3b 20 20 20 20  nLabelAlloc;    
21210 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
21220 6f 74 73 20 69 6e 20 61 4c 61 62 65 6c 20 2a 2f  ots in aLabel */
21230 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
21240 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
21250 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
21260 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  els */.  ExprLis
21270 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
21280 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
21290 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
212a0 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
212b0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
212c0 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
212d0 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
212e0 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
212f0 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
21300 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
21310 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
21320 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
21330 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
21340 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
21350 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
21360 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
21370 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
21380 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
21390 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
213a0 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
213b0 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
213c0 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
213d0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
213e0 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
213f0 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
21400 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
21410 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
21420 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
21430 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
21440 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
21450 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c  am */.  int nSel
21460 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
21470 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
21480 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72 20   stmts. Counter 
21490 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49 64  for Select.selId
214a0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
214b0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
214c0 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c  ACHE.  int nTabl
214d0 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  eLock;        /*
214e0 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73   Number of locks
214f0 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a   in aTableLock *
21500 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61  /.  TableLock *a
21510 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65  TableLock; /* Re
21520 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63  quired table loc
21530 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  ks for shared-ca
21540 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64  che mode */.#end
21550 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f  if.  AutoincInfo
21560 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66   *pAinc;  /* Inf
21570 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41  ormation about A
21580 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75  UTOINCREMENT cou
21590 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65  nters */.  Parse
215a0 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20   *pToplevel;    
215b0 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75  /* Parse structu
215c0 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67  re for main prog
215d0 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f  ram (or NULL) */
215e0 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67  .  Table *pTrigg
215f0 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65  erTab;  /* Table
21600 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65   triggers are be
21610 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f  ing coded for */
21620 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 65 6e  .  Parse *pParen
21630 74 50 61 72 73 65 3b 20 2f 2a 20 50 61 72 65 6e  tParse; /* Paren
21640 74 20 70 61 72 73 65 72 20 69 66 20 74 68 69 73  t parser if this
21650 20 70 61 72 73 65 72 20 69 73 20 6e 65 73 74 65   parser is neste
21660 64 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  d */.  int addrC
21670 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41  rTab;       /* A
21680 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65  ddress of OP_Cre
21690 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20  ateBtree opcode 
216a0 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  on CREATE TABLE 
216b0 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c  */.  u32 nQueryL
216c0 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74  oop;      /* Est
216d0 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61   number of itera
216e0 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79  tions of a query
216f0 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f   (10*log2(N)) */
21700 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20  .  u32 oldmask; 
21710 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
21720 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
21730 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
21740 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20   u32 newmask;   
21750 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
21760 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   new.* columns r
21770 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
21780 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20  8 eTriggerOp;   
21790 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45      /* TK_UPDATE
217a0 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54  , TK_INSERT or T
217b0 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38  K_DELETE */.  u8
217c0 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20   eOrconf;       
217d0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
217e0 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
217f0 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65   for trigger ste
21800 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ps */.  u8 disab
21810 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20  leTriggers;  /* 
21820 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20  True to disable 
21830 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f  triggers */..  /
21840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
21890 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73  Fields above mus
218a0 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
218b0 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66   to zero.  The f
218c0 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f  ields that follo
218d0 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20  w,.  ** down to 
218e0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
218f0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73   the recursive s
21900 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e  ection, do not n
21910 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69  eed to be.  ** i
21920 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68  nitialized as th
21930 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62  ey will be set b
21940 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64  efore being used
21950 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
21960 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e  is.  ** determin
21970 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50  ed by offsetof(P
21980 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a  arse,aTempReg)..
21990 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
219a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
219b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
219c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
219d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
219e0 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d   int aTempReg[8]
219f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64  ;        /* Hold
21a00 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
21a10 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
21a20 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d   */.  Token sNam
21a30 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  eToken;       /*
21a40 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
21a50 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
21a60 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20  bject name */.. 
21a70 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
21a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21aa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
21ac0 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e  Above is constan
21ad0 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73  t between recurs
21ae0 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20  ions.  Below is 
21af0 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64  reset before and
21b00 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68   after.  ** each
21b10 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65   recursion.  The
21b20 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65   boundary betwee
21b30 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69  n these two regi
21b40 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ons is determine
21b50 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66  d.  ** using off
21b60 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73  setof(Parse,sLas
21b70 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20 73  tToken) so the s
21b80 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20  LastToken field 
21b90 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a 2a  must be the.  **
21ba0 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20   first field in 
21bb0 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65  the recursive re
21bc0 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  gion..  ********
21bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21c10 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  /..  Token sLast
21c20 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20  Token;       /* 
21c30 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70  The last token p
21c40 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72  arsed */.  ynVar
21c50 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20   nVar;          
21c60 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21c70 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
21c80 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
21c90 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 69  so far */.  u8 i
21ca0 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  PkSortOrder;    
21cb0 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20        /* ASC or 
21cc0 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52  DESC for INTEGER
21cd0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
21ce0 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20    u8 explain;   
21cf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
21d00 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41  rue if the EXPLA
21d10 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64  IN flag is found
21d20 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f   on the query */
21d30 0a 23 69 66 20 21 28 64 65 66 69 6e 65 64 28 53  .#if !(defined(S
21d40 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21d50 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69  ALTABLE) && defi
21d60 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21d70 41 4c 54 45 52 54 41 42 4c 45 29 29 0a 20 20 75  ALTERTABLE)).  u
21d80 38 20 65 50 61 72 73 65 4d 6f 64 65 3b 20 20 20  8 eParseMode;   
21d90 20 20 20 20 20 20 20 20 20 2f 2a 20 50 41 52 53           /* PARS
21da0 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74  E_MODE_XXX const
21db0 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ant */.#endif.#i
21dc0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21dd0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
21de0 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20   int nVtabLock; 
21df0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
21e00 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
21e10 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a  tables to lock *
21e20 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e  /.#endif.  int n
21e30 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
21e40 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
21e50 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
21e60 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
21e70 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
21e80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
21e90 41 49 4e 0a 20 20 69 6e 74 20 61 64 64 72 45 78  AIN.  int addrEx
21ea0 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20  plain;          
21eb0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 63 75  /* Address of cu
21ec0 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e  rrent OP_Explain
21ed0 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
21ee0 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73  f.  VList *pVLis
21ef0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
21f00 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e   Mapping between
21f10 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20   variable names 
21f20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20  and numbers */. 
21f30 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
21f40 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
21f50 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
21f60 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
21f70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
21f80 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
21f90 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
21fa0 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
21fb0 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
21fc0 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
21fd0 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
21fe0 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
21ff0 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
22000 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
22010 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
22020 77 49 6e 64 65 78 3b 20 20 20 20 20 20 20 20 20  wIndex;         
22030 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62 65 69 6e  /* An index bein
22040 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
22050 20 43 52 45 41 54 45 20 49 4e 44 45 58 2e 0a 20   CREATE INDEX.. 
22060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22070 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 6c             ** Al
22080 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  so used to hold 
22090 72 65 64 75 6e 64 61 6e 74 20 55 4e 49 51 55 45  redundant UNIQUE
220a0 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20 20   constraints.   
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220c0 20 20 20 20 20 20 20 20 20 2a 2a 20 64 75 72 69           ** duri
220d0 6e 67 20 61 20 52 45 4e 41 4d 45 20 43 4f 4c 55  ng a RENAME COLU
220e0 4d 4e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  MN */.  Trigger 
220f0 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
22100 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
22110 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
22120 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
22130 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
22140 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
22150 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
22160 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
22170 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23  h callbacks */.#
22180 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22190 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
221a0 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
221b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
221c0 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
221d0 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
221e0 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
221f0 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
22200 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
22210 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
22220 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
22230 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
22240 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
22250 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
22260 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
22270 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
22280 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
22290 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
222a0 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
222b0 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
222c0 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
222d0 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
222e0 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
222f0 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
22300 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a  NULL */.  With *
22310 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20  pWithToFree;    
22320 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73      /* Free this
22330 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20   WITH object at 
22340 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
22350 61 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20  arse */.#ifndef 
22360 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
22370 52 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54  RTABLE.  RenameT
22380 6f 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20  oken *pRename;  
22390 20 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62     /* Tokens sub
223a0 6a 65 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67  ject to renaming
223b0 20 62 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20   by ALTER TABLE 
223c0 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64  */.#endif.};..#d
223d0 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
223e0 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 30  _NORMAL        0
223f0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d  .#define PARSE_M
22400 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42  ODE_DECLARE_VTAB
22410 20 20 31 0a 23 64 65 66 69 6e 65 20 50 41 52 53    1.#define PARS
22420 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f  E_MODE_RENAME_CO
22430 4c 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20 50  LUMN 2.#define P
22440 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45  ARSE_MODE_RENAME
22450 5f 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a  _TABLE  3../*.**
22460 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74   Sizes and point
22470 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70  ers of various p
22480 61 72 74 73 20 6f 66 20 74 68 65 20 50 61 72 73  arts of the Pars
22490 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65  e object..*/.#de
224a0 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53  fine PARSE_HDR_S
224b0 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  Z offsetof(Parse
224c0 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a 20 52 65  ,aTempReg) /* Re
224d0 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f  cursive part w/o
224e0 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65   aColCache*/.#de
224f0 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52  fine PARSE_RECUR
22500 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50  SE_SZ offsetof(P
22510 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29  arse,sLastToken)
22520 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65      /* Recursive
22530 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
22540 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28   PARSE_TAIL_SZ (
22550 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41  sizeof(Parse)-PA
22560 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
22570 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65  /* Non-recursive
22580 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
22590 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28   PARSE_TAIL(X) (
225a0 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52  ((char*)(X))+PAR
225b0 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20  SE_RECURSE_SZ)  
225c0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61  /* Pointer to ta
225d0 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  il */../*.** Ret
225e0 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
225f0 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
22600 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
22610 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
22620 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
22630 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
22640 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
22650 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
22660 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
22670 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
22680 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d  rse->eParseMode=
22690 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c  =PARSE_MODE_DECL
226a0 41 52 45 5f 56 54 41 42 29 0a 23 65 6e 64 69 66  ARE_VTAB).#endif
226b0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
226c0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
226d0 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20  ABLE).  #define 
226e0 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54  IN_RENAME_OBJECT
226f0 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
22700 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a  ne IN_RENAME_OBJ
22710 45 43 54 20 28 70 50 61 72 73 65 2d 3e 65 50 61  ECT (pParse->ePa
22720 72 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d  rseMode>=PARSE_M
22730 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d  ODE_RENAME_COLUM
22740 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  N).#endif..#if d
22750 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22760 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
22770 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
22780 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
22790 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  LE).  #define IN
227a0 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20 30  _SPECIAL_PARSE 0
227b0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
227c0 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53   IN_SPECIAL_PARS
227d0 45 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73  E (pParse->ePars
227e0 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44  eMode!=PARSE_MOD
227f0 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66  E_NORMAL).#endif
22800 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
22810 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
22820 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
22830 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
22840 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
22850 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
22860 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
22870 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
22880 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
22890 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
228a0 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
228b0 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
228c0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
228d0 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
228e0 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
228f0 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
22900 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
22910 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
22920 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
22930 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
22940 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
22950 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
22960 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a  ous opcodes..**.
22970 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
22980 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
22990 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
229a0 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54      OPFLAG_LENGT
229b0 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  HARG    == SQLIT
229c0 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a  E_FUNC_LENGTH.**
229d0 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f      OPFLAG_TYPEO
229e0 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  FARG    == SQLIT
229f0 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a  E_FUNC_TYPEOF.**
22a00 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43      OPFLAG_BULKC
22a10 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45  SR      == BTREE
22a20 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20  _BULKLOAD.**    
22a30 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
22a40 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45      == BTREE_SEE
22a50 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  K_EQ.**    OPFLA
22a60 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d  G_FORDELETE    =
22a70 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  = BTREE_FORDELET
22a80 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  E.**    OPFLAG_S
22a90 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42  AVEPOSITION == B
22aa0 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f  TREE_SAVEPOSITIO
22ab0 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41  N.**    OPFLAG_A
22ac0 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  UXDELETE    == B
22ad0 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a  TREE_AUXDELETE.*
22ae0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22af0 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
22b00 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73  x01    /* OP_Ins
22b10 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61  ert: Set to upda
22b20 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
22b30 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
22b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b50 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75         /* Also u
22b60 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50  sed in P2 (not P
22b70 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20  5) of OP_Delete 
22b80 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22b90 47 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20 20 20  G_NOCHNG        
22ba0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43  0x01    /* OP_VC
22bb0 6f 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66  olumn nochange f
22bc0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
22bd0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45  fine OPFLAG_EPHE
22be0 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20  M         0x01  
22bf0 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20    /* OP_Column: 
22c00 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74  Ephemeral output
22c10 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e   is ok */.#defin
22c20 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
22c30 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20 2f  ID     0x20    /
22c40 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
22c50 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f  db->lastRowid */
22c60 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22c70 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78  ISUPDATE      0x
22c80 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50  04    /* This OP
22c90 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71  _Insert is an sq
22ca0 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  l UPDATE */.#def
22cb0 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  ine OPFLAG_APPEN
22cc0 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20  D        0x08   
22cd0 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65   /* This is like
22ce0 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
22cf0 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  nd */.#define OP
22d00 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
22d10 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72  LT 0x10    /* Tr
22d20 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65  y to avoid a see
22d30 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74  k in BtreeInsert
22d40 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
22d50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20  FLAG_ISNOOP     
22d60 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
22d70 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65  _Delete does pre
22d80 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c  -update-hook onl
22d90 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
22da0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
22db0 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
22dc0 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
22dd0 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
22de0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
22df0 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
22e00 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
22e10 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
22e20 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
22e30 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
22e40 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
22e50 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
22e60 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
22e70 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
22e80 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  ne OPFLAG_SEEKEQ
22e90 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20          0x02    
22ea0 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72  /* OP_Open** cur
22eb0 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b  sor uses EQ seek
22ec0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
22ed0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
22ee0 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a  E     0x08    /*
22ef0 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20   OP_Open should 
22f00 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c  use BTREE_FORDEL
22f10 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE */.#define O
22f20 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20  PFLAG_P2ISREG   
22f30 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50      0x10    /* P
22f40 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69  2 to OP_Open** i
22f50 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d  s a register num
22f60 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ber */.#define O
22f70 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20  PFLAG_PERMUTE   
22f80 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
22f90 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74  P_Compare: use t
22fa0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
22fb0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22fc0 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30  _SAVEPOSITION  0
22fd0 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x02    /* OP_Del
22fe0 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65  ete/Insert: save
22ff0 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23   cursor pos */.#
23000 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55  define OPFLAG_AU
23010 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34  XDELETE     0x04
23020 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
23030 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c  : index in a DEL
23040 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e  ETE op */.#defin
23050 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f  e OPFLAG_NOCHNG_
23060 4d 41 47 49 43 20 20 30 78 36 64 20 20 20 20 2f  MAGIC  0x6d    /
23070 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a  * OP_MakeRecord:
23080 20 73 65 72 69 61 6c 74 79 70 65 20 31 30 20 69   serialtype 10 i
23090 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  s ok */../*. * E
230a0 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
230b0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
230c0 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
230d0 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
230e0 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
230f0 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20   Trigger.. *. * 
23100 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
23110 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
23120 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
23130 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
23140 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
23150 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
23160 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
23170 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
23180 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20  presents the. * 
23190 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
231a0 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
231b0 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
231c0 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
231d0 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
231e0 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
231f0 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
23200 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
23210 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
23220 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
23230 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
23240 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
23250 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
23260 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
23270 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
23280 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
23290 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
232a0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
232b0 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
232c0 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
232d0 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
232e0 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
232f0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
23300 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
23310 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
23320 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
23330 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
23340 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
23350 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
23360 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
23370 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
23380 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
23390 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
233a0 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
233b0 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
233c0 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
233d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
233e0 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
233f0 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
23400 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
23410 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
23420 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
23430 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
23440 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
23450 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
23460 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
23470 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
23480 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
23490 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
234a0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
234b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
234c0 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
234d0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
234e0 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
234f0 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
23500 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
23510 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
23520 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
23530 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23550 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
23560 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
23570 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
23580 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
23590 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
235a0 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
235b0 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
235c0 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
235d0 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
235e0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
235f0 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
23600 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
23610 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
23620 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
23630 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
23640 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
23650 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
23660 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
23670 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
23680 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
23690 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
236a0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
236b0 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
236c0 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
236d0 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
236e0 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
236f0 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  which..**.** If 
23700 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
23710 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
23720 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
23730 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
23740 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
23750 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
23760 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
23770 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
23780 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
23790 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
237a0 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
237b0 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
237c0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
237d0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
237e0 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
237f0 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
23800 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
23810 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
23820 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
23830 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65  .. *. * Instance
23840 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
23850 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
23860 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
23870 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
23880 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
23890 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
238a0 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
238b0 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
238c0 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61  mber of the. * a
238d0 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
238e0 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
238f0 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
23900 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
23910 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
23920 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
23930 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
23940 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ram.. *. * The "
23950 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63  op" member indic
23960 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69  ates whether thi
23970 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c  s is a "DELETE",
23980 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41   "INSERT", "UPDA
23990 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43  TE" or. * "SELEC
239a0 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  T" statement. Th
239b0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
239c0 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20  e other members 
239d0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
239e0 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66   the. * value of
239f0 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
23a00 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
23a10 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
23a20 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
23a30 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
23a40 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
23a50 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
23a60 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
23a70 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
23a80 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
23a90 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
23aa0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
23ab0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
23ac0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
23ad0 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
23ae0 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  L.. * zTarget   
23af0 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
23b00 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
23b10 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
23b20 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
23b30 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
23b40 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
23b50 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
23b60 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
23b70 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
23b80 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
23b90 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
23ba0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
23bb0 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
23bc0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
23bd0 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
23be0 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
23bf0 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .... *          
23c00 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
23c10 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
23c20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
23c30 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
23c40 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
23c50 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
23c60 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
23c70 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
23c80 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
23c90 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
23ca0 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
23cb0 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
23cc0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
23cd0 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
23ce0 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
23cf0 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
23d00 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
23d10 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70   NULL.. *. * (op
23d20 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20   == TK_UPDATE). 
23d30 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
23d40 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
23d50 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
23d60 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  ate.. * pWhere  
23d70 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
23d80 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44  lause of the UPD
23d90 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ATE statement if
23da0 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
23db0 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
23dc0 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
23dd0 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  L.. * pExprList 
23de0 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65  -> A list of the
23df0 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61   columns to upda
23e00 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65  te and the expre
23e10 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65  ssions to update
23e20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
23e30 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71   them to. See sq
23e40 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f  lite3Update() do
23e50 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22  cumentation of "
23e60 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20  pChanges". *    
23e70 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
23e80 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63  nt.. *. */.struc
23e90 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
23ea0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
23eb0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
23ec0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
23ed0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
23ee0 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
23ef0 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
23f00 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
23f10 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
23f20 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
23f30 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
23f40 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
23f50 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
23f60 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
23f70 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
23f80 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  CT statement or 
23f90 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
23fa0 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  TO SELECT ... */
23fb0 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74  .  char *zTarget
23fc0 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65  ;       /* Targe
23fd0 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
23fe0 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
23ff0 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
24000 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
24010 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
24020 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
24030 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
24040 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
24050 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
24060 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a  use for UPDATE *
24070 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
24080 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
24090 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
240a0 45 52 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20  ERT */.  Upsert 
240b0 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a  *pUpsert;     /*
240c0 20 55 70 73 65 72 74 20 63 6c 61 75 73 65 73 20   Upsert clauses 
240d0 6f 6e 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a  on an INSERT */.
240e0 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
240f0 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e         /* Origin
24100 61 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74  al SQL text of t
24110 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
24120 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e   TriggerStep *pN
24130 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e  ext;  /* Next in
24140 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a   the link-list *
24150 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
24160 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74  *pLast;  /* Last
24170 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b   element in link
24180 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72  -list. Valid for
24190 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a   1st elem only *
241a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
241b0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
241c0 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
241d0 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
241e0 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
241f0 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
24200 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
24210 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
24220 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
24230 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
24240 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  t..*/.typedef st
24250 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46  ruct DbFixer DbF
24260 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46  ixer;.struct DbF
24270 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  ixer {.  Parse *
24280 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20  pParse;      /* 
24290 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74  The parsing cont
242a0 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73  ext.  Error mess
242b0 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72  ages written her
242c0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
242d0 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69  Schema;    /* Fi
242e0 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20  x items to this 
242f0 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
24300 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20  bVarOnly;       
24310 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72  /* Check for var
24320 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  iable references
24330 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74   only */.  const
24340 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
24350 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
24360 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
24370 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
24380 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
24390 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
243a0 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
243b0 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
243c0 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
243d0 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
243e0 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
243f0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
24400 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
24410 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
24420 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
24430 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
24440 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
24450 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
24460 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
24470 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
24480 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
24490 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
244a0 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
244b0 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72  ruct sqlite3_str
244c0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
244d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74  ;         /* Opt
244e0 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ional database f
244f0 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43  or lookaside.  C
24500 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  an be NULL */.  
24510 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
24520 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
24530 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
24540 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41  far */.  u32  nA
24550 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  lloc;         /*
24560 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65   Amount of space
24570 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54   allocated in zT
24580 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78  ext */.  u32  mx
24590 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
245a0 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64   Maximum allowed
245b0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20   allocation.  0 
245c0 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73  for no malloc us
245d0 61 67 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43  age */.  u32  nC
245e0 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
245f0 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
24600 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
24610 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b    u8   accError;
24620 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
24630 5f 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45  _NOMEM or SQLITE
24640 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20  _TOOBIG */.  u8 
24650 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20    printfFlags;  
24660 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e    /* SQLITE_PRIN
24670 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a  TF flags below *
24680 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  /.};.#define SQL
24690 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52  ITE_PRINTF_INTER
246a0 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74  NAL 0x01  /* Int
246b0 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63  ernal-use-only c
246c0 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65  onverters allowe
246d0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
246e0 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55  ITE_PRINTF_SQLFU
246f0 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c  NC  0x02  /* SQL
24700 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
24710 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20  nts to VXPrintf 
24720 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
24730 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
24740 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20  D 0x04  /* True 
24750 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f  if xText is allo
24760 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a  cated space */..
24770 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63  #define isMalloc
24780 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72  ed(X)  (((X)->pr
24790 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49  intfFlags & SQLI
247a0 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
247b0 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20  ED)!=0).../*.** 
247c0 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
247d0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
247e0 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
247f0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
24800 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
24810 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
24820 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
24830 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
24840 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
24850 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
24860 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
24870 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
24880 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
24890 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
248a0 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
248b0 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
248c0 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
248d0 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
248e0 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
248f0 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
24900 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
24910 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
24920 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
24930 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
24940 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33  red here */.  u3
24950 32 20 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20  2 mInitFlags;   
24960 20 20 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72    /* Flags contr
24970 6f 6c 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73  olling error mes
24980 73 61 67 65 73 20 2a 2f 0a 20 20 75 33 32 20 6e  sages */.  u32 n
24990 49 6e 69 74 52 6f 77 3b 20 20 20 20 20 20 20 2f  InitRow;       /
249a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  * Number of rows
249b0 20 70 72 6f 63 65 73 73 65 64 20 2a 2f 0a 7d 20   processed */.} 
249c0 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
249d0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
249e0 66 6f 72 20 6d 49 6e 69 74 46 6c 61 67 73 0a 2a  for mInitFlags.*
249f0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 49 54 46 4c  /.#define INITFL
24a00 41 47 5f 41 6c 74 65 72 54 61 62 6c 65 20 20 20  AG_AlterTable   
24a10 30 78 30 30 30 31 20 20 2f 2a 20 54 68 69 73 20  0x0001  /* This 
24a20 69 73 20 61 20 72 65 70 61 72 73 65 20 61 66 74  is a reparse aft
24a30 65 72 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a  er ALTER TABLE *
24a40 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  /../*.** Structu
24a50 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
24a60 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
24a70 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
24a80 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
24a90 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
24aa0 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
24ab0 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
24ac0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
24ad0 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
24ae0 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
24af0 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
24b00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24b10 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
24b20 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e  y status */.  in
24b30 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  t bCoreMutex;   
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b50 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
24b60 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
24b70 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75  */.  int bFullMu
24b80 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
24b90 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
24ba0 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
24bb0 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
24bc0 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20  bOpenUri;       
24bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24be0 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72   True to interpr
24bf0 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20  et filenames as 
24c00 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55  URIs */.  int bU
24c10 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20  seCis;          
24c20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
24c30 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69  se covering indi
24c40 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61  ces for full-sca
24c50 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d 61  ns */.  int bSma
24c60 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20  llMalloc;       
24c70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 6f            /* Avo
24c80 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20  id large memory 
24c90 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20 74  allocations if t
24ca0 72 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  rue */.  int mxS
24cb0 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
24cc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
24cd0 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
24ce0 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
24cf0 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
24d00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
24d10 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
24d20 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
24d30 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
24d40 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24d50 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
24d60 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
24d70 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
24d80 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
24d90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
24da0 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
24db0 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
24dc0 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c  .  int nStmtSpil
24dd0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
24de0 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75       /* Stmt-jou
24df0 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69  rnal spill-to-di
24e00 73 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a  sk threshold */.
24e10 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65    sqlite3_mem_me
24e20 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20  thods m;        
24e30 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
24e40 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
24e50 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  on interface */.
24e60 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
24e70 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20  methods mutex;  
24e80 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
24e90 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65   mutex interface
24ea0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63   */.  sqlite3_pc
24eb0 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63  ache_methods2 pc
24ec0 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c  ache2;  /* Low-l
24ed0 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20  evel page-cache 
24ee0 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76  interface */.  v
24ef0 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20  oid *pHeap;     
24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f10 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65   /* Heap storage
24f20 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
24f30 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  nHeap;          
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24f50 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d   Size of pHeap[]
24f60 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c   */.  int mnReq,
24f70 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20   mxReq;         
24f80 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61          /* Min a
24f90 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75  nd max heap requ
24fa0 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ests sizes */.  
24fb0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
24fc0 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
24fd0 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63    /* mmap() spac
24fe0 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20  e per open file 
24ff0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
25000 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
25010 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
25020 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d  m value for szMm
25030 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ap */.  void *pP
25040 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
25050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
25060 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
25070 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25090 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
250a0 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
250b0 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
250c0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
250e0 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
250f0 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
25100 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
25110 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
25120 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
25130 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
25140 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
25150 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
25160 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
25170 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
25180 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
25190 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d  ed */.  u32 szPm
251a0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
251b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
251c0 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20  imum Sorter PMA 
251d0 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  size */.  /* The
251e0 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
251f0 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
25200 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
25210 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
25220 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
25230 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
25240 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
25250 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25270 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
25280 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
25290 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
252a0 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
252b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252c0 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
252d0 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
252e0 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
252f0 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25310 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
25320 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
25330 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
25340 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25360 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
25370 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
25380 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
25390 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
253a0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
253b0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
253c0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
253d0 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
253e0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
253f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
25400 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
25410 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
25420 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
25430 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
25440 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
25450 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
25460 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
25470 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
25480 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
25490 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
254a0 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
254b0 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
254d0 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
254e0 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
254f0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25500 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
25510 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
25520 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
25530 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
25540 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
25550 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
25560 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
25570 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
25580 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
25590 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
255a0 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
255b0 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
255c0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
255d0 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
255e0 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
255f0 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
25600 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
25610 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
25620 69 64 2a 2c 75 6e 73 69 67 6e 65 64 20 69 53 72  id*,unsigned iSr
25630 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75  cLine,u8 eThis,u
25640 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c  8 eMx);  /* Call
25650 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
25660 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20  pVdbeBranchArg; 
25670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25690 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
256a0 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ent */.#endif.#i
256b0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
256c0 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 20  LE_DESERIALIZE. 
256d0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
256e0 78 4d 65 6d 64 62 53 69 7a 65 3b 20 20 20 20 20  xMemdbSize;     
256f0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 61     /* Default ma
25700 78 20 6d 65 6d 64 62 20 73 69 7a 65 20 2a 2f 0a  x memdb size */.
25710 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
25720 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
25730 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
25740 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
25750 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
25760 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
25770 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
25780 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
25790 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
257a0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
257b0 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
257c0 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 62 49  alls */.  int bI
257d0 6e 74 65 72 6e 61 6c 46 75 6e 63 74 69 6f 6e 73  nternalFunctions
257e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
257f0 6e 74 65 72 6e 61 6c 20 53 51 4c 20 66 75 6e 63  nternal SQL func
25800 74 69 6f 6e 73 20 61 72 65 20 76 69 73 69 62 6c  tions are visibl
25810 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65  e */.  int iOnce
25820 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20  ResetThreshold; 
25830 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e           /* When
25840 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63   to reset OP_Onc
25850 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  e counters */.  
25860 75 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b  u32 szSorterRef;
25870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25880 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e    /* Min size in
25890 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f   bytes to use so
258a0 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a  rter-refs */.};.
258b0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
258c0 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
258d0 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
258e0 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
258f0 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
25900 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
25910 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
25920 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
25930 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
25940 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
25950 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
25960 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
25970 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
25980 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
25990 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
259a0 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
259b0 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
259c0 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
259d0 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
259e0 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
259f0 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
25a00 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
25a10 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
25a20 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
25a30 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
25a40 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
25a50 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
25a60 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
25a70 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
25a80 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
25a90 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
25aa0 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
25ab0 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
25ac0 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
25ad0 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
25ae0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
25af0 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
25b00 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
25b10 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
25b20 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
25b30 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
25b40 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
25b50 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
25b60 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50  uct Walker {.  P
25b70 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
25b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b90 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
25ba0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
25bb0 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
25bc0 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
25bd0 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
25be0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
25bf0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
25c00 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
25c10 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
25c20 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
25c30 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
25c40 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
25c50 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
25c60 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
25c70 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
25c80 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
25c90 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
25ca0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
25cb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
25cc0 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
25cd0 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64  ies */.  u8 eCod
25ce0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d00 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72     /* A small pr
25d10 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f  ocessing code */
25d20 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
25d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25d50 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
25d60 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
25d70 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d90 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
25da0 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
25db0 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
25de0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20   counter */.    
25df0 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20  int iCur;       
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
25e20 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
25e30 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
25e40 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
25e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25e60 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
25e70 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
25e80 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25ea0 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
25eb0 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
25ec0 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69     struct CCurHi
25ed0 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20  nt *pCCurHint;  
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25ef0 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73  Used by codeCurs
25f00 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20  orHint() */.    
25f10 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20  int *aiCol;     
25f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72            /* arr
25f40 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64  ay of column ind
25f50 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  exes */.    stru
25f60 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64  ct IdxCover *pId
25f70 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20  xCover;         
25f80 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
25f90 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67  or index coverag
25fa0 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
25fb0 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49  IdxExprTrans *pI
25fc0 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  dxTrans;        
25fd0 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64     /* Convert id
25fe0 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75  xed expr to colu
25ff0 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  mn */.    ExprLi
26000 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26020 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20      /* GROUP BY 
26030 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53 65  clause */.    Se
26040 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
26050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26060 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e          /* HAVIN
26070 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73  G to WHERE claus
26080 65 20 63 74 78 20 2a 2f 0a 20 20 20 20 73 74 72  e ctx */.    str
26090 75 63 74 20 57 69 6e 64 6f 77 52 65 77 72 69 74  uct WindowRewrit
260a0 65 20 2a 70 52 65 77 72 69 74 65 3b 20 20 20 20  e *pRewrite;    
260b0 20 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f 77         /* Window
260c0 20 72 65 77 72 69 74 65 20 63 6f 6e 74 65 78 74   rewrite context
260d0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57   */.    struct W
260e0 68 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f 6e 73  hereConst *pCons
260f0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
26100 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
26110 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  e constants */. 
26120 20 20 20 73 74 72 75 63 74 20 52 65 6e 61 6d 65     struct Rename
26130 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20  Ctx *pRename;   
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
26150 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f  RENAME COLUMN co
26160 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a  ntext */.  } u;.
26170 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
26180 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
26190 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
261a0 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
261b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
261c0 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
261d0 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
261e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
261f0 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
26200 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
26210 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
26220 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
26230 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
26240 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
26250 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
26260 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
26270 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  xprWalkNoop(Walk
26280 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
26290 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
262a0 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
262b0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
262c0 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46  lite3SelectWalkF
262d0 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ail(Walker*, Sel
262e0 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  ect*);.#ifdef SQ
262f0 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20  LITE_DEBUG.void 
26300 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
26310 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a  kAssert2(Walker*
26320 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64  , Select*);.#end
26330 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
26340 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
26350 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
26360 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
26370 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
26380 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
26390 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
263a0 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
263b0 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
263c0 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
263d0 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
263e0 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
263f0 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
26400 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
26410 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
26420 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
26430 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
26440 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
26450 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
26460 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
26470 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
26480 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  t of one or more
26490 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e   CTEs.** (common
264a0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
264b0 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61  ns) created by a
264c0 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
264d0 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  use..*/.struct W
264e0 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65  ith {.  int nCte
264f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26500 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
26510 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65  r of CTEs in the
26520 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a   WITH clause */.
26530 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20    With *pOuter; 
26540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26550 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20    /* Containing 
26560 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
26570 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74  NULL */.  struct
26580 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20   Cte {          
26590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
265a0 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65   each CTE in the
265b0 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e   WITH clause....
265c0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
265d0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
265e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
265f0 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
26600 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f     ExprList *pCo
26610 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ls;             
26620 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78     /* List of ex
26630 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61  plicit column na
26640 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  mes, or NULL */.
26650 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
26660 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
26670 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e      /* The defin
26680 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54  ition of this CT
26690 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63  E */.    const c
266a0 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20  har *zCteErr;   
266b0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
266c0 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69  r message for ci
266d0 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65  rcular reference
266e0 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d  s */.  } a[1];.}
266f0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
26700 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20  _DEBUG./*.** An 
26710 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
26720 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20  TreeView object 
26730 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e  is used for prin
26740 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
26750 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75   of.** data stru
26760 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65  ctures on sqlite
26770 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75  3DebugPrintf() u
26780 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65  sing a tree-like
26790 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74   view..*/.struct
267a0 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e   TreeView {.  in
267b0 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
267c0 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c        /* Which l
267d0 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65  evel of the tree
267e0 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20   we are on */.  
267f0 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20  u8  bLine[100]; 
26800 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20          /* Draw 
26810 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75  vertical in colu
26820 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d  mn i if bLine[i]
26830 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23   is true */.};.#
26840 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
26850 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
26860 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 75  This object is u
26870 73 65 64 20 69 6e 20 76 61 72 69 6f 75 73 20 77  sed in various w
26880 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61 74 65 64  ays, all related
26890 20 74 6f 20 77 69 6e 64 6f 77 20 66 75 6e 63 74   to window funct
268a0 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29  ions.**.**   (1)
268b0 20 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   A single instan
268c0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
268d0 74 75 72 65 20 69 73 20 61 74 74 61 63 68 65 64  ture is attached
268e0 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20 20   to the.**      
268f0 20 74 68 65 20 45 78 70 72 2e 70 57 69 6e 20 66   the Expr.pWin f
26900 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77 69  ield for each wi
26910 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69 6e  ndow function in
26920 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74   an expression t
26930 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54 68  ree..**       Th
26940 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20  is object holds 
26950 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  the information 
26960 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
26970 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a 2a   OVER clause,.**
26980 20 20 20 20 20 20 20 70 6c 75 73 20 61 64 64 69         plus addi
26990 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 73  tional fields us
269a0 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20 67  ed during code g
269b0 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  eneration..**.**
269c0 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64 6f     (2) All windo
269d0 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 61  w functions in a
269e0 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 66   single SELECT f
269f0 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73  orm a linked-lis
26a00 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61 63  t.**       attac
26a10 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57  hed to Select.pW
26a20 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77 2e  in.  The Window.
26a30 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f 77  pFunc and Window
26a40 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20 20  .pExpr.**       
26a50 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61 63  fields point bac
26a60 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65 73 73  k to the express
26a70 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
26a80 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e  window function.
26a90 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68 65  .**.**   (3) The
26aa0 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57 49   terms of the WI
26ab0 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20 61  NDOW clause of a
26ac0 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73 74   SELECT are inst
26ad0 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a 2a  ances of this.**
26ae0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f 6e         object on
26af0 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 61   a linked list a
26b00 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63  ttached to Selec
26b10 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a  t.pWinDefn..**.*
26b20 2a 20 54 68 65 20 75 73 65 73 20 28 31 29 20 61  * The uses (1) a
26b30 6e 64 20 28 32 29 20 61 72 65 20 72 65 61 6c 6c  nd (2) are reall
26b40 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64 6f  y the same Windo
26b50 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a 75  w object that ju
26b60 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74 6f  st happens.** to
26b70 20 62 65 20 61 63 63 65 73 73 69 62 6c 65 20 69   be accessible i
26b80 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74 20  n two different 
26b90 77 61 79 73 2e 20 20 55 73 65 20 63 61 73 65 20  ways.  Use case 
26ba0 28 33 29 20 61 72 65 20 73 65 70 61 72 61 74 65  (3) are separate
26bb0 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
26bc0 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63  uct Window {.  c
26bd0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
26be0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
26bf0 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65  f window (may be
26c00 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 63 68 61 72   NULL) */.  char
26c10 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
26c20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 62      /* Name of b
26c30 61 73 65 20 77 69 6e 64 6f 77 20 66 6f 72 20 63  ase window for c
26c40 68 61 69 6e 69 6e 67 20 28 6d 61 79 20 62 65 20  haining (may be 
26c50 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c  NULL) */.  ExprL
26c60 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b  ist *pPartition;
26c70 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20     /* PARTITION 
26c80 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
26c90 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
26ca0 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52 20  y;     /* ORDER 
26cb0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  BY clause */.  u
26cc0 38 20 65 46 72 6d 54 79 70 65 3b 20 20 20 20 20  8 eFrmType;     
26cd0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e         /* TK_RAN
26ce0 47 45 2c 20 54 4b 5f 47 52 4f 55 50 53 2c 20 54  GE, TK_GROUPS, T
26cf0 4b 5f 52 4f 57 53 2c 20 6f 72 20 30 20 2a 2f 0a  K_ROWS, or 0 */.
26d00 20 20 75 38 20 65 53 74 61 72 74 3b 20 20 20 20    u8 eStart;    
26d10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e 42            /* UNB
26d20 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54 2c  OUNDED, CURRENT,
26d30 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46 4f   PRECEDING or FO
26d40 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38 20  LLOWING */.  u8 
26d50 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  eEnd;           
26d60 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44 45       /* UNBOUNDE
26d70 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45 43  D, CURRENT, PREC
26d80 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57 49  EDING or FOLLOWI
26d90 4e 47 20 2a 2f 0a 20 20 75 38 20 62 49 6d 70 6c  NG */.  u8 bImpl
26da0 69 63 69 74 46 72 61 6d 65 3b 20 20 20 20 20 20  icitFrame;      
26db0 2f 2a 20 54 72 75 65 20 69 66 20 66 72 61 6d 65  /* True if frame
26dc0 20 77 61 73 20 69 6d 70 6c 69 63 69 74 6c 79 20   was implicitly 
26dd0 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 20 20 75  specified */.  u
26de0 38 20 65 45 78 63 6c 75 64 65 3b 20 20 20 20 20  8 eExclude;     
26df0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 4e 4f 2c         /* TK_NO,
26e00 20 54 4b 5f 43 55 52 52 45 4e 54 2c 20 54 4b 5f   TK_CURRENT, TK_
26e10 54 49 45 53 2c 20 54 4b 5f 47 52 4f 55 50 2c 20  TIES, TK_GROUP, 
26e20 6f 72 20 30 20 2a 2f 0a 20 20 45 78 70 72 20 2a  or 0 */.  Expr *
26e30 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20  pStart;         
26e40 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
26e50 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43  for "<expr> PREC
26e60 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72  EDING" */.  Expr
26e70 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
26e80 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
26e90 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f  n for "<expr> FO
26ea0 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69  LLOWING" */.  Wi
26eb0 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20  ndow *pNextWin; 
26ec0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
26ed0 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62 65  ndow function be
26ee0 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69 73 20  longing to this 
26ef0 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70 72  SELECT */.  Expr
26f00 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20 20 20   *pFilter;      
26f10 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c 54 45      /* The FILTE
26f20 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  R expression */.
26f30 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
26f40 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
26f50 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69   function */.  i
26f60 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20 20 20  nt iEphCsr;     
26f70 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74 69 74         /* Partit
26f80 69 6f 6e 20 62 75 66 66 65 72 20 6f 72 20 50 65  ion buffer or Pe
26f90 65 72 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69  er buffer */.  i
26fa0 6e 74 20 72 65 67 41 63 63 75 6d 3b 0a 20 20 69  nt regAccum;.  i
26fb0 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 0a 20 20  nt regResult;.  
26fc0 69 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20 20  int csrApp;     
26fd0 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74          /* Funct
26fe0 69 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65 64  ion cursor (used
26ff0 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a   by min/max) */.
27000 20 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20 20    int regApp;   
27010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e            /* Fun
27020 63 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20 28  ction register (
27030 61 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69 6e  also used by min
27040 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72  /max) */.  int r
27050 65 67 50 61 72 74 3b 20 20 20 20 20 20 20 20 20  egPart;         
27060 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72     /* Array of r
27070 65 67 69 73 74 65 72 73 20 66 6f 72 20 50 41 52  egisters for PAR
27080 54 49 54 49 4f 4e 20 42 59 20 76 61 6c 75 65 73  TITION BY values
27090 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 77 6e   */.  Expr *pOwn
270a0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
270b0 20 45 78 70 72 65 73 73 69 6f 6e 20 6f 62 6a 65   Expression obje
270c0 63 74 20 74 68 69 73 20 77 69 6e 64 6f 77 20 69  ct this window i
270d0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 2a 2f  s attached to */
270e0 0a 20 20 69 6e 74 20 6e 42 75 66 66 65 72 43 6f  .  int nBufferCo
270f0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
27100 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
27110 69 6e 20 62 75 66 66 65 72 20 74 61 62 6c 65 20  in buffer table 
27120 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67 43 6f 6c  */.  int iArgCol
27130 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
27140 4f 66 66 73 65 74 20 6f 66 20 66 69 72 73 74 20  Offset of first 
27150 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 74 68 69  argument for thi
27160 73 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  s function */.  
27170 69 6e 74 20 72 65 67 4f 6e 65 3b 20 20 20 20 20  int regOne;     
27180 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
27190 74 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63  ter containing c
271a0 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65 20 31 20  onstant value 1 
271b0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 53 74 61 72  */.  int regStar
271c0 74 52 6f 77 69 64 3b 0a 20 20 69 6e 74 20 72 65  tRowid;.  int re
271d0 67 45 6e 64 52 6f 77 69 64 3b 0a 7d 3b 0a 0a 23  gEndRowid;.};..#
271e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
271f0 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 76 6f  IT_WINDOWFUNC.vo
27200 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
27210 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
27220 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20   Window*);.void 
27230 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69 73  sqlite3WindowLis
27240 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20  tDelete(sqlite3 
27250 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b  *db, Window *p);
27260 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33  .Window *sqlite3
27270 57 69 6e 64 6f 77 41 6c 6c 6f 63 28 50 61 72 73  WindowAlloc(Pars
27280 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 45 78  e*, int, int, Ex
27290 70 72 2a 2c 20 69 6e 74 20 2c 20 45 78 70 72 2a  pr*, int , Expr*
272a0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
272b0 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68 28  te3WindowAttach(
272c0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 57  Parse*, Expr*, W
272d0 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74 20 73 71 6c  indow*);.int sql
272e0 69 74 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61 72  ite3WindowCompar
272f0 65 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77  e(Parse*, Window
27300 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69  *, Window*);.voi
27310 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43  d sqlite3WindowC
27320 6f 64 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 20  odeInit(Parse*, 
27330 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73  Window*);.void s
27340 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64 65  qlite3WindowCode
27350 53 74 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Step(Parse*, Sel
27360 65 63 74 2a 2c 20 57 68 65 72 65 49 6e 66 6f 2a  ect*, WhereInfo*
27370 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
27380 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 52 65   sqlite3WindowRe
27390 77 72 69 74 65 28 50 61 72 73 65 2a 2c 20 53 65  write(Parse*, Se
273a0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
273b0 74 65 33 45 78 70 61 6e 64 53 75 62 71 75 65 72  te3ExpandSubquer
273c0 79 28 50 61 72 73 65 2a 2c 20 73 74 72 75 63 74  y(Parse*, struct
273d0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 2a 29 3b   SrcList_item*);
273e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
273f0 64 6f 77 55 70 64 61 74 65 28 50 61 72 73 65 2a  dowUpdate(Parse*
27400 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f  , Window*, Windo
27410 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 57  w*, FuncDef*);.W
27420 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69  indow *sqlite3Wi
27430 6e 64 6f 77 44 75 70 28 73 71 6c 69 74 65 33 20  ndowDup(sqlite3 
27440 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f 77 6e 65  *db, Expr *pOwne
27450 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57  r, Window *p);.W
27460 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69  indow *sqlite3Wi
27470 6e 64 6f 77 4c 69 73 74 44 75 70 28 73 71 6c 69  ndowListDup(sqli
27480 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20  te3 *db, Window 
27490 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *p);.void sqlite
274a0 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73  3WindowFunctions
274b0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
274c0 69 74 65 33 57 69 6e 64 6f 77 43 68 61 69 6e 28  ite3WindowChain(
274d0 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c  Parse*, Window*,
274e0 20 57 69 6e 64 6f 77 2a 29 3b 0a 57 69 6e 64 6f   Window*);.Windo
274f0 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  w *sqlite3Window
27500 41 73 73 65 6d 62 6c 65 28 50 61 72 73 65 2a 2c  Assemble(Parse*,
27510 20 57 69 6e 64 6f 77 2a 2c 20 45 78 70 72 4c 69   Window*, ExprLi
27520 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
27530 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23  Token*);.#else.#
27540 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57   define sqlite3W
27550 69 6e 64 6f 77 44 65 6c 65 74 65 28 61 2c 62 29  indowDelete(a,b)
27560 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27570 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e 73  3WindowFunctions
27580 28 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  ().# define sqli
27590 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68 28  te3WindowAttach(
275a0 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66 0a 0a 2f  a,b,c).#endif../
275b0 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49  *.** Assuming zI
275c0 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  n points to the 
275d0 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20  first byte of a 
275e0 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c  UTF-8 character,
275f0 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20  .** advance zIn 
27600 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
27610 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68  first byte of th
27620 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61  e next UTF-8 cha
27630 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  racter..*/.#defi
27640 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55  ne SQLITE_SKIP_U
27650 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20  TF8(zIn) {      
27660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27670 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e    \.  if( (*(zIn
27680 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20  ++))>=0xc0 ){   
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276a0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
276b0 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20   while( (*zIn & 
276c0 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a  0xc0)==0x80 ){ z
276d0 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20  In++; }         
276e0 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20      \.  }       
276f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27710 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d               \.}
27720 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
27730 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73  TE_*_BKPT macros
27740 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73   are substitutes
27750 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63   for the error c
27760 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65  odes with.** the
27770 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77   same name but w
27780 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54  ithout the _BKPT
27790 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20   suffix.  These 
277a0 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a  macros invoke.**
277b0 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72   routines that r
277c0 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e  eport the line-n
277d0 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74  umber on which t
277e0 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61  he error origina
277f0 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c  ted.** using sql
27800 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65  ite3_log().  The
27810 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70   routines also p
27820 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69  rovide a conveni
27830 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20  ent place.** to 
27840 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62  set a debugger b
27850 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e  reakpoint..*/.in
27860 74 20 73 71 6c 69 74 65 33 52 65 70 6f 72 74 45  t sqlite3ReportE
27870 72 72 6f 72 28 69 6e 74 20 69 45 72 72 2c 20 69  rror(int iErr, i
27880 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74  nt lineno, const
27890 20 63 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69   char *zType);.i
278a0 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
278b0 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
278c0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
278d0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
278e0 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
278f0 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
27900 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
27910 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
27920 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
27930 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
27940 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
27950 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
27960 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
27970 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
27980 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
27990 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
279a0 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51  INE__).#ifdef SQ
279b0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74  LITE_DEBUG.  int
279c0 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
279d0 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
279e0 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
279f0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
27a00 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
27a10 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67  PgnoError(int,Pg
27a20 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51  no);.# define SQ
27a30 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  LITE_NOMEM_BKPT 
27a40 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f  sqlite3NomemErro
27a50 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65  r(__LINE__).# de
27a60 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  fine SQLITE_IOER
27a70 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  R_NOMEM_BKPT sql
27a80 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
27a90 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20  ror(__LINE__).# 
27aa0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
27ab0 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71  RRUPT_PGNO(P) sq
27ac0 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f  lite3CorruptPgno
27ad0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28  Error(__LINE__,(
27ae0 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  P)).#else.# defi
27af0 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  ne SQLITE_NOMEM_
27b00 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  BKPT SQLITE_NOME
27b10 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  M.# define SQLIT
27b20 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
27b30 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  PT SQLITE_IOERR_
27b40 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53  NOMEM.# define S
27b50 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47  QLITE_CORRUPT_PG
27b60 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72  NO(P) sqlite3Cor
27b70 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
27b80 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  __).#endif../*.*
27b90 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20  * FTS3 and FTS4 
27ba0 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72  both require vir
27bb0 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f  tual table suppo
27bc0 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rt.*/.#if define
27bd0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
27be0 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e  RTUALTABLE).# un
27bf0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
27c00 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53  E_FTS3.# undef S
27c10 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
27c20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
27c30 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
27c40 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
27c50 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
27c60 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
27c70 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
27c80 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
27c90 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
27ca0 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c  ion we also call
27cb0 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
27cc0 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
27cd0 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
27ce0 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45  alias for SQLITE
27cf0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
27d00 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
27d10 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
27d20 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
27d30 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
27d40 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
27d50 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23  _ENABLE_FTS3 1.#
27d60 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
27d70 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
27d80 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
27d90 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
27da0 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
27db0 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
27dc0 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
27dd0 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
27de0 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
27df0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27e00 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
27e10 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
27e20 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
27e30 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
27e40 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
27e50 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
27e60 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
27e70 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
27e80 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
27e90 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
27ea0 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
27eb0 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
27ec0 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
27ed0 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
27ee0 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
27ef0 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
27f00 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
27f10 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
27f20 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
27f30 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
27f40 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
27f50 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
27f60 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
27f70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
27f80 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
27f90 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
27fa0 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
27fb0 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
27fc0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
27fd0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
27fe0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
27ff0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28000 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
28010 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
28020 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
28030 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
28040 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
28050 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
28060 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
28070 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
28080 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28090 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
280a0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
280b0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
280c0 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
280d0 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
280e0 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
280f0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
28100 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
28110 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28120 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
28130 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
28140 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
28150 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65  r)(x)]).# define
28160 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28   sqlite3Isquote(
28170 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
28180 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
28190 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a  char)(x)]&0x80).
281a0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
281b0 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
281c0 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
281d0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
281e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
281f0 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
28200 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
28210 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
28220 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
28230 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
28240 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
28250 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28260 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
28270 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
28280 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
28290 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
282a0 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
282b0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
282c0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
282d0 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
282e0 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
282f0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
28300 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
28310 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
28320 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
28330 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
28340 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
28350 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78     ((x)=='"'||(x
28360 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b  )=='\''||(x)=='[
28370 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e  '||(x)=='`').#en
28380 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  dif.int sqlite3I
28390 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a  sIdChar(u8);../*
283a0 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
283b0 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
283c0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
283d0 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61  trICmp(const cha
283e0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
283f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
28400 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
28410 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
28420 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28 43 29 20  e3Strlen30NN(C) 
28430 28 73 74 72 6c 65 6e 28 43 29 26 30 78 33 66 66  (strlen(C)&0x3ff
28440 66 66 66 66 66 29 0a 63 68 61 72 20 2a 73 71 6c  fffff).char *sql
28450 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43  ite3ColumnType(C
28460 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23  olumn*,char*);.#
28470 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
28480 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
28490 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
284a0 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
284b0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
284c0 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
284d0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
284e0 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69  Malloc(u64);.voi
284f0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
28500 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20  Zero(u64);.void 
28510 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
28520 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75  Zero(sqlite3*, u
28530 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
28540 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
28550 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
28560 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
28570 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33  locRawNN(sqlite3
28580 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
28590 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
285a0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
285b0 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
285c0 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
285d0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
285e0 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
285f0 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75 70 28  qlite3DbSpanDup(
28600 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28610 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
28620 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
28630 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75  Realloc(void*, u
28640 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
28650 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
28660 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
28670 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
28680 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
28690 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
286a0 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
286b0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
286c0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
286d0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
286e0 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76  eeNN(sqlite3*, v
286f0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
28700 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
28710 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
28720 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
28730 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
28740 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
28750 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
28760 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
28770 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
28780 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
28790 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64  ult(void);.#ifnd
287a0 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
287b0 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
287c0 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f  3BenignMallocHoo
287d0 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ks(void (*)(void
287e0 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ), void (*)(void
287f0 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  ));.#endif.int s
28800 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
28810 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
28820 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
28830 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
28840 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
28850 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
28860 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
28870 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
28880 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
28890 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
288a0 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
288b0 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
288c0 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
288d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
288e0 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
288f0 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
28900 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
28910 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
28920 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
28930 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
28940 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
28950 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
28960 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
28970 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
28980 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
28990 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
289a0 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
289b0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
289c0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
289d0 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
289e0 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
289f0 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
28a00 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  D,P).#else.# def
28a10 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
28a20 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
28a30 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
28a40 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  aw(D,N).# define
28a50 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
28a60 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c  ocZero(D,N)  sql
28a70 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
28a80 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
28a90 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
28aa0 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74  D,P)       sqlit
28ab0 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65  e3DbFree(D,P).#e
28ac0 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20  ndif../* Do not 
28ad0 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59  allow both MEMSY
28ae0 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74  S5 and MEMSYS3 t
28af0 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67  o be defined tog
28b00 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a  ether.  If they.
28b10 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20  ** are, disable 
28b20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65  MEMSYS3.*/.#ifde
28b30 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
28b40 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
28b50 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
28b60 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
28b70 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
28b80 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
28b90 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64  BLE_MEMSYS3.#end
28ba0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
28bb0 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
28bc0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
28bd0 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
28be0 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28  e3MemGetMemsys3(
28bf0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
28c00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
28c10 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
28c20 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
28c30 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
28c40 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
28c50 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
28c60 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
28c70 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
28c80 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
28c90 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
28ca0 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
28cb0 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
28cc0 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
28cd0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
28ce0 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
28cf0 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
28d00 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
28d10 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  OMIT) && !define
28d20 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e  d(SQLITE_MUTEX_N
28d30 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  OOP).  void sqli
28d40 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72  te3MemoryBarrier
28d50 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20  (void);.#else.# 
28d60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
28d70 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65  moryBarrier().#e
28d80 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e  ndif..sqlite3_in
28d90 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75  t64 sqlite3Statu
28da0 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
28db0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55  d sqlite3StatusU
28dc0 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  p(int, int);.voi
28dd0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44  d sqlite3StatusD
28de0 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  own(int, int);.v
28df0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
28e00 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20  sHighwater(int, 
28e10 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28e20 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28 73  3LookasideUsed(s
28e30 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a  qlite3*,int*);..
28e40 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74  /* Access to mut
28e50 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c  exes used by sql
28e60 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f  ite3_status() */
28e70 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
28e80 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75  sqlite3Pcache1Mu
28e90 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74  tex(void);.sqlit
28ea0 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
28eb0 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69  3MallocMutex(voi
28ec0 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  d);..#if defined
28ed0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
28ee0 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48 45  ULTITHREADED_CHE
28ef0 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65 64  CKS) && !defined
28f00 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
28f10 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  IT).void sqlite3
28f20 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65  MutexWarnOnConte
28f30 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75  ntion(sqlite3_mu
28f40 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  tex*);.#else.# d
28f50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75 74  efine sqlite3Mut
28f60 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69  exWarnOnContenti
28f70 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  on(x).#endif..#i
28f80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
28f90 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
28fa0 0a 23 20 64 65 66 69 6e 65 20 45 58 50 37 35 34  .# define EXP754
28fb0 20 28 28 28 75 36 34 29 30 78 37 66 66 29 3c 3c   (((u64)0x7ff)<<
28fc0 35 32 29 0a 23 20 64 65 66 69 6e 65 20 4d 41 4e  52).# define MAN
28fd0 37 35 34 20 28 28 28 28 75 36 34 29 31 29 3c 3c  754 ((((u64)1)<<
28fe0 35 32 29 2d 31 29 0a 23 20 64 65 66 69 6e 65 20  52)-1).# define 
28ff0 49 73 4e 61 4e 28 58 29 20 28 28 28 58 29 26 45  IsNaN(X) (((X)&E
29000 58 50 37 35 34 29 3d 3d 45 58 50 37 35 34 20 26  XP754)==EXP754 &
29010 26 20 28 28 58 29 26 4d 41 4e 37 35 34 29 21 3d  & ((X)&MAN754)!=
29020 30 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  0).  int sqlite3
29030 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
29040 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 73  else.# define Is
29050 4e 61 4e 28 58 29 20 20 20 20 20 20 20 20 20 30  NaN(X)         0
29060 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29070 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
29080 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
29090 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
290a0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
290b0 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
290c0 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a  ion about SQL.**
290d0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d   functions argum
290e0 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68  ents that are th
290f0 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20  e parameters to 
29100 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
29110 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
29120 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
29130 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20   {.  int nArg;  
29140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
29150 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
29160 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
29170 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20  int nUsed;      
29180 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
29190 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
291a0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
291b0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
291c0 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65  *apArg;   /* The
291d0 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73   argument values
291e0 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73 71   */.};..char *sq
291f0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
29200 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
29210 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
29220 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
29230 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
29240 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
29250 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
29260 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
29270 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f  ned(SQLITE_HAVE_
29280 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64  OS_TRACE).  void
29290 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
292a0 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
292b0 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
292c0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
292d0 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
292e0 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
292f0 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
29300 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
29310 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
29320 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
29330 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54  e3TreeViewExpr(T
29340 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
29350 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  Expr*, u8);.  vo
29360 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
29370 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28 54  ewBareExprList(T
29380 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
29390 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
293a0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
293b0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
293c0 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
293d0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
293e0 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  t*, u8, const ch
293f0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
29400 69 74 65 33 54 72 65 65 56 69 65 77 53 72 63 4c  ite3TreeViewSrcL
29410 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
29420 6f 6e 73 74 20 53 72 63 4c 69 73 74 2a 29 3b 0a  onst SrcList*);.
29430 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29440 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65  eeViewSelect(Tre
29450 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65  eView*, const Se
29460 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  lect*, u8);.  vo
29470 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
29480 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a  ewWith(TreeView*
29490 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75  , const With*, u
294a0 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
294b0 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
294c0 4e 43 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NC.  void sqlite
294d0 33 54 72 65 65 56 69 65 77 57 69 6e 64 6f 77 28  3TreeViewWindow(
294e0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
294f0 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 20   Window*, u8);. 
29500 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
29510 65 56 69 65 77 57 69 6e 46 75 6e 63 28 54 72 65  eViewWinFunc(Tre
29520 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
29530 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 23 65 6e 64  ndow*, u8);.#end
29540 69 66 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64  if.#endif...void
29550 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
29560 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
29570 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
29580 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29590 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
295a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
295b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 72  );.int sqlite3Er
295c0 72 6f 72 54 6f 50 61 72 73 65 72 28 73 71 6c 69  rorToParser(sqli
295d0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
295e0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
295f0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
29600 74 65 33 44 65 71 75 6f 74 65 45 78 70 72 28 45  te3DequoteExpr(E
29610 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
29620 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b  te3TokenInit(Tok
29630 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20  en*,char*);.int 
29640 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f  sqlite3KeywordCo
29650 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  de(const unsigne
29660 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  d char*, int);.i
29670 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  nt sqlite3RunPar
29680 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ser(Parse*, cons
29690 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a  t char*, char **
296a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
296b0 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73  inishCoding(Pars
296c0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
296d0 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65  GetTempReg(Parse
296e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
296f0 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50  ReleaseTempReg(P
29700 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
29710 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61  sqlite3GetTempRa
29720 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  nge(Parse*,int);
29730 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
29740 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61  easeTempRange(Pa
29750 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  rse*,int,int);.v
29760 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72  oid sqlite3Clear
29770 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72  TempRegCache(Par
29780 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  se*);.#ifdef SQL
29790 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
297a0 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61  lite3NoTempsInRa
297b0 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
297c0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72  nt);.#endif.Expr
297d0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
297e0 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
297f0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
29800 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
29810 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
29820 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
29830 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29840 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
29850 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
29860 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
29870 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
29880 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
29890 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
298a0 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64 53  sqlite3PExprAddS
298b0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78  elect(Parse*, Ex
298c0 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45  pr*, Select*);.E
298d0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
298e0 41 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  And(Parse*,Expr*
298f0 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
29900 73 71 6c 69 74 65 33 45 78 70 72 53 69 6d 70 6c  sqlite3ExprSimpl
29910 69 66 69 65 64 41 6e 64 4f 72 28 45 78 70 72 2a  ifiedAndOr(Expr*
29920 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
29930 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
29940 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
29950 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
29960 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
29970 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
29980 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32 29  se*, Expr*, u32)
29990 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
299a0 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
299b0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
299c0 73 71 6c 69 74 65 33 45 78 70 72 55 6e 6d 61 70  sqlite3ExprUnmap
299d0 41 6e 64 44 65 6c 65 74 65 28 50 61 72 73 65 2a  AndDelete(Parse*
299e0 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  , Expr*);.ExprLi
299f0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
29a00 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
29a10 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
29a20 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
29a30 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
29a40 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a 2c  ndVector(Parse*,
29a50 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74  ExprList*,IdList
29a60 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
29a70 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
29a80 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c  tSortOrder(ExprL
29a90 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ist*,int);.void 
29aa0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
29ab0 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78  etName(Parse*,Ex
29ac0 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69  prList*,Token*,i
29ad0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29ae0 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e  3ExprListSetSpan
29af0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
29b00 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
29b10 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
29b20 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
29b30 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
29b40 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32   ExprList*);.u32
29b50 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
29b60 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72  Flags(const Expr
29b70 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
29b80 74 65 33 49 6e 64 65 78 48 61 73 44 75 70 6c 69  te3IndexHasDupli
29b90 63 61 74 65 52 6f 6f 74 50 61 67 65 28 49 6e 64  cateRootPage(Ind
29ba0 65 78 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ex*);.int sqlite
29bb0 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
29bc0 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
29bd0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
29be0 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
29bf0 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  r**, char**);.in
29c00 74 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65  t sqlite3InitOne
29c10 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
29c20 63 68 61 72 2a 2a 2c 20 75 33 32 29 3b 0a 76 6f  char**, u32);.vo
29c30 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
29c40 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
29c50 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
29c60 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
29c70 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
29c80 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69  BLE.Module *sqli
29c90 74 65 33 50 72 61 67 6d 61 56 74 61 62 52 65 67  te3PragmaVtabReg
29ca0 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63  ister(sqlite3*,c
29cb0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
29cc0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
29cd0 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
29ce0 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
29cf0 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
29d00 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
29d10 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
29d20 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
29d30 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
29d40 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
29d50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29d60 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
29d70 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
29d80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
29d90 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73  eteColumnNames(s
29da0 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b  qlite3*,Table*);
29db0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75  .int sqlite3Colu
29dc0 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  mnsFromExprList(
29dd0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
29de0 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b  ,i16*,Column**);
29df0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
29e00 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65  ectAddColumnType
29e10 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72  AndCollation(Par
29e20 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63  se*,Table*,Selec
29e30 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
29e40 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65  te3ResultSetOfSe
29e50 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65  lect(Parse*,Sele
29e60 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ct*);.void sqlit
29e70 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c  e3OpenMasterTabl
29e80 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b  e(Parse *, int);
29e90 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50  .Index *sqlite3P
29ea0 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54  rimaryKeyIndex(T
29eb0 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69  able*);.i16 sqli
29ec0 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78  te3ColumnOfIndex
29ed0 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76  (Index*, i16);.v
29ee0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
29ef0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
29f00 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
29f10 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66  nt,int,int);.#if
29f20 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
29f30 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20  IDDEN_COLUMNS.  
29f40 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
29f50 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
29f60 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c  Name(Table*, Col
29f70 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  umn*);.#else.# d
29f80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c  efine sqlite3Col
29f90 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
29fa0 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f  mName(T,C) /* no
29fb0 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f  -op */.#endif.vo
29fc0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
29fd0 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  umn(Parse*,Token
29fe0 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
29ff0 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
2a000 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
2a010 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
2a020 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
2a030 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2a040 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2a050 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
2a060 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
2a070 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
2a080 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
2a090 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
2a0a0 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  xpr*,const char*
2a0b0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
2a0c0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
2a0d0 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a  llateType(Parse*
2a0e0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2a0f0 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28  sqlite3EndTable(
2a100 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
2a110 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29  ken*,u8,Select*)
2a120 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72  ;.int sqlite3Par
2a130 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72  seUri(const char
2a140 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e  *,const char*,un
2a150 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20  signed int*,.   
2a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a170 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63   sqlite3_vfs**,c
2a180 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a  har**,char **);.
2a190 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
2a1a0 53 5f 43 4f 44 45 43 0a 20 20 69 6e 74 20 73 71  S_CODEC.  int sq
2a1b0 6c 69 74 65 33 43 6f 64 65 63 51 75 65 72 79 50  lite3CodecQueryP
2a1c0 61 72 61 6d 65 74 65 72 73 28 73 71 6c 69 74 65  arameters(sqlite
2a1d0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  3*,const char*,c
2a1e0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
2a1f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2a200 74 65 33 43 6f 64 65 63 51 75 65 72 79 50 61 72  te3CodecQueryPar
2a210 61 6d 65 74 65 72 73 28 41 2c 42 2c 43 29 20 30  ameters(A,B,C) 0
2a220 0a 23 65 6e 64 69 66 0a 42 74 72 65 65 20 2a 73  .#endif.Btree *s
2a230 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74  qlite3DbNameToBt
2a240 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ree(sqlite3*,con
2a250 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64  st char*);..#ifd
2a260 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
2a270 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71  ABLE.# define sq
2a280 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29  lite3FaultSim(X)
2a290 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65   SQLITE_OK.#else
2a2a0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61  .  int sqlite3Fa
2a2b0 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e  ultSim(int);.#en
2a2c0 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  dif..Bitvec *sql
2a2d0 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
2a2e0 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
2a2f0 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
2a300 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
2a310 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
2a320 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a  tNotNull(Bitvec*
2a330 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
2a340 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
2a350 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
2a360 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
2a370 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
2a380 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
2a390 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
2a3a0 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
2a3b0 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
2a3c0 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69  ize(Bitvec*);.#i
2a3d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
2a3e0 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69  ESTABLE.int sqli
2a3f0 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
2a400 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
2a410 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a  #endif..RowSet *
2a420 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69  sqlite3RowSetIni
2a430 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  t(sqlite3*);.voi
2a440 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 44  d sqlite3RowSetD
2a450 65 6c 65 74 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  elete(void*);.vo
2a460 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
2a470 43 6c 65 61 72 28 76 6f 69 64 2a 29 3b 0a 76 6f  Clear(void*);.vo
2a480 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
2a490 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20  Insert(RowSet*, 
2a4a0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2a4b0 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53  3RowSetTest(RowS
2a4c0 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c  et*, int iBatch,
2a4d0 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   i64);.int sqlit
2a4e0 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77  e3RowSetNext(Row
2a4f0 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f  Set*, i64*);..vo
2a500 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
2a510 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65  View(Parse*,Toke
2a520 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
2a530 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
2a540 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69  t*,int,int);..#i
2a550 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2a560 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20  E_OMIT_VIEW) || 
2a570 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2a580 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2a590 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
2a5a0 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
2a5b0 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  es(Parse*,Table*
2a5c0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2a5d0 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  e sqlite3ViewGet
2a5e0 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29  ColumnNames(A,B)
2a5f0 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53   0.#endif..#if S
2a600 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
2a610 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69  ED>30.  int sqli
2a620 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
2a630 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69  (yDbMask);.#endi
2a640 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  f.void sqlite3Dr
2a650 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
2a660 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
2a670 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a680 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50  3CodeDropTable(P
2a690 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2a6a0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2a6b0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c  qlite3DeleteTabl
2a6c0 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
2a6d0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2a6e0 33 46 72 65 65 49 6e 64 65 78 28 73 71 6c 69 74  3FreeIndex(sqlit
2a6f0 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69  e3*, Index*);.#i
2a700 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a710 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
2a720 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2a730 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
2a740 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
2a750 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
2a760 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
2a770 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
2a780 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2a790 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
2a7a0 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
2a7b0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
2a7c0 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
2a7d0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2a7e0 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
2a7f0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
2a800 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
2a810 74 2c 20 55 70 73 65 72 74 2a 29 3b 0a 76 6f 69  t, Upsert*);.voi
2a820 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41  d *sqlite3ArrayA
2a830 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a  llocate(sqlite3*
2a840 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c  ,void*,int,int*,
2a850 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73  int*);.IdList *s
2a860 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65  qlite3IdListAppe
2a870 6e 64 28 50 61 72 73 65 2a 2c 20 49 64 4c 69 73  nd(Parse*, IdLis
2a880 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
2a890 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
2a8a0 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
2a8b0 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
2a8c0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
2a8d0 74 45 6e 6c 61 72 67 65 28 50 61 72 73 65 2a 2c  tEnlarge(Parse*,
2a8e0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
2a8f0 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
2a900 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
2a910 65 6e 64 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  end(Parse*, SrcL
2a920 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
2a930 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
2a940 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
2a950 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
2a960 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
2a970 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
2a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9a0 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
2a9b0 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
2a9c0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
2a9d0 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
2a9e0 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
2a9f0 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
2aa00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
2aa10 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61  cListFuncArgs(Pa
2aa20 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2aa30 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2aa40 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
2aa50 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
2aa60 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
2aa70 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
2aa80 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
2aa90 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
2aaa0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2aab0 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
2aac0 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
2aad0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
2aae0 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
2aaf0 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
2ab00 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2ab10 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
2ab20 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
2ab30 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
2ab40 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f  e3AllocateIndexO
2ab50 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69  bject(sqlite3*,i
2ab60 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a  16,int,char**);.
2ab70 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
2ab80 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
2ab90 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63  oken*,Token*,Src
2aba0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
2abb0 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  int,Token*,.    
2abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abd0 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74        Expr*, int
2abe0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
2abf0 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
2ac00 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
2ac10 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
2ac20 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
2ac30 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
2ac40 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
2ac50 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
2ac60 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
2ac70 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
2ac80 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
2ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aca0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
2acb0 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72  prList*,u32,Expr
2acc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2acd0 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
2ace0 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
2acf0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
2ad00 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
2ad10 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
2ad20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
2ad30 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
2ad40 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
2ad50 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
2ad60 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
2ad70 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
2ad80 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
2ad90 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
2ada0 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
2adb0 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
2adc0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2add0 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
2ade0 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
2adf0 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
2ae00 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
2ae10 73 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29  st*,Expr*,char*)
2ae20 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2ae30 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28  lite3DeleteFrom(
2ae40 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2ae50 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
2ae60 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
2ae70 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50   sqlite3Update(P
2ae80 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2ae90 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a   ExprList*,Expr*
2aea0 2c 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c 45  ,int,ExprList*,E
2aeb0 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  xpr*,.          
2aec0 20 20 20 20 20 20 20 20 20 55 70 73 65 72 74 2a           Upsert*
2aed0 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
2aee0 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
2aef0 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
2af00 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
2af10 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
2af20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2af30 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
2af40 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  fo*);.LogEst sql
2af50 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
2af60 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(WhereInf
2af70 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2af80 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
2af90 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2afa0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f   sqlite3WhereIsO
2afb0 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
2afc0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2afd0 68 65 72 65 4f 72 64 65 72 42 79 4c 69 6d 69 74  hereOrderByLimit
2afe0 4f 70 74 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  OptLabel(WhereIn
2aff0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2b000 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57  3WhereIsSorted(W
2b010 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2b020 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74  sqlite3WhereCont
2b030 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49  inueLabel(WhereI
2b040 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2b050 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65  e3WhereBreakLabe
2b060 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
2b070 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  nt sqlite3WhereO
2b080 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e  kOnePass(WhereIn
2b090 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66  fo*, int*);.#def
2b0a0 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20  ine ONEPASS_OFF 
2b0b0 20 20 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a       0        /*
2b0c0 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20   Use of ONEPASS 
2b0d0 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  not allowed */.#
2b0e0 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53  define ONEPASS_S
2b0f0 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20 20  INGLE   1       
2b100 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69   /* ONEPASS vali
2b110 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  d for a single r
2b120 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65  ow update */.#de
2b130 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c  fine ONEPASS_MUL
2b140 54 49 20 20 20 20 32 20 20 20 20 20 20 20 20 2f  TI    2        /
2b150 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c  * ONEPASS is val
2b160 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20  id for multiple 
2b170 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  rows */.void sql
2b180 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64  ite3ExprCodeLoad
2b190 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73  IndexColumn(Pars
2b1a0 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
2b1b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
2b1c0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
2b1d0 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  etColumn(Parse*,
2b1e0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2b1f0 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
2b200 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2b210 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
2b220 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
2b230 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2b240 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2b250 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
2b260 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
2b270 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2b280 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
2b290 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
2b2a0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2b2b0 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70  Copy(Parse*, Exp
2b2c0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
2b2d0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
2b2e0 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
2b2f0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2b300 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
2b310 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20  eAtInit(Parse*, 
2b320 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
2b330 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2b340 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
2b350 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
2b360 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
2b370 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
2b380 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
2b390 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e  qlite3ExprCodeAn
2b3a0 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45  dCache(Parse*, E
2b3b0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2b3c0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
2b3d0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
2b3e0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
2b3f0 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
2b400 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
2b410 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
2b420 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
2b430 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
2b440 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
2b450 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
2b460 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
2b470 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23  stant terms */.#
2b480 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
2b490 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34  EL_REF      0x04
2b4a0 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73    /* Use ExprLis
2b4b0 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
2b4c0 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  l */.#define SQL
2b4d0 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46  ITE_ECEL_OMITREF
2b4e0 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20    0x08  /* Omit 
2b4f0 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  if ExprList.u.x.
2b500 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76  iOrderByCol */.v
2b510 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
2b520 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
2b530 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
2b540 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2b550 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
2b560 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
2b570 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2b580 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72  prIfFalseDup(Par
2b590 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
2b5a0 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71   int);.Table *sq
2b5b0 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73  lite3FindTable(s
2b5c0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
2b5d0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2b5e0 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54  );.#define LOCAT
2b5f0 45 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a 23  E_VIEW    0x01.#
2b600 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f  define LOCATE_NO
2b610 45 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65  ERR   0x02.Table
2b620 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
2b630 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20  able(Parse*,u32 
2b640 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72  flags,const char
2b650 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2b660 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
2b670 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
2b680 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c  arse*,u32 flags,
2b690 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
2b6a0 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
2b6b0 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
2b6c0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2b6d0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2b6e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b6f0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2b700 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
2b710 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
2b720 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
2b730 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
2b740 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
2b750 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2b760 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
2b770 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  arse*,Token*,Exp
2b780 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2b790 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a  RunVacuum(char**
2b7a0 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  , sqlite3*, int,
2b7b0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29   sqlite3_value*)
2b7c0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
2b7d0 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c  ameFromToken(sql
2b7e0 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
2b7f0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b800 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45 78  ompare(Parse*,Ex
2b810 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2b820 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b830 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78 70  rCompareSkip(Exp
2b840 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
2b850 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2b860 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72  ListCompare(Expr
2b870 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
2b880 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2b890 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78  te3ExprImpliesEx
2b8a0 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  pr(Parse*,Expr*,
2b8b0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2b8c0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
2b8d0 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45  liesNonNullRow(E
2b8e0 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  xpr*,int);.void 
2b8f0 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
2b900 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
2b910 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
2b920 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2b930 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
2b940 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
2b950 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2b960 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65  qlite3ExprCovere
2b970 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20  dByIndex(Expr*, 
2b980 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20  int iCur, Index 
2b990 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69  *pIdx);.int sqli
2b9a0 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54  te3FunctionUsesT
2b9b0 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72  hisSrc(Expr*, Sr
2b9c0 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  cList*);.Vdbe *s
2b9d0 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
2b9e0 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  rse*);.#ifndef S
2b9f0 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
2ba00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
2ba10 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
2ba20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
2ba30 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
2ba40 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  oid);.#endif.voi
2ba50 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
2ba60 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e  kAll(sqlite3*,in
2ba70 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2ba80 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
2ba90 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
2baa0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
2bab0 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61  erifyNamedSchema
2bac0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2bad0 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20  har *zDb);.void 
2bae0 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e  sqlite3BeginTran
2baf0 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  saction(Parse*, 
2bb00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2bb10 65 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e  e3EndTransaction
2bb20 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
2bb30 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
2bb40 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2bb50 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2bb60 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
2bb70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
2bb80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
2bb90 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
2bba0 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
2bbb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2bbc0 72 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28 45  rIdToTrueFalse(E
2bbd0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2bbe0 65 33 45 78 70 72 54 72 75 74 68 56 61 6c 75 65  e3ExprTruthValue
2bbf0 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69  (const Expr*);.i
2bc00 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2bc10 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
2bc20 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2bc30 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
2bc40 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
2bc50 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
2bc60 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
2bc70 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  pr*, u8);.int sq
2bc80 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
2bc90 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72  antOrGroupBy(Par
2bca0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
2bcb0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2bcc0 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
2bcd0 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
2bce0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2bcf0 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
2bd00 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  INTS.int sqlite3
2bd10 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71  ExprContainsSubq
2bd20 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e  uery(Expr*);.#en
2bd30 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  dif.int sqlite3E
2bd40 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
2bd50 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
2bd60 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
2bd70 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
2bd80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2bd90 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
2bda0 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
2bdb0 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
2bdc0 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
2bdd0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2bde0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
2bdf0 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50  RowDelete(.    P
2be00 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
2be10 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
2be20 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69  t,i16,u8,u8,u8,i
2be30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2be40 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
2be50 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
2be60 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
2be70 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  , int*, int);.in
2be80 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
2be90 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
2bea0 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
2beb0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
2bec0 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
2bed0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
2bee0 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
2bef0 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
2bf00 74 65 33 45 78 70 72 52 65 66 65 72 65 6e 63 65  te3ExprReference
2bf10 73 55 70 64 61 74 65 64 43 6f 6c 75 6d 6e 28 45  sUpdatedColumn(E
2bf20 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e 74 29 3b 0a  xpr*,int*,int);.
2bf30 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
2bf40 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68  rateConstraintCh
2bf50 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ecks(Parse*,Tabl
2bf60 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  e*,int*,int,int,
2bf70 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20  int,int,.       
2bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38                u8
2bfa0 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  ,u8,int,int*,int
2bfb0 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 23 69 66 64  *,Upsert*);.#ifd
2bfc0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2bfd0 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69  _NULL_TRIM.  voi
2bfe0 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65  d sqlite3SetMake
2bff0 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54  RecordP5(Vdbe*,T
2c000 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
2c010 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
2c020 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c  tMakeRecordP5(A,
2c030 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  B).#endif.void s
2c040 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
2c050 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
2c060 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
2c070 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
2c080 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2c090 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
2c0a0 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
2c0b0 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74  e*, int, u8, int
2c0c0 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
2c0d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c0e0 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
2c0f0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
2c100 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2c110 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
2c120 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
2c130 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
2c140 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2c150 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
2c160 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
2c170 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
2c180 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
2c190 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
2c1a0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
2c1b0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2c1c0 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
2c1d0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
2c1e0 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
2c1f0 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
2c200 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
2c210 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
2c220 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
2c230 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
2c240 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
2c250 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
2c260 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
2c270 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
2c280 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
2c290 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
2c2a0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
2c2b0 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
2c2c0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
2c2d0 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  int);.FuncDef *s
2c2e0 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 53 65  qlite3FunctionSe
2c2f0 61 72 63 68 28 69 6e 74 2c 63 6f 6e 73 74 20 63  arch(int,const c
2c300 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2c310 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e  te3InsertBuiltin
2c320 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69  Funcs(FuncDef*,i
2c330 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  nt);.FuncDef *sq
2c340 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
2c350 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
2c360 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38   char*,int,u8,u8
2c370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2c380 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
2c390 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
2c3a0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2c3b0 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
2c3c0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
2c3d0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
2c3e0 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69  PerConnectionBui
2c3f0 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71  ltinFunctions(sq
2c400 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2c410 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
2c420 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
2c430 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
2c440 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
2c450 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
2c460 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
2c470 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
2c480 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2c490 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
2c4a0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2c4b0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
2c4c0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
2c4d0 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
2c4e0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
2c4f0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  , ExprList*,Expr
2c500 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  *,int);.#endif..
2c510 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c520 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
2c530 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
2c540 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
2c550 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
2c560 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
2c570 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
2c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c590 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
2c5a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c5b0 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
2c5c0 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
2c5d0 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
2c5e0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
2c5f0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
2c600 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
2c610 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
2c620 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
2c630 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
2c640 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
2c650 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
2c660 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
2c670 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
2c680 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
2c690 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
2c6a0 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
2c6b0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
2c6c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
2c6d0 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
2c6e0 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
2c6f0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
2c700 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
2c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c720 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
2c730 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
2c740 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
2c750 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
2c760 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
2c770 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
2c780 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
2c790 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
2c7a0 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
2c7b0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
2c7c0 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
2c7d0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
2c7e0 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
2c7f0 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
2c800 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2c810 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2c820 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
2c830 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20 20  te3*,Select*,.  
2c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c860 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2c870 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2c880 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
2c890 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
2c8a0 65 72 74 53 74 65 70 28 50 61 72 73 65 2a 2c 54  ertStep(Parse*,T
2c8b0 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a  oken*, IdList*,.
2c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8e0 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c          Select*,
2c8f0 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20 20  u8,Upsert*,.    
2c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c920 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2c930 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2c940 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2c950 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74  ite3TriggerUpdat
2c960 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b  eStep(Parse*,Tok
2c970 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
2c980 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20 20  xpr*, u8,.      
2c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9b0 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2c9c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
2c9d0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2c9e0 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
2c9f0 74 65 70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  tep(Parse*,Token
2ca00 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20 20 20  *, Expr*,.      
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca30 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2ca40 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2ca50 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2ca60 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
2ca70 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
2ca80 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
2ca90 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
2caa0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
2cab0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
2cac0 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
2cad0 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
2cae0 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
2caf0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
2cb00 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
2cb10 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
2cb20 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
2cb30 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
2cb40 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
2cb50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cb60 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  3IsToplevel(p) (
2cb70 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d  (p)->pToplevel==
2cb80 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
2cb90 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
2cba0 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46  sExist(B,C,D,E,F
2cbb0 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
2cbc0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
2cbd0 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
2cbe0 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
2cbf0 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66  erPtr(A,B).# def
2cc00 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ine sqlite3Unlin
2cc10 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
2cc20 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e  r(A,B,C).# defin
2cc30 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
2cc40 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c  Trigger(A,B,C,D,
2cc50 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66  E,F,G,H,I).# def
2cc60 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
2cc70 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
2cc80 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64  A,B,C,D,E,F).# d
2cc90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
2cca0 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30  ggerList(X, Y) 0
2ccb0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2ccc0 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
2ccd0 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) p.# define sql
2cce0 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
2ccf0 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 1.# define sql
2cd00 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
2cd10 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  sk(A,B,C,D,E,F,G
2cd20 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  ) 0.#endif..int 
2cd30 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28  sqlite3JoinType(
2cd40 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2cd50 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2cd60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
2cd70 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ateForeignKey(Pa
2cd80 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2cd90 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73   Token*, ExprLis
2cda0 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  t*, int);.void s
2cdb0 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69  qlite3DeferForei
2cdc0 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e  gnKey(Parse*, in
2cdd0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2cde0 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
2cdf0 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  ATION.  void sql
2ce00 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72  ite3AuthRead(Par
2ce10 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61  se*,Expr*,Schema
2ce20 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
2ce30 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
2ce40 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
2ce50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2ce60 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2ce70 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
2ce80 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
2ce90 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
2cea0 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
2ceb0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
2cec0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2ced0 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
2cee0 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  xt*);.  int sqli
2cef0 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50  te3AuthReadCol(P
2cf00 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2cf10 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  r *, const char 
2cf20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  *, int);.#else.#
2cf30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
2cf40 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29  uthRead(a,b,c,d)
2cf50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cf60 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63  3AuthCheck(a,b,c
2cf70 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f  ,d,e)    SQLITE_
2cf80 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  OK.# define sqli
2cf90 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
2cfa0 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69  sh(a,b,c).# defi
2cfb0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
2cfc0 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76  ntextPop(a)  ((v
2cfd0 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a  oid)(a)).#endif.
2cfe0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61  void sqlite3Atta
2cff0 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
2d000 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
2d010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74  .void sqlite3Det
2d020 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
2d030 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d040 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a  FixInit(DbFixer*
2d050 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63  , Parse*, int, c
2d060 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2d070 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  t Token*);.int s
2d080 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74  qlite3FixSrcList
2d090 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69  (DbFixer*, SrcLi
2d0a0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2d0b0 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78  3FixSelect(DbFix
2d0c0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
2d0d0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
2d0e0 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  r(DbFixer*, Expr
2d0f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2d100 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78  ixExprList(DbFix
2d110 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
2d120 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54  .int sqlite3FixT
2d130 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78  riggerStep(DbFix
2d140 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  er*, TriggerStep
2d150 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2d160 65 61 6c 53 61 6d 65 41 73 49 6e 74 28 64 6f 75  ealSameAsInt(dou
2d170 62 6c 65 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  ble,sqlite3_int6
2d180 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
2d190 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  toF(const char *
2d1a0 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c  z, double*, int,
2d1b0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2d1c0 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20  3GetInt32(const 
2d1d0 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69  char *, int*);.i
2d1e0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63  nt sqlite3Atoi(c
2d1f0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66  onst char*);.#if
2d200 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d210 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74  _UTF16.int sqlit
2d220 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
2d230 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
2d240 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65  , int nChar);.#e
2d250 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2d260 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
2d270 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
2d280 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
2d290 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
2d2a0 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45  onst u8**);.LogE
2d2b0 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
2d2c0 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71  (u64);.LogEst sq
2d2d0 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c  lite3LogEstAdd(L
2d2e0 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23  ogEst,LogEst);.#
2d2f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d300 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2d310 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
2d320 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
2d330 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23  ouble);.#endif.#
2d340 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2d350 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
2d360 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20  ANSTATUS) || \. 
2d370 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
2d380 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
2d390 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20  R_STAT4) || \.  
2d3a0 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
2d3b0 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54  _EXPLAIN_ESTIMAT
2d3c0 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c  ED_ROWS).u64 sql
2d3d0 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
2d3e0 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a  LogEst);.#endif.
2d3f0 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c  VList *sqlite3VL
2d400 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c  istAdd(sqlite3*,
2d410 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  VList*,const cha
2d420 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e  r*,int,int);.con
2d430 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2d440 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56  VListNumToName(V
2d450 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  List*,int);.int 
2d460 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65  sqlite3VListName
2d470 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e  ToNum(VList*,con
2d480 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a  st char*,int);..
2d490 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
2d4a0 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
2d4b0 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
2d4c0 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
2d4d0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
2d4e0 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
2d4f0 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
2d500 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
2d510 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
2d520 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e  c.** file..*/.in
2d530 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
2d540 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
2d550 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69  *, u64);.u8 sqli
2d560 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e  te3GetVarint(con
2d570 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2d580 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73   *, u64 *);.u8 s
2d590 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
2d5a0 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  2(const unsigned
2d5b0 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b   char *, u32 *);
2d5c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
2d5d0 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f  ntLen(u64 v);../
2d5e0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20  *.** The common 
2d5f0 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61  case is for a va
2d600 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e  rint to be a sin
2d610 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20  gle byte.  They 
2d620 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63  following.** mac
2d630 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63  ros handle the c
2d640 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f  ommon case witho
2d650 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63  ut a procedure c
2d660 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61  all, but then ca
2d670 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64  ll.** the proced
2d680 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76  ure for larger v
2d690 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69  arints..*/.#defi
2d6a0 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
2d6b0 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a  ,B)  \.  (u8)((*
2d6c0 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28  (A)<(u8)0x80)?((
2d6d0 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a  B)=(u32)*(A)),1:
2d6e0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2d6f0 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28  32((A),(u32 *)&(
2d700 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74  B))).#define put
2d710 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
2d720 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  .  (u8)(((u32)(B
2d730 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28  )<(u32)0x80)?(*(
2d740 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61  A)=(unsigned cha
2d750 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c  r)(B)),1:\.  sql
2d760 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41  ite3PutVarint((A
2d770 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  ),(B))).#define 
2d780 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  getVarint    sql
2d790 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64  ite3GetVarint.#d
2d7a0 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20  efine putVarint 
2d7b0 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72     sqlite3PutVar
2d7c0 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  int...const char
2d7d0 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66   *sqlite3IndexAf
2d7e0 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65  finityStr(sqlite
2d7f0 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  3*, Index*);.voi
2d800 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66  d sqlite3TableAf
2d810 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61  finity(Vdbe*, Ta
2d820 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  ble*, int);.char
2d830 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41   sqlite3CompareA
2d840 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
2d850 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b  xpr, char aff2);
2d860 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
2d870 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72  xAffinityOk(Expr
2d880 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64   *pExpr, char id
2d890 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61  x_affinity);.cha
2d8a0 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f  r sqlite3TableCo
2d8b0 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62  lumnAffinity(Tab
2d8c0 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73  le*,int);.char s
2d8d0 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69  qlite3ExprAffini
2d8e0 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ty(Expr *pExpr);
2d8f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
2d900 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
2d910 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  i64*, int, u8);.
2d920 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72  int sqlite3DecOr
2d930 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63  HexToI64(const c
2d940 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69  har*, i64*);.voi
2d950 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69  d sqlite3ErrorWi
2d960 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20  thMsg(sqlite3*, 
2d970 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2d980 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,...);.void sqli
2d990 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
2d9a0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2d9b0 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28  ite3SystemError(
2d9c0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2d9d0 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
2d9e0 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
2d9f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
2da00 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
2da10 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
2da20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
2da30 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
2da40 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
2da50 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
2da60 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2da70 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
2da80 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ).const char *sq
2da90 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74  lite3ErrName(int
2daa0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
2dab0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2dac0 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20  DESERIALIZE.int 
2dad0 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69 74  sqlite3MemdbInit
2dae0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
2daf0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2db00 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
2db10 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
2db20 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
2db30 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
2db40 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
2db50 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
2db60 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
2db70 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2db80 49 73 42 69 6e 61 72 79 28 63 6f 6e 73 74 20 43  IsBinary(const C
2db90 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53 65  ollSeq*);.CollSe
2dba0 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
2dbb0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2dbc0 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
2dbd0 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
2dbe0 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
2dbf0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2dc00 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
2dc10 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2dc20 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71  te3ExprNNCollSeq
2dc30 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2dc40 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e  Expr *pExpr);.in
2dc50 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c  t sqlite3ExprCol
2dc60 6c 53 65 71 4d 61 74 63 68 28 50 61 72 73 65 2a  lSeqMatch(Parse*
2dc70 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
2dc80 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2dc90 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
2dca0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
2dcb0 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
2dcc0 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  n*, int);.Expr *
2dcd0 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
2dce0 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73  llateString(Pars
2dcf0 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
2dd00 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  har*);.Expr *sql
2dd10 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c  ite3ExprSkipColl
2dd20 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ate(Expr*);.int 
2dd30 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c  sqlite3CheckColl
2dd40 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c  Seq(Parse *, Col
2dd50 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  lSeq *);.int sql
2dd60 69 74 65 33 57 72 69 74 61 62 6c 65 53 63 68 65  ite3WritableSche
2dd70 6d 61 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ma(sqlite3*);.in
2dd80 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
2dd90 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
2dda0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2ddb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
2ddc0 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
2ddd0 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
2dde0 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
2ddf0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2de00 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
2de10 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2de20 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
2de30 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2de40 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
2de50 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
2de60 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
2de70 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
2de80 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
2de90 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
2dea0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2deb0 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
2dec0 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
2ded0 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
2dee0 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
2def0 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  ,u8);..const voi
2df00 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
2df10 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
2df20 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
2df30 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
2df40 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
2df50 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2df60 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
2df70 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
2df80 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
2df90 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2dfa0 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a            void(*
2dfb0 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
2dfc0 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e  sqlite3ValueSetN
2dfd0 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ull(sqlite3_valu
2dfe0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2dff0 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74  3ValueFree(sqlit
2e000 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 23 69 66 6e  e3_value*);.#ifn
2e010 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
2e020 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
2e030 65 33 52 65 73 75 6c 74 49 6e 74 52 65 61 6c 28  e3ResultIntReal(
2e040 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2e050 29 3b 0a 23 65 6e 64 69 66 0a 73 71 6c 69 74 65  );.#endif.sqlite
2e060 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
2e070 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
2e080 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   *);.#ifndef SQL
2e090 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63  ITE_OMIT_UTF16.c
2e0a0 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
2e0b0 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
2e0c0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2e0d0 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  , u8);.#endif.in
2e0e0 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  t sqlite3ValueFr
2e0f0 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  omExpr(sqlite3 *
2e100 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38  , Expr *, u8, u8
2e110 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
2e120 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2e130 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2e140 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ity(sqlite3_valu
2e150 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69  e *, u8, u8);.#i
2e160 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2e170 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e  LGAMATION.extern
2e180 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2e190 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f  char sqlite3Opco
2e1a0 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78  deProperty[];.ex
2e1b0 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20  tern const char 
2e1c0 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59  sqlite3StrBINARY
2e1d0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2e1e0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2e1f0 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
2e200 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
2e210 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2e220 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
2e230 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2e240 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
2e250 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
2e260 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
2e270 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
2e280 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
2e290 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48  .extern FuncDefH
2e2a0 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74  ash sqlite3Built
2e2b0 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  inFunctions;.#if
2e2c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e2d0 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
2e2e0 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
2e2f0 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
2e300 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  f.#ifdef VDBE_PR
2e310 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c  OFILE.extern sql
2e320 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c 69  ite3_uint64 sqli
2e330 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a  te3NProfileCnt;.
2e340 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2e350 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2e360 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2e370 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2e380 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50  sqlite3Reindex(P
2e390 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2e3a0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2e3b0 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f  ite3AlterFunctio
2e3c0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
2e3d0 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
2e3e0 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
2e3f0 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
2e400 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2e410 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e 28  terRenameColumn(
2e420 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2e430 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2e440 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
2e450 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
2e460 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
2e470 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
2e480 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
2e490 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
2e4a0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
2e4b0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
2e4c0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
2e4d0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f  lite3*, int);.vo
2e4e0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 68  id sqlite3CodeRh
2e4f0 73 4f 66 49 4e 28 50 61 72 73 65 2a 2c 20 45 78  sOfIN(Parse*, Ex
2e500 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2e510 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c  qlite3CodeSubsel
2e520 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
2e530 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e540 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65  SelectPrep(Parse
2e550 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
2e560 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
2e570 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f  sqlite3SelectWro
2e580 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28  ngNumTermsError(
2e590 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53  Parse *pParse, S
2e5a0 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73  elect *p);.int s
2e5b0 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e  qlite3MatchSpanN
2e5c0 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ame(const char*,
2e5d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2e5e0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2e5f0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
2e600 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
2e610 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
2e620 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
2e630 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
2e640 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43  rListNames(NameC
2e650 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73  ontext*, ExprLis
2e660 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2e670 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
2e680 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
2e690 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
2e6a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2e6b0 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65  esolveSelfRefere
2e6c0 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  nce(Parse*,Table
2e6d0 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72  *,int,Expr*,Expr
2e6e0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2e6f0 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47  te3ResolveOrderG
2e700 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53  roupBy(Parse*, S
2e710 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74  elect*, ExprList
2e720 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2e730 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
2e740 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20  umnDefault(Vdbe 
2e750 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
2e760 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2e770 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64  te3AlterFinishAd
2e780 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
2e790 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
2e7a0 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69  sqlite3AlterBegi
2e7b0 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  nAddColumn(Parse
2e7c0 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a   *, SrcList *);.
2e7d0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 6e  void *sqlite3Ren
2e7e0 61 6d 65 54 6f 6b 65 6e 4d 61 70 28 50 61 72 73  ameTokenMap(Pars
2e7f0 65 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f 6b 65 6e  e*, void*, Token
2e800 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e810 52 65 6e 61 6d 65 54 6f 6b 65 6e 52 65 6d 61 70  RenameTokenRemap
2e820 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 20 2a 70  (Parse*, void *p
2e830 54 6f 2c 20 76 6f 69 64 20 2a 70 46 72 6f 6d 29  To, void *pFrom)
2e840 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2e850 6e 61 6d 65 45 78 70 72 55 6e 6d 61 70 28 50 61  nameExprUnmap(Pa
2e860 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
2e870 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65  id sqlite3Rename
2e880 45 78 70 72 6c 69 73 74 55 6e 6d 61 70 28 50 61  ExprlistUnmap(Pa
2e890 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  rse*, ExprList*)
2e8a0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2e8b0 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
2e8c0 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
2e8d0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
2e8e0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
2e8f0 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
2e900 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29   char*, Column*)
2e910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  ;.void sqlite3An
2e920 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f  alyze(Parse*, To
2e930 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ken*, Token*);.i
2e940 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65  nt sqlite3Invoke
2e950 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79  BusyHandler(Busy
2e960 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74 65  Handler*, sqlite
2e970 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73 71  3_file*);.int sq
2e980 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69  lite3FindDb(sqli
2e990 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
2e9a0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
2e9b0 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Name(sqlite3 *, 
2e9c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
2e9d0 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73  nt sqlite3Analys
2e9e0 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c  isLoad(sqlite3*,
2e9f0 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73  int iDB);.void s
2ea00 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65  qlite3DeleteInde
2ea10 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33  xSamples(sqlite3
2ea20 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  *,Index*);.void 
2ea30 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f  sqlite3DefaultRo
2ea40 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f  wEst(Index*);.vo
2ea50 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
2ea60 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
2ea70 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
2ea80 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b  int sqlite3IsLik
2ea90 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  eFunction(sqlite
2eaa0 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68  3*,Expr*,int*,ch
2eab0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2eac0 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
2ead0 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
2eae0 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
2eaf0 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
2eb00 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2eb10 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
2eb20 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
2eb30 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
2eb40 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
2eb50 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
2eb60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2eb70 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b  e3KeyInfoUnref(K
2eb80 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
2eb90 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2eba0 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  oRef(KeyInfo*);.
2ebb0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2ebc0 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50  KeyInfoOfIndex(P
2ebd0 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  arse*, Index*);.
2ebe0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2ebf0 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70 72 4c  KeyInfoFromExprL
2ec00 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ist(Parse*, Expr
2ec10 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
2ec20 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
2ec30 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
2ec40 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
2ec50 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
2ec60 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2ec70 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
2ec80 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
2ec90 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
2eca0 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28  void *,.  void (
2ecb0 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2ecc0 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2ecd0 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
2ece0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2ecf0 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2ed00 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20  e3_value **), . 
2ed10 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2ed20 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76  3_context*),.  v
2ed30 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2ed40 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69  context*),.  voi
2ed50 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2ed60 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2ed70 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a 20  e3_value **), . 
2ed80 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
2ed90 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
2eda0 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f 6f 70  void sqlite3Noop
2edb0 44 65 73 74 72 75 63 74 6f 72 28 76 6f 69 64 2a  Destructor(void*
2edc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2edd0 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a  omFault(sqlite3*
2ede0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2edf0 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  omClear(sqlite3*
2ee00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
2ee10 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
2ee20 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
2ee30 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
2ee40 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
2ee50 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
2ee60 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
2ee70 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68  m*, sqlite3*, ch
2ee80 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  ar*, int, int);.
2ee90 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
2eea0 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41  AccumFinish(StrA
2eeb0 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
2eec0 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e  ite3SelectDestIn
2eed0 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69  it(SelectDest*,i
2eee0 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
2eef0 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75  qlite3CreateColu
2ef00 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  mnExpr(sqlite3 *
2ef10 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74  , SrcList *, int
2ef20 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71  , int);..void sq
2ef30 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61  lite3BackupResta
2ef40 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  rt(sqlite3_backu
2ef50 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  p *);.void sqlit
2ef60 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73  e3BackupUpdate(s
2ef70 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c  qlite3_backup *,
2ef80 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20   Pgno, const u8 
2ef90 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  *);..#ifndef SQL
2efa0 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
2efb0 59 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  Y.int sqlite3Exp
2efc0 72 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c  rCheckIN(Parse*,
2efd0 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   Expr*);.#else.#
2efe0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
2eff0 78 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20  xprCheckIN(x,y) 
2f000 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66  SQLITE_OK.#endif
2f010 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2f020 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
2f030 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74  STAT4.void sqlit
2f040 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f  e3AnalyzeFunctio
2f050 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
2f060 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53  lite3Stat4ProbeS
2f070 65 74 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72  etValue(.    Par
2f080 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63  se*,Index*,Unpac
2f090 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72  kedRecord**,Expr
2f0a0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b  *,int,int,int*);
2f0b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
2f0c0 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50  4ValueFromExpr(P
2f0d0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38  arse*, Expr*, u8
2f0e0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
2f0f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f100 53 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55  Stat4ProbeFree(U
2f110 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b  npackedRecord*);
2f120 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
2f130 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a  4Column(sqlite3*
2f140 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
2f150 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33  nt, int, sqlite3
2f160 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20  _value**);.char 
2f170 73 71 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75  sqlite3IndexColu
2f180 6d 6e 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  mnAffinity(sqlit
2f190 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  e3*, Index*, int
2f1a0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
2f1b0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
2f1c0 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65  o the LEMON-gene
2f1d0 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a  rated parser.*/.
2f1e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
2f1f0 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f  MALGAMATION.  vo
2f200 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65  id *sqlite3Parse
2f210 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28  rAlloc(void*(*)(
2f220 75 36 34 29 2c 20 50 61 72 73 65 2a 29 3b 0a 20  u64), Parse*);. 
2f230 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
2f240 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76  serFree(void*, v
2f250 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
2f260 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2f270 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
2f280 20 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e   int, Token);.in
2f290 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  t sqlite3ParserF
2f2a0 61 6c 6c 62 61 63 6b 28 69 6e 74 29 3b 0a 23 69  allback(int);.#i
2f2b0 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
2f2c0 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20  TACKDEPTH.  int 
2f2d0 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61  sqlite3ParserSta
2f2e0 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23  ckPeak(void*);.#
2f2f0 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
2f300 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
2f310 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
2f320 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f330 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
2f340 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
2f350 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
2f360 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
2f370 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2f380 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
2f390 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
2f3a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2f3b0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
2f3c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
2f3d0 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
2f3e0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
2f3f0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
2f400 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2f410 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
2f420 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
2f430 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
2f440 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
2f450 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
2f460 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
2f470 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2f480 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2f490 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
2f4a0 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a  te3VtabClear(Y).
2f4b0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2f4c0 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53  3VtabSync(X,Y) S
2f4d0 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
2f4e0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ne sqlite3VtabRo
2f4f0 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66  llback(X).#  def
2f500 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
2f510 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69  ommit(X).#  defi
2f520 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
2f530 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65  Sync(db) 0.#  de
2f540 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2f550 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  Lock(X).#  defin
2f560 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
2f570 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
2f580 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2f590 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
2f5a0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
2f5b0 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
2f5c0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
2f5d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
2f5e0 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
2f5f0 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
2f600 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2f610 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
2f620 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
2f630 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2f640 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
2f650 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
2f660 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
2f670 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
2f680 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b  te3 *db, Vdbe*);
2f690 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2f6a0 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69  tabRollback(sqli
2f6b0 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74  te3 *db);.   int
2f6c0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
2f6d0 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  it(sqlite3 *db);
2f6e0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2f6f0 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20  VtabLock(VTable 
2f700 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2f710 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54  te3VtabUnlock(VT
2f720 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2f730 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2f740 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29  ckList(sqlite3*)
2f750 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
2f760 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71  VtabSavepoint(sq
2f770 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e  lite3 *, int, in
2f780 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  t);.   void sqli
2f790 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
2f7a0 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74  msg(Vdbe*, sqlit
2f7b0 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54  e3_vtab*);.   VT
2f7c0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
2f7d0 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
2f7e0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64   Table*);.   Mod
2f7f0 75 6c 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62  ule *sqlite3Vtab
2f800 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20  CreateModule(.  
2f810 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20     sqlite3*,.   
2f820 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20    const char*,. 
2f830 20 20 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65      const sqlite
2f840 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20  3_module*,.     
2f850 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64  void*,.     void
2f860 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b  (*)(void*).   );
2f870 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2f880 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
2f890 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e   ((db)->nVTrans>
2f8a0 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61  0 && (db)->aVTra
2f8b0 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e  ns==0).#endif.in
2f8c0 74 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  t sqlite3VtabEpo
2f8d0 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28  nymousTableInit(
2f8e0 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  Parse*,Module*);
2f8f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2f900 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43  bEponymousTableC
2f910 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f  lear(sqlite3*,Mo
2f920 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dule*);.void sql
2f930 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
2f940 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
2f950 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2f960 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
2f970 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2f980 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
2f990 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2f9a0 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
2f9b0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2f9c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2f9d0 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
2f9e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f9f0 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
2fa00 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
2fa10 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2fa20 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
2fa30 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2fa40 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
2fa50 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2fa60 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
2fa70 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
2fa80 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
2fa90 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
2faa0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2fab0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2fac0 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
2fad0 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
2fae0 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
2faf0 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
2fb00 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
2fb10 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
2fb20 67 2c 20 45 78 70 72 2a 29 3b 0a 73 71 6c 69 74  g, Expr*);.sqlit
2fb30 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
2fb40 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28  StmtCurrentTime(
2fb50 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2fb60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
2fb70 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
2fb80 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
2fb90 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
2fba0 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
2fbb0 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
2fbc0 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
2fbd0 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tmt *);.void sql
2fbe0 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28  ite3ParserReset(
2fbf0 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
2fc00 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f  SQLITE_ENABLE_NO
2fc10 52 4d 41 4c 49 5a 45 0a 63 68 61 72 20 2a 73 71  RMALIZE.char *sq
2fc20 6c 69 74 65 33 4e 6f 72 6d 61 6c 69 7a 65 28 56  lite3Normalize(V
2fc30 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
2fc40 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
2fc50 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
2fc60 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Vdbe*);.void sql
2fc70 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63  ite3ExprListChec
2fc80 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20  kLength(Parse*, 
2fc90 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
2fca0 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71   char*);.CollSeq
2fcb0 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43   *sqlite3BinaryC
2fcc0 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61  ompareCollSeq(Pa
2fcd0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45  rse *, Expr *, E
2fce0 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  xpr *);.int sqli
2fcf0 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28  te3TempInMemory(
2fd00 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b  const sqlite3*);
2fd10 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2fd20 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
2fd30 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65  ame(int);.#ifnde
2fd40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2fd50 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  L.  int sqlite3C
2fd60 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65  heckpoint(sqlite
2fd70 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
2fd80 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74  t*, int*);.  int
2fd90 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75   sqlite3WalDefau
2fda0 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c  ltHook(void*,sql
2fdb0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
2fdc0 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23  *,int);.#endif.#
2fdd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2fde0 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73  IT_CTE.  With *s
2fdf0 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61  qlite3WithAdd(Pa
2fe00 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e  rse*,With*,Token
2fe10 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65  *,ExprList*,Sele
2fe20 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ct*);.  void sql
2fe30 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73  ite3WithDelete(s
2fe40 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a  qlite3*,With*);.
2fe50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
2fe60 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57  thPush(Parse*, W
2fe70 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65  ith*, u8);.#else
2fe80 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2fe90 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a  WithPush(x,y,z).
2fea0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
2feb0 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23  ithDelete(x,y).#
2fec0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
2fed0 4c 49 54 45 5f 4f 4d 49 54 5f 55 50 53 45 52 54  LITE_OMIT_UPSERT
2fee0 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74  .  Upsert *sqlit
2fef0 65 33 55 70 73 65 72 74 4e 65 77 28 73 71 6c 69  e3UpsertNew(sqli
2ff00 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  te3*,ExprList*,E
2ff10 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
2ff20 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
2ff30 6c 69 74 65 33 55 70 73 65 72 74 44 65 6c 65 74  lite3UpsertDelet
2ff40 65 28 73 71 6c 69 74 65 33 2a 2c 55 70 73 65 72  e(sqlite3*,Upser
2ff50 74 2a 29 3b 0a 20 20 55 70 73 65 72 74 20 2a 73  t*);.  Upsert *s
2ff60 71 6c 69 74 65 33 55 70 73 65 72 74 44 75 70 28  qlite3UpsertDup(
2ff70 73 71 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a  sqlite3*,Upsert*
2ff80 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2ff90 55 70 73 65 72 74 41 6e 61 6c 79 7a 65 54 61 72  UpsertAnalyzeTar
2ffa0 67 65 74 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  get(Parse*,SrcLi
2ffb0 73 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20  st*,Upsert*);.  
2ffc0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 73 65  void sqlite3Upse
2ffd0 72 74 44 6f 55 70 64 61 74 65 28 50 61 72 73 65  rtDoUpdate(Parse
2ffe0 2a 2c 55 70 73 65 72 74 2a 2c 54 61 62 6c 65 2a  *,Upsert*,Table*
2fff0 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 23 65  ,Index*,int);.#e
30000 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  lse.#define sqli
30010 74 65 33 55 70 73 65 72 74 4e 65 77 28 76 2c 77  te3UpsertNew(v,w
30020 2c 78 2c 79 2c 7a 29 20 28 28 55 70 73 65 72 74  ,x,y,z) ((Upsert
30030 2a 29 30 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  *)0).#define sql
30040 69 74 65 33 55 70 73 65 72 74 44 65 6c 65 74 65  ite3UpsertDelete
30050 28 78 2c 79 29 0a 23 64 65 66 69 6e 65 20 73 71  (x,y).#define sq
30060 6c 69 74 65 33 55 70 73 65 72 74 44 75 70 28 78  lite3UpsertDup(x
30070 2c 79 29 20 20 20 20 20 20 20 28 28 55 70 73 65  ,y)       ((Upse
30080 72 74 2a 29 30 29 0a 23 65 6e 64 69 66 0a 0a 0a  rt*)0).#endif...
30090 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
300a0 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
300b0 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
300c0 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
300d0 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
300e0 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
300f0 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
30100 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
30110 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
30120 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
30130 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
30140 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
30150 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
30160 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
30170 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
30180 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
30190 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
301a0 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
301b0 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
301c0 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
301d0 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
301e0 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72  onality is.** pr
301f0 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
30200 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
30210 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
30220 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
30230 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
30240 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
30250 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
30260 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
30270 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
30280 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
30290 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
302a0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
302b0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
302c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
302d0 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
302e0 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c   SrcList *, Tabl
302f0 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
30300 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72  te3FkActions(Par
30310 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
30320 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
30330 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
30340 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
30350 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
30360 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
30370 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
30380 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
30390 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
303a0 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
303b0 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
303c0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
303d0 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
303e0 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
303f0 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  ne sqlite3FkChec
30400 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  k(a,b,c,d,e,f). 
30410 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30420 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c  FkDropTable(a,b,
30430 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  c).  #define sql
30440 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c  ite3FkOldmask(a,
30450 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20 23  b)         0.  #
30460 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
30470 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64  Required(a,b,c,d
30480 29 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65  )    0.  #define
30490 20 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65   sqlite3FkRefere
304a0 6e 63 65 73 28 61 29 20 20 20 20 20 20 20 20 30  nces(a)        0
304b0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
304c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
304d0 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73  IGN_KEY.  void s
304e0 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73  qlite3FkDelete(s
304f0 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a  qlite3 *, Table*
30500 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
30510 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61  FkLocateIndex(Pa
30520 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79  rse*,Table*,FKey
30530 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29  *,Index**,int**)
30540 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
30550 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  e sqlite3FkDelet
30560 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65  e(a,b).  #define
30570 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
30580 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29  Index(a,b,c,d,e)
30590 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
305a0 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20  Available fault 
305b0 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75  injectors.  Shou
305c0 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62  ld be numbered b
305d0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e  eginning with 0.
305e0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
305f0 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
30600 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64  _MALLOC     0.#d
30610 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
30620 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54  LTINJECTOR_COUNT
30630 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
30640 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
30650 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c  the code in faul
30660 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65  t.c used for ide
30670 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e  ntifying "benign
30680 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  ".** malloc fail
30690 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e  ures. This is on
306a0 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51  ly present if SQ
306b0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
306c0 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65  ** is not define
306d0 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
306e0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
306f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
30700 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
30710 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
30720 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
30730 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
30740 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
30750 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
30760 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
30770 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
30780 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
30790 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
307a0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
307b0 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  om sqlite3FindIn
307c0 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69  Index().*/.#defi
307d0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
307e0 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  D        1   /* 
307f0 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64  Search the rowid
30800 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
30810 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
30820 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32  X_EPH          2
30830 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20     /* Search an 
30840 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65  ephemeral b-tree
30850 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
30860 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20  NDEX_INDEX_ASC  
30870 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    3   /* Existin
30880 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e  g index ASCENDIN
30890 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
308a0 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43  INDEX_INDEX_DESC
308b0 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69     4   /* Existi
308c0 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44  ng index DESCEND
308d0 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
308e0 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20  N_INDEX_NOOP    
308f0 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74       5   /* No t
30900 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20  able available. 
30910 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20  Use comparisons 
30920 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  */./*.** Allowed
30930 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33   flags for the 3
30940 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  rd parameter to 
30950 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
30960 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ex()..*/.#define
30970 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f   IN_INDEX_NOOP_O
30980 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  K     0x0001  /*
30990 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e   OK to return IN
309a0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23  _INDEX_NOOP */.#
309b0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
309c0 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30  MEMBERSHIP  0x00
309d0 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  02  /* IN operat
309e0 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62  or used for memb
309f0 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23  ership test */.#
30a00 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
30a10 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30  LOOP        0x00
30a20 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  04  /* IN operat
30a30 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f  or used as a loo
30a40 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  p */.int sqlite3
30a50 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73  FindInIndex(Pars
30a60 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32  e *, Expr *, u32
30a70 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 2c 20 69 6e  , int*, int*, in
30a80 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65  t*);..int sqlite
30a90 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
30aa0 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
30ab0 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
30ac0 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
30ad0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
30ae0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
30af0 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20  te3_vfs *);.#if 
30b00 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
30b10 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
30b20 54 45 29 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65  TE) \. || define
30b30 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
30b40 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
30b50 54 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  TE).  int sqlite
30b60 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73  3JournalCreate(s
30b70 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
30b80 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
30b90 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65  te3JournalIsInMe
30ba0 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c  mory(sqlite3_fil
30bb0 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e *p);.void sqli
30bc0 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
30bd0 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
30be0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
30bf0 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64  ExprSetHeightAnd
30c00 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61  Flags(Parse *pPa
30c10 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23  rse, Expr *p);.#
30c20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
30c30 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
30c40 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
30c50 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20  prHeight(Select 
30c60 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
30c70 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
30c80 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
30c90 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
30ca0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
30cb0 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64  Height(x) 0.  #d
30cc0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
30cd0 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79  rCheckHeight(x,y
30ce0 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71  ).#endif..u32 sq
30cf0 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f  lite3Get4byte(co
30d00 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  nst u8*);.void s
30d10 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75  qlite3Put4byte(u
30d20 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65  8*, u32);..#ifde
30d30 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
30d40 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
30d50 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
30d60 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71  ectionBlocked(sq
30d70 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33  lite3 *, sqlite3
30d80 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
30d90 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
30da0 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64  ocked(sqlite3 *d
30db0 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  b);.  void sqlit
30dc0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
30dd0 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
30de0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
30df0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
30e00 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20  onBlocked(x,y). 
30e10 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30e20 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
30e30 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  ed(x).  #define 
30e40 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
30e50 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69  nClosed(x).#endi
30e60 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
30e70 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  _DEBUG.  void sq
30e80 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
30e90 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
30ea0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
30eb0 6e 65 64 28 59 59 43 4f 56 45 52 41 47 45 29 0a  ned(YYCOVERAGE).
30ec0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
30ed0 73 65 72 43 6f 76 65 72 61 67 65 28 46 49 4c 45  serCoverage(FILE
30ee0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
30ef0 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
30f00 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65  ENABLE IOTRACE e
30f10 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67  xists then the g
30f20 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a  lobal variable.*
30f30 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  * sqlite3IoTrace
30f40 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
30f50 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72   a printf-like r
30f60 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a  outine used to.*
30f70 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63  * print I/O trac
30f80 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f  ing messages..*/
30f90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
30fa0 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
30fb0 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
30fc0 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
30fd0 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
30fe0 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
30ff0 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
31000 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
31010 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c  ;.SQLITE_API SQL
31020 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20  ITE_EXTERN void 
31030 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73  (SQLITE_CDECL *s
31040 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
31050 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
31060 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
31070 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
31080 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
31090 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
310a0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
310b0 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
310c0 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
310d0 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
310e0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
310f0 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
31100 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
31110 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
31120 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
31130 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
31140 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
31150 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
31160 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
31170 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
31180 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
31190 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
311a0 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
311b0 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
311c0 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
311d0 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
311e0 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
311f0 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
31200 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
31210 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
31220 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
31230 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
31240 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
31250 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
31260 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
31270 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
31280 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
31290 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
312a0 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
312b0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
312c0 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
312d0 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
312e0 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
312f0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
31300 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
31310 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
31320 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
31330 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
31340 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
31350 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
31360 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
31370 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
31380 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
31390 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
313a0 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
313b0 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
313c0 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
313d0 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
313e0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
313f0 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
31400 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
31410 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
31420 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
31430 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
31440 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
31450 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
31460 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
31470 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
31480 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
31490 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
314a0 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
314b0 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
314c0 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
314d0 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
314e0 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
314f0 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
31500 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
31510 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
31520 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
31530 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
31540 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
31550 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
31560 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
31570 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
31580 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
31590 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a  s constraint..**
315a0 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20  .** All of this 
315b0 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70  is no-op for a p
315c0 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e  roduction build.
315d0 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20    It only comes 
315e0 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65  into.** play whe
315f0 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d  n the SQLITE_MEM
31600 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69  DEBUG compile-ti
31610 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  me option is use
31620 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
31630 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76  ITE_MEMDEBUG.  v
31640 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  oid sqlite3Memde
31650 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a  bugSetType(void*
31660 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
31670 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
31680 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
31690 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
316a0 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c  bugNoType(void*,
316b0 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  u8);.#else.# def
316c0 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
316d0 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20  bugSetType(X,Y) 
316e0 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64   /* no-op */.# d
316f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
31700 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59  debugHasType(X,Y
31710 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  )  1.# define sq
31720 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
31730 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e  ype(X,Y)   1.#en
31740 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54  dif.#define MEMT
31750 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30  YPE_HEAP       0
31760 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20  x01  /* General 
31770 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  heap allocations
31780 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
31790 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30  YPE_LOOKASIDE  0
317a0 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61  x02  /* Heap tha
317b0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
317c0 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23  n lookaside */.#
317d0 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50  define MEMTYPE_P
317e0 43 41 43 48 45 20 20 20 20 20 30 78 30 34 20 20  CACHE     0x04  
317f0 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c  /* Page cache al
31800 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a  locations */../*
31810 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e  .** Threading in
31820 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53  terface.*/.#if S
31830 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
31840 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73  _THREADS>0.int s
31850 71 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61  qlite3ThreadCrea
31860 74 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  te(SQLiteThread*
31870 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a  *,void*(*)(void*
31880 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  ),void*);.int sq
31890 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28  lite3ThreadJoin(
318a0 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76  SQLiteThread*, v
318b0 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  oid**);.#endif..
318c0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
318d0 54 45 5f 45 4e 41 42 4c 45 5f 44 42 50 41 47 45  TE_ENABLE_DBPAGE
318e0 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65  _VTAB) || define
318f0 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69  d(SQLITE_TEST).i
31900 6e 74 20 73 71 6c 69 74 65 33 44 62 70 61 67 65  nt sqlite3Dbpage
31910 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
31920 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  *);.#endif.#if d
31930 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
31940 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42  ABLE_DBSTAT_VTAB
31950 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
31960 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71  ITE_TEST).int sq
31970 6c 69 74 65 33 44 62 73 74 61 74 52 65 67 69 73  lite3DbstatRegis
31980 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ter(sqlite3*);.#
31990 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
319a0 65 33 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65  e3ExprVectorSize
319b0 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
319c0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
319d0 56 65 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78  Vector(Expr *pEx
319e0 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
319f0 65 33 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62  e3VectorFieldSub
31a00 65 78 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29  expr(Expr*, int)
31a10 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
31a20 78 70 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c  xprForVectorFiel
31a30 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69  d(Parse*,Expr*,i
31a40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
31a50 33 56 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28  3VectorErrorMsg(
31a60 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
31a70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31a80 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
31a90 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73 74 20 63  ON_DIAGS.const c
31aa0 68 61 72 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d  har **sqlite3Com
31ab0 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20  pileOptions(int 
31ac0 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a  *pnOpt);.#endif.
31ad0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
31ae0 45 49 4e 54 5f 48 20 2a 2f 0a                    EINT_H */.