/ Hex Artifact Content
Login

Artifact 6f26888c81854b1cc8c9a285d75411636a7c6444227e1953a39b2c52323441d5:


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 0a 23 20 20  fined(__x86).#  
6950: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
6960: 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a  TRSIZE 4.# else.
6970: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6980: 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e  E_PTRSIZE 8.# en
6990: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  dif.#endif../* T
69a0: 68 65 20 75 70 74 72 20 74 79 70 65 20 69 73 20  he uptr type is 
69b0: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
69c0: 67 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  ger large enough
69d0: 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74   to hold a point
69e0: 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  er.*/.#if define
69f0: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
6a00: 0a 20 20 74 79 70 65 64 65 66 20 75 69 6e 74 70  .  typedef uintp
6a10: 74 72 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66  tr_t uptr;.#elif
6a20: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d   SQLITE_PTRSIZE=
6a30: 3d 34 0a 20 20 74 79 70 65 64 65 66 20 75 33 32  =4.  typedef u32
6a40: 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74   uptr;.#else.  t
6a50: 79 70 65 64 65 66 20 75 36 34 20 75 70 74 72 3b  ypedef u64 uptr;
6a60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
6a70: 68 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e  he SQLITE_WITHIN
6a80: 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68  (P,S,E) macro ch
6a90: 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70  ecks to see if p
6aa0: 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20  ointer P points 
6ab0: 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20  to.** something 
6ac0: 62 65 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75  between S (inclu
6ad0: 73 69 76 65 29 20 61 6e 64 20 45 20 28 65 78 63  sive) and E (exc
6ae0: 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49  lusive)..**.** I
6af0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53  n other words, S
6b00: 20 69 73 20 61 20 62 75 66 66 65 72 20 61 6e 64   is a buffer and
6b10: 20 45 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20   E is a pointer 
6b20: 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
6b30: 65 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65  e after.** the e
6b40: 6e 64 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20  nd of buffer S. 
6b50: 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75   This macro retu
6b60: 72 6e 73 20 74 72 75 65 20 69 66 20 50 20 70 6f  rns true if P po
6b70: 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e  ints to somethin
6b80: 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77  g.** contained w
6b90: 69 74 68 69 6e 20 74 68 65 20 62 75 66 66 65 72  ithin the buffer
6ba0: 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   S..*/.#define S
6bb0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
6bc0: 2c 45 29 20 28 28 28 75 70 74 72 29 28 50 29 3e  ,E) (((uptr)(P)>
6bd0: 3d 28 75 70 74 72 29 28 53 29 29 26 26 28 28 75  =(uptr)(S))&&((u
6be0: 70 74 72 29 28 50 29 3c 28 75 70 74 72 29 28 45  ptr)(P)<(uptr)(E
6bf0: 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ))).../*.** Macr
6c00: 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
6c10: 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68  whether the mach
6c20: 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69  ine is big or li
6c30: 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20  ttle endian,.** 
6c40: 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
6c50: 6f 74 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e  ot that determin
6c60: 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d  ation is run-tim
6c70: 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e or compile-tim
6c80: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73  e..**.** For bes
6c90: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61  t performance, a
6ca0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
6cb0: 65 20 74 6f 20 67 75 65 73 73 20 61 74 20 74 68  e to guess at th
6cc0: 65 20 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20  e byte-order.** 
6cd0: 75 73 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65  using C-preproce
6ce0: 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66  ssor macros.  If
6cf0: 20 74 68 61 74 20 69 73 20 75 6e 73 75 63 63 65   that is unsucce
6d00: 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20  ssful, or if.** 
6d10: 2d 44 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  -DSQLITE_BYTEORD
6d20: 45 52 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65  ER=0 is set, the
6d30: 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20  n byte-order is 
6d40: 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74  determined.** at
6d50: 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69   run-time..*/.#i
6d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54  fndef SQLITE_BYT
6d70: 45 4f 52 44 45 52 0a 23 20 69 66 20 64 65 66 69  EORDER.# if defi
6d80: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
6d90: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
6da0: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
6db0: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
6dc0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
6dd0: 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e  x86_64) || defin
6de0: 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c  ed(__x86_64__) |
6df0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34  | defined(_M_X64
6e00: 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  )  ||    \.     
6e10: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34  defined(_M_AMD64
6e20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
6e30: 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69  ARM)     || defi
6e40: 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20  ned(__x86)   || 
6e50: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
6e60: 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20 20 20 64  d(__arm__).#   d
6e70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6e80: 45 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23  EORDER    1234.#
6e90: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 73 70   elif defined(sp
6ea0: 61 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e  arc)    || defin
6eb0: 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23 20 20 20  ed(__ppc__).#   
6ec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6ed0: 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a  TEORDER    4321.
6ee0: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
6ef0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
6f00: 45 52 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e  ER 0.# endif.#en
6f10: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 42  dif.#if SQLITE_B
6f20: 59 54 45 4f 52 44 45 52 3d 3d 34 33 32 31 0a 23  YTEORDER==4321.#
6f30: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6f40: 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20  IGENDIAN    1.# 
6f50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
6f60: 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64  TTLEENDIAN 0.# d
6f70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
6f80: 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45  16NATIVE  SQLITE
6f90: 5f 55 54 46 31 36 42 45 0a 23 65 6c 69 66 20 53  _UTF16BE.#elif S
6fa0: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d  QLITE_BYTEORDER=
6fb0: 3d 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53  =1234.# define S
6fc0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
6fd0: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
6fe0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
6ff0: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
7000: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
7010: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
7020: 23 65 6c 73 65 0a 23 20 69 66 64 65 66 20 53 51  #else.# ifdef SQ
7030: 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
7040: 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  N.  const int sq
7050: 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 20  lite3one = 1;.# 
7060: 65 6c 73 65 0a 20 20 65 78 74 65 72 6e 20 63 6f  else.  extern co
7070: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
7080: 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  ne;.# endif.# de
7090: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
70a0: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
70b0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
70c0: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
70d0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
70e0: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
70f0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
7100: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
7110: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
7120: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
7130: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
7140: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
7150: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
7160: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
7170: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
7180: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
7190: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
71a0: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
71b0: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
71c0: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
71d0: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
71e0: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
71f0: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
7200: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
7210: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
7220: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
7230: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
7240: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
7250: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
7260: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a  EST_INT64)../*.*
7270: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
7280: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
7290: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
72a0: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
72b0: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
72c0: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
72d0: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
72e0: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
72f0: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
7300: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
7310: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
7320: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
7330: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
7340: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
7350: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
7360: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
7370: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
7380: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
7390: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
73a0: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
73b0: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
73c0: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
73d0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
73e0: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
73f0: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
7400: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
7410: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
7420: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
7430: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
7440: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
7450: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
7460: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
7470: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
7480: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
7490: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
74a0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
74b0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
74c0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
74d0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
74e0: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
74f0: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
7500: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
7510: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
7520: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
7530: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
7540: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
7550: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
7560: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
7570: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
7580: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
7590: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
75a0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
75b0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
75c0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
75d0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
75e0: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
75f0: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
7600: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
7610: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7620: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7630: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
7640: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
7650: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
7660: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
7670: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
7680: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
7690: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
76a0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
76b0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
76c0: 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  nals.h>.#endif.#
76d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
76e0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
76f0: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
7700: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
7710: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
7720: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
7730: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
7740: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
7750: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
7760: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
7770: 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a  (__FreeBSD__) \.
7780: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44    || defined(__D
7790: 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20  ragonFly__).#   
77a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
77b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66  X_MMAP_SIZE 0x7f
77c0: 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34  ff0000  /* 21474
77d0: 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a  18112 */.# else.
77e0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
77f0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7800: 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  0.# endif.#endif
7810: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ../*.** The defa
7820: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
7830: 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61   zero on all pla
7840: 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65  tforms.  Or, eve
7850: 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a  n if a larger.**
7860: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
7870: 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ZE is specified 
7880: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
7890: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
78a0: 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65  it does.** not e
78b0: 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75  xceed the maximu
78c0: 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a  m mmap size..*/.
78d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
78e0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
78f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7900: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7910: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  ZE 0.#endif.#if 
7920: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
7930: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
7940: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
7950: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
7960: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
7970: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
7980: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
7990: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
79a0: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
79b0: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
79c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
79d0: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
79e0: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
79f0: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
7a00: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
7a10: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
7a20: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
7a30: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
7a40: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
7a50: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7a60: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
7a70: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
7a80: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
7a90: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7aa0: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
7ab0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ac0: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
7ad0: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
7ae0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
7af0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7b00: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
7b10: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
7b20: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
7b30: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
7b40: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7b50: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
7b60: 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43  /*.** SELECTTRAC
7b70: 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62  E_ENABLED will b
7b80: 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20  e either 1 or 0 
7b90: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
7ba0: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74  ther or not.** t
7bb0: 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20  he Select query 
7bc0: 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e  generator tracin
7bd0: 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65  g logic is turne
7be0: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  d on..*/.#if def
7bf0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
7c00: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
7c10: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
7c20: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
7c30: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
7c40: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7c50: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
7c60: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
7c70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7c80: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
7c90: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
7ca0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7cb0: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
7cc0: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
7cd0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69  ..**.** The sqli
7ce0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
7cf0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
7d00: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
7d10: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
7d20: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
7d30: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
7d40: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
7d50: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
7d60: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
7d70: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
7d80: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
7d90: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
7da0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
7db0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
7dc0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
7dd0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
7de0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
7df0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7e00: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
7e10: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7e20: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 42 75 73  r {.  int (*xBus
7e30: 79 48 61 6e 64 6c 65 72 29 28 76 6f 69 64 20 2a  yHandler)(void *
7e40: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
7e50: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
7e60: 20 20 76 6f 69 64 20 2a 70 42 75 73 79 41 72 67    void *pBusyArg
7e70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7e80: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
7e90: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
7ea0: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
7eb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7ec0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72           /* Incr
7ed0: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
7ee0: 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 20  h busy call */. 
7ef0: 20 75 38 20 62 45 78 74 72 61 46 69 6c 65 41 72   u8 bExtraFileAr
7f00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7f10: 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 73 71     /* Include sq
7f20: 6c 69 74 65 33 5f 66 69 6c 65 20 61 73 20 63 61  lite3_file as ca
7f30: 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f 0a 7d 3b  llback arg */.};
7f40: 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20  ../*.** Name of 
7f50: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
7f60: 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ase table.  The 
7f70: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
7f80: 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70  table.** is a sp
7f90: 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74  ecial table that
7fa0: 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73   holds the names
7fb0: 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20   and attributes 
7fc0: 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74  of all.** user t
7fd0: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
7fe0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  s..*/.#define MA
7ff0: 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20  STER_NAME       
8000: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a  "sqlite_master".
8010: 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53  #define TEMP_MAS
8020: 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74  TER_NAME  "sqlit
8030: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a  e_temp_master"..
8040: 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70  /*.** The root-p
8050: 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  age of the maste
8060: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
8070: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
8080: 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31  TER_ROOT       1
8090: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65  ../*.** The name
80a0: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
80b0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80c0: 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29   SCHEMA_TABLE(x)
80d0: 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42    ((!OMIT_TEMPDB
80e0: 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d  )&&(x==1)?TEMP_M
80f0: 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45  ASTER_NAME:MASTE
8100: 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41  R_NAME)../*.** A
8110: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63   convenience mac
8120: 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ro that returns 
8130: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c  the number of el
8140: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20  ements in.** an 
8150: 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e  array..*/.#defin
8160: 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20  e ArraySize(X)  
8170: 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
8180: 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29  X)/sizeof(X[0]))
8190: 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  )../*.** Determi
81a0: 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ne if the argume
81b0: 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66  nt is a power of
81c0: 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20   two.*/.#define 
81d0: 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20  IsPowerOfTwo(X) 
81e0: 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d  (((X)&((X)-1))==
81f0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  0)../*.** The fo
8200: 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73  llowing value as
8210: 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65   a destructor me
8220: 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74  ans to use sqlit
8230: 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54  e3DbFree()..** T
8240: 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  he sqlite3DbFree
8250: 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69  () routine requi
8260: 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65  res two paramete
8270: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  rs instead of th
8280: 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74  e.** one paramet
8290: 65 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74  er that destruct
82a0: 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ors normally wan
82b0: 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74  t.  So we have t
82c0: 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74  o introduce.** t
82d0: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
82e0: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
82f0: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
8300: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a  fferently.  Any.
8310: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
8320: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
8330: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
8340: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
8350: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
8360: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
8370: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8380: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
8390: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
83a0: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
83b0: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
83c0: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
83d0: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
83e0: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
83f0: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
8400: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
8410: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
8420: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
8430: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
8440: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
8450: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
8460: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
8470: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
8480: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
8490: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
84a0: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
84b0: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
84c0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
84d0: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
84e0: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
84f0: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
8500: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
8510: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
8520: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
8530: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
8540: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
8550: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
8560: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
8570: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
8580: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
8590: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
85a0: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
85b0: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
85c0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
85d0: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
85e0: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
85f0: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
8600: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
8610: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
8620: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
8630: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
8640: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
8650: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
8660: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
8670: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
8680: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
8690: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
86a0: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
86b0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
86c0: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
86d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
86e0: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
86f0: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
8700: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
8710: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
8720: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
8730: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
8740: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8750: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
8760: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
8770: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
8780: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
8790: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
87a0: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
87b0: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
87c0: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
87d0: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
87e0: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
87f0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 47  _WSD.  #define G
8800: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
8810: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
8820: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
8830: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
8840: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
8850: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
8860: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
8870: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
8880: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
8890: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
88a0: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
88b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
88c0: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
88d0: 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e  ately.** left un
88e0: 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  used within the 
88f0: 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69  body of a functi
8900: 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79  on. This usually
8910: 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a   happens when.**
8920: 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63   a function is c
8930: 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63  alled via a func
8940: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f  tion pointer. Fo
8950: 72 20 65 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a  r example the.**
8960: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
8970: 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67  of an SQL aggreg
8980: 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63  ate step callbac
8990: 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68  k may not use th
89a0: 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69  e.** parameter i
89b0: 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75  ndicating the nu
89c0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
89d0: 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
89e0: 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66  aggregate,.** if
89f0: 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74   it knows that t
8a00: 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20  his is enforced 
8a10: 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a  elsewhere..**.**
8a20: 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   When a function
8a30: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
8a40: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69  t used at all wi
8a50: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
8a60: 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20   a function,.** 
8a70: 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20  it is generally 
8a80: 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20  named "NotUsed" 
8a90: 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f  or "NotUsed2" to
8aa0: 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65   make things eve
8ab0: 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f  n clearer..** Ho
8ac0: 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63  wever, these mac
8ad0: 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ros may also be 
8ae0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
8af0: 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65   warnings relate
8b00: 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d to.** paramete
8b10: 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d  rs that may or m
8b20: 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64  ay not be used d
8b30: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70  epending on comp
8b40: 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  ilation options.
8b50: 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  .** For example 
8b60: 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73  those parameters
8b70: 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73   only used in as
8b80: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
8b90: 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63  s. In these.** c
8ba0: 61 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74  ases the paramet
8bb0: 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73  ers are named as
8bc0: 20 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63   per the usual c
8bd0: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  onventions..*/.#
8be0: 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41  define UNUSED_PA
8bf0: 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64  RAMETER(x) (void
8c00: 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55  )(x).#define UNU
8c10: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78  SED_PARAMETER2(x
8c20: 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ,y) UNUSED_PARAM
8c30: 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50  ETER(x),UNUSED_P
8c40: 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a  ARAMETER(y)../*.
8c50: 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  ** Forward refer
8c60: 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75  ences to structu
8c70: 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  res.*/.typedef s
8c80: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67  truct AggInfo Ag
8c90: 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  gInfo;.typedef s
8ca0: 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
8cb0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74  t AuthContext;.t
8cc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
8cd0: 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e  toincInfo Autoin
8ce0: 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  cInfo;.typedef s
8cf0: 74 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74  truct Bitvec Bit
8d00: 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72  vec;.typedef str
8d10: 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c  uct CollSeq Coll
8d20: 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Seq;.typedef str
8d30: 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d  uct Column Colum
8d40: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
8d50: 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66  t Db Db;.typedef
8d60: 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53   struct Schema S
8d70: 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73  chema;.typedef s
8d80: 74 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b  truct Expr Expr;
8d90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8da0: 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73  ExprList ExprLis
8db0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8dc0: 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70  t FKey FKey;.typ
8dd0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8de0: 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44  Destructor FuncD
8df0: 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64  estructor;.typed
8e00: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8e10: 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64  f FuncDef;.typed
8e20: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8e30: 66 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73  fHash FuncDefHas
8e40: 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  h;.typedef struc
8e50: 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b  t IdList IdList;
8e60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e70: 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70  Index Index;.typ
8e80: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
8e90: 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d  xSample IndexSam
8ea0: 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ple;.typedef str
8eb0: 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79  uct KeyClass Key
8ec0: 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73  Class;.typedef s
8ed0: 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65  truct KeyInfo Ke
8ee0: 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  yInfo;.typedef s
8ef0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
8f00: 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64  Lookaside;.typed
8f10: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f20: 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64  ideSlot Lookasid
8f30: 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73  eSlot;.typedef s
8f40: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64  truct Module Mod
8f50: 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ule;.typedef str
8f60: 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
8f70: 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70  NameContext;.typ
8f80: 65 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73  edef struct Pars
8f90: 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66  e Parse;.typedef
8fa0: 20 73 74 72 75 63 74 20 50 72 65 55 70 64 61 74   struct PreUpdat
8fb0: 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70  e PreUpdate;.typ
8fc0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
8fd0: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
8fe0: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
9000: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
9010: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
9020: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
9030: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
9040: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
9050: 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69  edef struct SQLi
9060: 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54  teThread SQLiteT
9070: 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73  hread;.typedef s
9080: 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
9090: 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70   SelectDest;.typ
90a0: 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c  edef struct SrcL
90b0: 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70  ist SrcList;.typ
90c0: 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41  edef struct StrA
90d0: 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74  ccum StrAccum;.t
90e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
90f0: 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64  ble Table;.typed
9100: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c  ef struct TableL
9110: 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74  ock TableLock;.t
9120: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f  ypedef struct To
9130: 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64  ken Token;.typed
9140: 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69  ef struct TreeVi
9150: 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70  ew TreeView;.typ
9160: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
9170: 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70  ger Trigger;.typ
9180: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
9190: 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72  gerPrg TriggerPr
91a0: 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  g;.typedef struc
91b0: 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72  t TriggerStep Tr
91c0: 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64  iggerStep;.typed
91d0: 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b  ef struct Unpack
91e0: 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65  edRecord Unpacke
91f0: 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66  dRecord;.typedef
9200: 20 73 74 72 75 63 74 20 55 70 73 65 72 74 20 55   struct Upsert U
9210: 70 73 65 72 74 3b 0a 74 79 70 65 64 65 66 20 73  psert;.typedef s
9220: 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61  truct VTable VTa
9230: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9240: 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62  uct VtabCtx Vtab
9250: 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Ctx;.typedef str
9260: 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65  uct Walker Walke
9270: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
9280: 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72  t WhereInfo Wher
9290: 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  eInfo;.typedef s
92a0: 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68 3b  truct With With;
92b0: 0a 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a  ../* A VList obj
92c0: 65 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61  ect records a ma
92d0: 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61  pping between pa
92e0: 72 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c  rameters/variabl
92f0: 65 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20  es/wildcards.** 
9300: 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  in the SQL state
9310: 6d 65 6e 74 20 28 73 75 63 68 20 61 73 20 24 61  ment (such as $a
9320: 62 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79  bc, @pqr, or :xy
9330: 7a 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67  z) and the integ
9340: 65 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  er.** variable n
9350: 75 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65 64  umber associated
9360: 20 77 69 74 68 20 74 68 61 74 20 70 61 72 61 6d   with that param
9370: 65 74 65 72 2e 20 20 53 65 65 20 74 68 65 20 66  eter.  See the f
9380: 6f 72 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f  ormat descriptio
9390: 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69  n.** on the sqli
93a0: 74 65 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f  te3VListAdd() ro
93b0: 75 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69  utine for more i
93c0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56  nformation.  A V
93d0: 4c 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a  List is really.*
93e0: 2a 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20  * just an array 
93f0: 6f 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a  of integers..*/.
9400: 74 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73  typedef int VLis
9410: 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  t;../*.** Defer 
9420: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
9430: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
9440: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
9450: 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e   and.** "BusyHan
9460: 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20  dler" typedefs. 
9470: 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75  vdbe.h also requ
9480: 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68  ires a few of th
9490: 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e  e opaque.** poin
94a0: 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20  ter types (i.e. 
94b0: 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64  FuncDef) defined
94c0: 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c   above..*/.#incl
94d0: 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69  ude "btree.h".#i
94e0: 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a  nclude "vdbe.h".
94f0: 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e  #include "pager.
9500: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61  h".#include "pca
9510: 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  che.h".#include 
9520: 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  "os.h".#include 
9530: 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68  "mutex.h"../* Th
9540: 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  e SQLITE_EXTRA_D
9550: 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74  URABLE compile-t
9560: 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20  ime option used 
9570: 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75  to set the defau
9580: 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75  lt.** synchronou
9590: 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54  s setting to EXT
95a0: 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f  RA.  It is no lo
95b0: 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a  nger supported..
95c0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
95d0: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23  _EXTRA_DURABLE.#
95e0: 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c   warning Use SQL
95f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9600: 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61  HRONOUS=3 instea
9610: 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52  d of SQLITE_EXTR
9620: 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69  A_DURABLE.# defi
9630: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9640: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a  T_SYNCHRONOUS 3.
9650: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
9660: 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75  fault synchronou
9670: 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20  s levels..**.** 
9680: 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20 68  Note that (for h
9690: 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73  istorcal reasons
96a0: 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43  ) the PAGER_SYNC
96b0: 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73  HRONOUS_* macros
96c0: 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20   differ.** from 
96d0: 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  the SQLITE_DEFAU
96e0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76  LT_SYNCHRONOUS v
96f0: 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a  alue by 1..**.**
9700: 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45 52             PAGER
9710: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20  _SYNCHRONOUS    
9720: 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48     DEFAULT_SYNCH
9730: 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20  RONOUS.**   OFF 
9740: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9760: 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41      0.**   NORMA
9770: 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20  L        2      
9780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9790: 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20     1.**   FULL  
97a0: 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20          3       
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97c0: 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20    2.**   EXTRA  
97d0: 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20         4        
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52   3.**.** The "PR
9800: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
9810: 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f  " statement also
9820: 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62   uses the zero-b
9830: 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a  ased numbers..**
9840: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
9850: 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20   the zero-based 
9860: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
9870: 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61   for all externa
9880: 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20  l interfaces.** 
9890: 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65  and the one-base
98a0: 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  d values are use
98b0: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f  d internally..*/
98c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
98d0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
98e0: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
98f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9900: 48 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66  HRONOUS 2.#endif
9910: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9920: 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43  DEFAULT_WAL_SYNC
9930: 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65  HRONOUS.# define
9940: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9950: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  WAL_SYNCHRONOUS 
9960: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9970: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69  YNCHRONOUS.#endi
9980: 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  f../*.** Each da
9990: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
99a0: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
99b0: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
99c0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
99d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
99e0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
99f0: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
9a00: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
9a10: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
9a20: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
9a30: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
9a40: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
9a50: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
9a60: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
9a70: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
9a80: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
9a90: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
9aa0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
9ab0: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
9ac0: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
9ad0: 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20  char *zDbSName; 
9ae0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
9af0: 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 20 28  this database. (
9b00: 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74  schema name, not
9b10: 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20   filename) */.  
9b20: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
9b30: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
9b40: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
9b50: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
9b60: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
9b70: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
9b80: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
9b90: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
9ba0: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20  to disk */.  u8 
9bb0: 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20  bSyncSet;       
9bc0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52    /* True if "PR
9bd0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
9be0: 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e  =N" has been run
9bf0: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
9c00: 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f  chema;     /* Po
9c10: 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73  inter to databas
9c20: 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62  e schema (possib
9c30: 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b  ly shared) */.};
9c40: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
9c50: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
9c60: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73  wing structure s
9c70: 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65  tores a database
9c80: 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d   schema..**.** M
9c90: 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  ost Schema objec
9ca0: 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  ts are associate
9cb0: 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20  d with a Btree. 
9cc0: 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69   The exception i
9cd0: 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20  s.** the Schema 
9ce0: 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  for the TEMP dat
9cf0: 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61  abaes (sqlite3.a
9d00: 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20  Db[1]) which is 
9d10: 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a  free-standing..*
9d20: 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68  * In shared cach
9d30: 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65  e mode, a single
9d40: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63   Schema object c
9d50: 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20  an be shared by 
9d60: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65  multiple.** Btre
9d70: 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
9d80: 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c   the same underl
9d90: 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62  ying BtShared ob
9da0: 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65  ject..**.** Sche
9db0: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
9dc0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61  utomatically dea
9dd0: 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68  llocated when th
9de0: 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61  e last Btree tha
9df0: 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20  t.** references 
9e00: 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65  them is destroye
9e10: 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63  d.   The TEMP Sc
9e20: 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79  hema is manually
9e30: 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c   freed by.** sql
9e40: 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a  ite3_close()..*.
9e50: 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74  ** A thread must
9e60: 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75   be holding a mu
9e70: 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  tex on the corre
9e80: 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69  sponding Btree i
9e90: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63  n order.** to ac
9ea0: 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74  cess Schema cont
9eb0: 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69  ent.  This impli
9ec0: 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65  es that the thre
9ed0: 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a  ad must also be.
9ee0: 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  ** holding a mut
9ef0: 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  ex on the sqlite
9f00: 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  3 connection poi
9f10: 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74  nter that owns t
9f20: 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72  he Btree..** For
9f30: 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20   a TEMP Schema, 
9f40: 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74  only the connect
9f50: 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71  ion mutex is req
9f60: 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  uired..*/.struct
9f70: 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20   Schema {.  int 
9f80: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
9f90: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
9fa0: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
9fb0: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
9fc0: 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72   */.  int iGener
9fd0: 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65  ation;     /* Ge
9fe0: 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
9ff0: 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  .  Incremented w
a000: 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20  ith each change 
a010: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
a020: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
a030: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
a040: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
a050: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
a060: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
a070: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
a080: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a090: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
a0a0: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
a0b0: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
a0c0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65  me */.  Hash fke
a0d0: 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  yHash;       /* 
a0e0: 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  All foreign keys
a0f0: 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74   by referenced t
a100: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  able name */.  T
a110: 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20  able *pSeqTab;  
a120: 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74      /* The sqlit
a130: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
a140: 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43   used by AUTOINC
a150: 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66  REMENT */.  u8 f
a160: 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
a170: 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61   /* Schema forma
a180: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
a190: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  is file */.  u8 
a1a0: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
a1b0: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
a1c0: 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ng used by this 
a1d0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31  database */.  u1
a1e0: 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20  6 schemaFlags;  
a1f0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f     /* Flags asso
a200: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
a210: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
a220: 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20   cache_size;    
a230: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
a240: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
a250: 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a  he cache */.};..
a260: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
a270: 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
a280: 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
a290: 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
a2a0: 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d  e.** Db.pSchema-
a2b0: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  >flags field..*/
a2c0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72  .#define DbHasPr
a2d0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
a2e0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
a2f0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a300: 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
a310: 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79  #define DbHasAny
a320: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a330: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
a340: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a350: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
a360: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
a370: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
a380: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
a390: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d  a->schemaFlags|=
a3a0: 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c  (P).#define DbCl
a3b0: 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  earProperty(D,I,
a3c0: 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d  P)   (D)->aDb[I]
a3d0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a3e0: 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  Flags&=~(P)../*.
a3f0: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
a400: 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63  s for the DB.pSc
a410: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
a420: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f  d..**.** The DB_
a430: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61  SchemaLoaded fla
a440: 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74  g is set after t
a450: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
a460: 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72  ma has been.** r
a470: 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61  ead into interna
a480: 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a  l hash tables..*
a490: 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56  *.** DB_UnresetV
a4a0: 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20  iews means that 
a4b0: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77  one or more view
a4c0: 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61  s have column na
a4d0: 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65  mes that.** have
a4e0: 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74   been filled out
a4f0: 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
a500: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20   changes, these 
a510: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67  column names mig
a520: 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e  ht.** changes an
a530: 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69  d so the view wi
a540: 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65  ll need to be re
a550: 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
a560: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
a570: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
a580: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a590: 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66  n loaded */.#def
a5a0: 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69  ine DB_UnresetVi
a5b0: 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f  ews    0x0002  /
a5c0: 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76  * Some views hav
a5d0: 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  e defined column
a5e0: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
a5f0: 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20  e DB_Empty      
a600: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
a610: 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74  The file is empt
a620: 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65  y (length 0 byte
a630: 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  s) */.#define DB
a640: 5f 52 65 73 65 74 57 61 6e 74 65 64 20 20 20 20  _ResetWanted    
a650: 20 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65   0x0008  /* Rese
a660: 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65  t the schema whe
a670: 6e 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30  n nSchemaLock==0
a680: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e   */../*.** The n
a690: 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65  umber of differe
a6a0: 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e  nt kinds of thin
a6b0: 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c  gs that can be l
a6c0: 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  imited.** using 
a6d0: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  the sqlite3_limi
a6e0: 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a  t() interface..*
a6f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a700: 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45  _N_LIMIT (SQLITE
a710: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
a720: 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20  READS+1)../*.** 
a730: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
a740: 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78   is a set of fix
a750: 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20  ed-size buffers 
a760: 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
a770: 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73  .** to satisfy s
a780: 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d  mall transient m
a790: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
a7a0: 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62   requests for ob
a7b0: 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  jects.** associa
a7c0: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
a7d0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
a7e0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
a7f0: 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73  use of.** lookas
a800: 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69  ide malloc provi
a810: 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e  des a significan
a820: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e  t performance en
a830: 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70  hancement.** (ap
a840: 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f  prox 10%) by avo
a850: 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d  iding numerous m
a860: 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65  alloc/free reque
a870: 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e  sts while parsin
a880: 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65  g.** SQL stateme
a890: 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c  nts..**.** The L
a8a0: 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75  ookaside structu
a8b0: 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75  re holds configu
a8c0: 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ration informati
a8d0: 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20  on about the.** 
a8e0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a8f0: 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63   subsystem.  Eac
a900: 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  h available memo
a910: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
a920: 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  .** the lookasid
a930: 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73  e subsystem is s
a940: 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65  tored on a linke
a950: 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73  d list of Lookas
a960: 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63  ideSlot.** objec
a970: 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  ts..**.** Lookas
a980: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
a990: 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64  are only allowed
a9a0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61   for objects tha
a9b0: 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  t are associated
a9c0: 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69  .** with a parti
a9d0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
a9e0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63  onnection.  Henc
a9f0: 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  e, schema inform
aa00: 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20  ation cannot.** 
aa10: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f  be stored in loo
aa20: 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69  kaside because i
aa30: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
aa40: 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69  ode the schema i
aa50: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73  nformation.** is
aa60: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
aa70: 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ple database con
aa80: 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65  nections.  There
aa90: 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73  fore, while pars
aaa0: 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e  ing.** schema in
aab0: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c  formation, the L
aac0: 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65  ookaside.bEnable
aad0: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
aae0: 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f  d so that.** loo
aaf0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
ab00: 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  ns are not used 
ab10: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
ab20: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e   schema objects.
ab30: 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .*/.struct Looka
ab40: 73 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69  side {.  u32 bDi
ab50: 73 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  sable;          
ab60: 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65   /* Only operate
ab70: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77   the lookaside w
ab80: 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31  hen zero */.  u1
ab90: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
aba0: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
abb0: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
abc0: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d  bytes */.  u8 bM
abd0: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
abe0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
abf0: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
ac00: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
ac10: 63 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c  c() */.  u32 nSl
ac20: 6f 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ot;             
ac30: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
ac40: 6f 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c  okaside slots al
ac50: 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32  located */.  u32
ac60: 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20   anStat[3];     
ac70: 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e       /* 0: hits.
ac80: 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73    1: size misses
ac90: 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65  .  2: full misse
aca0: 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  s */.  Lookaside
acb0: 53 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f  Slot *pInit;   /
acc0: 2a 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72  * List of buffer
acd0: 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
ace0: 20 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61   used */.  Looka
acf0: 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b  sideSlot *pFree;
ad00: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76     /* List of av
ad10: 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20  ailable buffers 
ad20: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72  */.  void *pStar
ad30: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
ad40: 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76  First byte of av
ad50: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73  ailable memory s
ad60: 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  pace */.  void *
ad70: 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
ad80: 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20    /* First byte 
ad90: 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69  past end of avai
ada0: 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d  lable space */.}
adb0: 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  ;.struct Lookasi
adc0: 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61  deSlot {.  Looka
add0: 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b  sideSlot *pNext;
ade0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66      /* Next buff
adf0: 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  er in the list o
ae00: 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a  f free buffers *
ae10: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61  /.};../*.** A ha
ae20: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69  sh table for bui
ae30: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64  lt-in function d
ae40: 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70  efinitions.  (Ap
ae50: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
ae60: 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75  d.** functions u
ae70: 73 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62  se a regular tab
ae80: 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61  le table from ha
ae90: 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73  sh.h.).**.** Has
aea0: 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73  h each FuncDef s
aeb0: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e  tructure into on
aec0: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
aed0: 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a  Hash.a[] slots..
aee0: 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72  ** Collisions ar
aef0: 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66  e on the FuncDef
af00: 2e 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  .u.pHash chain..
af10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
af20: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32  E_FUNC_HASH_SZ 2
af30: 33 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  3.struct FuncDef
af40: 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66  Hash {.  FuncDef
af50: 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f   *a[SQLITE_FUNC_
af60: 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20  HASH_SZ];       
af70: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
af80: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
af90: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
afa0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
afb0: 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72  TION./*.** Infor
afc0: 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74  mation held in t
afd0: 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74  he "sqlite3" dat
afe0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
aff0: 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64   object and used
b000: 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73  .** to manage us
b010: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
b020: 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  n..*/.typedef st
b030: 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65  ruct sqlite3_use
b040: 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73  rauth sqlite3_us
b050: 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73  erauth;.struct s
b060: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
b070: 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c  {.  u8 authLevel
b080: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b090: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74    /* Current aut
b0a0: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65  hentication leve
b0b0: 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68  l */.  int nAuth
b0c0: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
b0d0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
b0e0: 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62  the zAuthPW in b
b0f0: 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ytes */.  char *
b100: 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  zAuthPW;        
b110: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77          /* Passw
b120: 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68  ord used to auth
b130: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68  enticate */.  ch
b140: 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20  ar *zAuthUser;  
b150: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
b160: 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f  ser name used to
b170: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
b180: 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
b190: 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74  values for sqlit
b1a0: 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68  e3_userauth.auth
b1b0: 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65  Level */.#define
b1c0: 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20   UAUTH_Unknown  
b1d0: 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68     0     /* Auth
b1e0: 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79  entication not y
b1f0: 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64  et checked */.#d
b200: 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c  efine UAUTH_Fail
b210: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a          1     /*
b220: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
b230: 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23  tion failed */.#
b240: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65  define UAUTH_Use
b250: 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f  r        2     /
b260: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
b270: 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72  as a normal user
b280: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
b290: 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20  H_Admin       3 
b2a0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
b2b0: 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e  ated as an admin
b2c0: 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20  istrator */../* 
b2d0: 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f  Functions used o
b2e0: 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68  nly by user auth
b2f0: 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20  orization logic 
b300: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  */.int sqlite3Us
b310: 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73  erAuthTable(cons
b320: 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
b330: 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65  lite3UserAuthChe
b340: 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a  ckLogin(sqlite3*
b350: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a  ,const char*,u8*
b360: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
b370: 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69  serAuthInit(sqli
b380: 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
b390: 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c  te3CryptFunc(sql
b3a0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
b3b0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
b3c0: 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  *);..#endif /* S
b3d0: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
b3e0: 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a  NTICATION */../*
b3f0: 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20  .** typedef for 
b400: 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  the authorizatio
b410: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
b420: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ion..*/.#ifdef S
b430: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
b440: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65  NTICATION.  type
b450: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b460: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b470: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b480: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b490: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4b0: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
b4c0: 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
b4d0: 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
b4e0: 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f  f int (*sqlite3_
b4f0: 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74  xauth)(void*,int
b500: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b510: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b520: 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  har*,.          
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b540: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
b550: 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
b560: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
b570: 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69  EPRECATED./* Thi
b580: 73 20 69 73 20 61 6e 20 65 78 74 72 61 20 53 51  s is an extra SQ
b590: 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f  LITE_TRACE macro
b5a0: 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
b5b0: 22 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e 67  "legacy" tracing
b5c0: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65  .** in the style
b5d0: 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63   of sqlite3_trac
b5e0: 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e().*/.#define S
b5f0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41  QLITE_TRACE_LEGA
b600: 43 59 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23  CY  0x80.#else.#
b610: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
b620: 41 43 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65  ACE_LEGACY  0.#e
b630: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
b640: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
b650: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  /.../*.** Each d
b660: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b670: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
b680: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
b690: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
b6a0: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
b6b0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
b6c0: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
b6d0: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
b6e0: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
b6f0: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
b700: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
b710: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
b720: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
b730: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
b740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
b750: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
b760: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
b770: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
b780: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
b790: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
b7a0: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
b7b0: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
b7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b810: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
b820: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75  ly in use */.  u
b830: 33 32 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20  32 mDbFlags;    
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b850: 66 6c 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20  flags recording 
b860: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a  internal state *
b870: 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b890: 20 20 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61    /* flags setta
b8a0: 62 6c 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20  ble by pragmas. 
b8b0: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
b8c0: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
b8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b8e0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
b8f0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
b900: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
b910: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
b920: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
b930: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
b940: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32  setting */.  u32
b950: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20   nSchemaLock;   
b960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
b970: 20 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20 73   not reset the s
b980: 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a  chema when non-z
b990: 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ero */.  unsigne
b9a0: 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b  d int openFlags;
b9b0: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
b9c0: 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
b9d0: 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f  3_vfs.xOpen() */
b9e0: 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20  .  int errCode; 
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba00: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
ba10: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
ba20: 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65  TE_*) */.  int e
ba30: 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  rrMask;         
ba40: 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65           /* & re
ba50: 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20  sult codes with 
ba60: 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75  this before retu
ba70: 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  rning */.  int i
ba80: 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20  SysErrno;       
ba90: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e           /* Errn
baa0: 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73  o value from las
bab0: 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a  t system error *
bac0: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
bad0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bae0: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
baf0: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
bb00: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
bb10: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bb30: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
bb40: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
bb50: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
bb60: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
bb70: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
bb80: 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20  u8 temp_store;  
bb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bba0: 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f   1: file 2: memo
bbb0: 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f  ry 0: default */
bbc0: 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c  .  u8 mallocFail
bbd0: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
bbe0: 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68   /* True if we h
bbf0: 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f  ave seen a mallo
bc00: 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75  c failure */.  u
bc10: 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b  8 bBenignMalloc;
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bc30: 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f  Do not require O
bc40: 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  OMs if true */. 
bc50: 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65   u8 dfltLockMode
bc60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
bc70: 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e  * Default lockin
bc80: 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63  g-mode for attac
bc90: 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67  hed dbs */.  sig
bca0: 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74  ned char nextAut
bcb0: 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75  ovac;      /* Au
bcc0: 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66  tovac setting af
bcd0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d  ter VACUUM if >=
bce0: 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65  0 */.  u8 suppre
bcf0: 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  ssErr;          
bd00: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69       /* Do not i
bd10: 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61  ssue error messa
bd20: 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ges if true */. 
bd30: 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
bd40: 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ct;            /
bd50: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
bd60: 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e  n for s3_vtab_on
bd70: 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20  _conflict() */. 
bd80: 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f   u8 isTransactio
bd90: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f  nSavepoint;    /
bda0: 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75  * True if the ou
bdb0: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
bdc0: 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75  t is a TS */.  u
bdd0: 38 20 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20  8 mTrace;       
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bdf0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c  zero or more SQL
be00: 49 54 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20  ITE_TRACE flags 
be10: 2a 2f 0a 20 20 75 38 20 73 6b 69 70 42 74 72 65  */.  u8 skipBtre
be20: 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
be30: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f     /* True if no
be40: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 62 61   shared-cache ba
be50: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e  ckends */.  u8 n
be60: 53 71 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20  SqlExec;        
be70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
be80: 62 65 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f  ber of pending O
be90: 50 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65  P_SqlExec opcode
bea0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  s */.  int nextP
beb0: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
bec0: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
bed0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
bee0: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
bef0: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
bf00: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
bf10: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
bf20: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
bf30: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
bf40: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
bf50: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
bf60: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
bf70: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
bf80: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
bf90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
bfa0: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
bfb0: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
bfc0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
bfd0: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
bfe0: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
bff0: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74   Limits */.  int
c000: 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b   nMaxSorterMmap;
c010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
c020: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65  ximum size of re
c030: 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20  gions mapped by 
c040: 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75  sorter */.  stru
c050: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
c060: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
c070: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
c080: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
c090: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
c0a0: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
c0b0: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
c0c0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
c0d0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
c0e0: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c100: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
c110: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
c120: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
c130: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
c140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
c150: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
c160: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
c170: 20 20 20 75 6e 73 69 67 6e 65 64 20 6f 72 70 68     unsigned orph
c180: 61 6e 54 72 69 67 67 65 72 20 3a 20 31 3b 20 2f  anTrigger : 1; /
c190: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
c1a0: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
c1b0: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20  P trigger */.   
c1c0: 20 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73 74   unsigned impost
c1d0: 65 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20  erTable : 1; /* 
c1e0: 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f  Building an impo
c1f0: 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ster table */.  
c200: 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6f 70 65    unsigned reope
c210: 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a  nMemdb : 1;   /*
c220: 20 41 54 54 41 43 48 20 69 73 20 72 65 61 6c 6c   ATTACH is reall
c230: 79 20 61 20 72 65 6f 70 65 6e 20 75 73 69 6e 67  y a reopen using
c240: 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e   MemDB */.  } in
c250: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
c260: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
c270: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c280: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
c290: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
c2a0: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c2c0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c2d0: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c2e0: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
c2f0: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
c300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c310: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c320: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c330: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
c340: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c360: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
c370: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
c380: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ec() */.  int nV
c390: 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20  Destroy;        
c3a0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c3b0: 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56  r of active OP_V
c3c0: 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
c3d0: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  ns */.  int nExt
c3e0: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
c3f0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c400: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
c410: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
c420: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
c430: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
c440: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
c450: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
c460: 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33  int (*xTrace)(u3
c470: 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f  2,void*,void*,vo
c480: 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61  id*);     /* Tra
c490: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
c4a0: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
c4b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c4c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c4d0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
c4e0: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
c4f0: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
c500: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
c510: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
c520: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
c530: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
c540: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c560: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c570: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
c580: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
c590: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
c5a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c5b0: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
c5c0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e  llback() */.  in
c5d0: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
c5e0: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
c5f0: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
c600: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
c610: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
c620: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c630: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c640: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
c650: 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ack() */.  void 
c660: 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  (*xRollbackCallb
c670: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20  ack)(void*); /* 
c680: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
c690: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
c6a0: 69 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a  id *pUpdateArg;.
c6b0: 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65    void (*xUpdate
c6c0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
c6d0: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
c6e0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
c6f0: 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64  ite_int64);.#ifd
c700: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
c710: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
c720: 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61    void *pPreUpda
c730: 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  teArg;          
c740: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
c750: 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43  t to xPreUpdateC
c760: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
c770: 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61  d (*xPreUpdateCa
c780: 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65  llback)(   /* Re
c790: 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73  gistered using s
c7a0: 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65  qlite3_preupdate
c7b0: 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76  _hook() */.    v
c7c0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
c7d0: 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68  t,char const*,ch
c7e0: 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65  ar const*,sqlite
c7f0: 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f  3_int64,sqlite3_
c800: 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65  int64.  );.  Pre
c810: 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61  Update *pPreUpda
c820: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  te;        /* Co
c830: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
c840: 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c   pre-update call
c850: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  back */.#endif /
c860: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
c870: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a  PREUPDATE_HOOK *
c880: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c890: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
c8a0: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
c8b0: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
c8c0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
c8d0: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
c8e0: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
c8f0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
c900: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
c910: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
c920: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
c930: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
c940: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
c950: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
c960: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
c970: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
c980: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
c990: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
c9a0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
c9b0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
c9c0: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
c9d0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
c9e0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
c9f0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
ca00: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
ca10: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
ca20: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
ca30: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
ca40: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
ca50: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
ca60: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
ca70: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
ca80: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
ca90: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
caa0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
cab0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
cac0: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
cad0: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
cae0: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
caf0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
cb00: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
cb10: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
cb20: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
cb30: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
cb40: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
cb50: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
cb60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
cb70: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
cb80: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
cb90: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
cba0: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
cbb0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
cbc0: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
cbd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
cbe0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
cbf0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
cc00: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
cc10: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
cc20: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
cc30: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
cc40: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
cc50: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
cc60: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
cc70: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
cc80: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
cc90: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
cca0: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
ccb0: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
ccc0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
ccd0: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
cce0: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
ccf0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
cd00: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
cd10: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
cd20: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
cd30: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
cd40: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
cd50: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
cd60: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
cd70: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
cd80: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
cd90: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
cda0: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
cdb0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
cdc0: 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69  sconnect these i
cdd0: 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70  n next sqlite3_p
cde0: 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64  repare() */.#end
cdf0: 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b  if.  Hash aFunc;
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce10: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
ce20: 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66   of connection f
ce30: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61  unctions */.  Ha
ce40: 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20  sh aCollSeq;    
ce50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
ce60: 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ll collating seq
ce70: 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79  uences */.  Busy
ce80: 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64  Handler busyHand
ce90: 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73  ler;      /* Bus
cea0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
ceb0: 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b  Db aDbStatic[2];
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ced0: 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f   Static space fo
cee0: 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20  r the 2 default 
cef0: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61  backends */.  Sa
cf00: 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
cf10: 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  int;        /* L
cf20: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61  ist of active sa
cf30: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
cf40: 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20  t busyTimeout;  
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
cf60: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65  usy handler time
cf70: 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a  out, in msec */.
cf80: 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74    int nSavepoint
cf90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
cfa0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  /* Number of non
cfb0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
cfc0: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
cfd0: 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20   nStatement;    
cfe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
cff0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73  mber of nested s
d000: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
d010: 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20  tions  */.  i64 
d020: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
d030: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
d040: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
d050: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
d060: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34  action. */.  i64
d070: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
d080: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  s;         /* Ne
d090: 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64  t deferred immed
d0a0: 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  iate constraints
d0b0: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
d0c0: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
d0d0: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
d0e0: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
d0f0: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
d100: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
d110: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
d120: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
d130: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
d140: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
d150: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
d160: 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75  C_MASTER.  ** mu
d170: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
d180: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
d190: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
d1a0: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20   in notify.c..  
d1b0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
d1c0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
d1d0: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d1e0: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
d1f0: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
d200: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
d210: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
d220: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
d230: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
d240: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
d250: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
d260: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
d270: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
d280: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
d290: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
d2a0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
d2b0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
d2c0: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
d2d0: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
d2e0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
d2f0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
d300: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
d310: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
d320: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
d330: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
d340: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
d350: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
d360: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
d370: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d390: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
d3a0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
d3b0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
d3c0: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
d3d0: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
d3e0: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
d3f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
d400: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
d410: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
d420: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
d430: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
d440: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
d450: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
d460: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
d470: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
d480: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
d490: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
d4a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
d4b0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
d4c0: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
d4d0: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
d4e0: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
d4f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
d500: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
d510: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
d520: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
d530: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
d540: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
d550: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
d560: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
d570: 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  .flags..**.** Va
d580: 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
d590: 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
d5a0: 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
d5b0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
d5c0: 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46  c     == PAGER_F
d5d0: 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20  ULLFSYNC.**     
d5e0: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
d5f0: 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43  FSync == PAGER_C
d600: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a  KPT_FULLFSYNC.**
d610: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63        SQLITE_Cac
d620: 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41  heSpill    == PA
d630: 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a  GER_CACHE_SPILL.
d640: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d650: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
d660: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
d670: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
d680: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64  ITE_MASTER */.#d
d690: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
d6a0: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
d6b0: 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74  000002  /* Creat
d6c0: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
d6d0: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
d6e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
d6f0: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
d700: 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77  0000004  /* Show
d710: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
d720: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
d730: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d740: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
d750: 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65  00000008  /* Use
d760: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
d770: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
d780: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
d790: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
d7a0: 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66  000010  /* Use f
d7b0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
d7c0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
d7d0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65  ine SQLITE_Cache
d7e0: 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30  Spill     0x0000
d7f0: 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73  0020  /* OK to s
d800: 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65  pill pager cache
d810: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d820: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
d830: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
d840: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
d850: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
d860: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
d870: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
d880: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
d890: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
d8a0: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8d0: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
d8e0: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
d8f0: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d920: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
d930: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
d940: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
d950: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
d960: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
d970: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
d980: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
d990: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9c0: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
d9d0: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
d9e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
d9f0: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
da00: 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  000200  /* Do no
da10: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
da20: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
da30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
da40: 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30  adUncommit   0x0
da50: 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44  0000400  /* READ
da60: 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20   UNCOMMITTED in 
da70: 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a  shared-cache */.
da80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
da90: 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78  oCkptOnClose  0x
daa0: 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20  00000800  /* No 
dab0: 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c  checkpoint on cl
dac0: 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a  ose()/DETACH */.
dad0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
dae0: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
daf0: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76  00001000  /* Rev
db00: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
db10: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
db20: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
db30: 67 65 72 73 20 20 20 20 30 78 30 30 30 30 32 30  gers    0x000020
db40: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
db50: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
db60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
db70: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
db80: 20 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a    0x00004000  /*
db90: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
dba0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
dbb0: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
dbc0: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
dbd0: 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f     0x00008000  /
dbe0: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
dbf0: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
dc00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
dc10: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
dc20: 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  010000  /* Enabl
dc30: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
dc40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dc50: 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20  TE_LoadExtFunc  
dc60: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
dc70: 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74   Enable load_ext
dc80: 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e  ension() SQL fun
dc90: 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  c */.#define SQL
dca0: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
dcb0: 72 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f  r  0x00040000  /
dcc0: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
dcd0: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
dce0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
dcf0: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 30 30  rFKs       0x000
dd00: 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  80000  /* Defer 
dd10: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
dd20: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
dd30: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
dd40: 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20      0x00100000  
dd50: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
dd60: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
dd70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65  define SQLITE_Ce
dd80: 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30  llSizeCk     0x0
dd90: 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63  0200000  /* Chec
dda0: 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a  k btree cell siz
ddb0: 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64  es on load */.#d
ddc0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73  efine SQLITE_Fts
ddd0: 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30  3Tokenizer  0x00
dde0: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
ddf0: 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72  e fts3_tokenizer
de00: 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  (2) */.#define S
de10: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47  QLITE_EnableQPSG
de20: 20 20 20 20 20 30 78 30 30 38 30 30 30 30 30 20       0x00800000 
de30: 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65   /* Query Planne
de40: 72 20 53 74 61 62 69 6c 69 74 79 20 47 75 61 72  r Stability Guar
de50: 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20  antee*/.#define 
de60: 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72 45 51  SQLITE_TriggerEQ
de70: 50 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30  P     0x01000000
de80: 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67 67 65    /* Show trigge
de90: 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  r EXPLAIN QUERY 
dea0: 50 4c 41 4e 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67  PLAN */../* Flag
deb0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64  s used only if d
dec0: 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64  ebugging */.#ifd
ded0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
dee0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
def0: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
df00: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62  08000000  /* Deb
df10: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
df20: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
df30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
df40: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 31  beListing    0x1
df50: 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  0000000  /* Debu
df60: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
df70: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
df80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
df90: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 32  beTrace      0x2
dfa0: 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0000000  /* True
dfb0: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
dfc0: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
dfd0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
dfe0: 64 64 6f 70 54 72 61 63 65 20 30 78 34 30 30 30  ddopTrace 0x4000
dff0: 30 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  0000  /* Trace s
e000: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
e010: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
e020: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
e030: 50 20 20 20 20 20 20 20 20 30 78 38 30 30 30 30  P        0x80000
e040: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58  000  /* Debug EX
e050: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
e060: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
e070: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
e080: 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62   for sqlite3.mDb
e090: 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  Flags.*/.#define
e0a0: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
e0b0: 61 6e 67 65 20 20 20 30 78 30 30 30 31 20 20 2f  ange   0x0001  /
e0c0: 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61  * Uncommitted Ha
e0d0: 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73  sh table changes
e0e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c   */.#define DBFL
e0f0: 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  AG_PreferBuiltin
e100: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65    0x0002  /* Pre
e110: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
e120: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
e130: 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75  fine DBFLAG_Vacu
e140: 75 6d 20 20 20 20 20 20 20 20 20 30 78 30 30 30  um         0x000
e150: 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20  4  /* Currently 
e160: 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 0a  in a VACUUM */..
e170: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
e180: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
e190: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
e1a0: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
e1b0: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
e1c0: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
e1d0: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
e1e0: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
e1f0: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
e200: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
e210: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
e220: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
e230: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
e240: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
e250: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
e260: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
e270: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
e280: 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a  e    0x0002   /*
e290: 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   Column cache */
e2a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e2b0: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
e2c0: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
e2d0: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
e2e0: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
e2f0: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
e300: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
e310: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
e320: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
e330: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
e340: 74 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a  t    0x0010   /*
e350: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
e360: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
e370: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
e380: 64 78 53 63 61 6e 20 20 20 30 78 30 30 32 30 20  dxScan   0x0020 
e390: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
e3a0: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
e3b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
e3c0: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 34  rByIdxJoin 0x004
e3d0: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
e3e0: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
e3f0: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
e400: 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20  LITE_Transitive 
e410: 20 20 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20      0x0080   /* 
e420: 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74  Transitive const
e430: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
e440: 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f  e SQLITE_OmitNoo
e450: 70 4a 6f 69 6e 20 20 20 30 78 30 31 30 30 20 20  pJoin   0x0100  
e460: 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20   /* Omit unused 
e470: 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20  tables in joins 
e480: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e490: 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20  E_CountOfView   
e4a0: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 68 65   0x0200   /* The
e4b0: 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f   count-of-view o
e4c0: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
e4d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75  define SQLITE_Cu
e4e0: 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 30  rsorHints    0x0
e4f0: 34 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f  400   /* Add OP_
e500: 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64  CursorHint opcod
e510: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e520: 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20 20 20  LITE_Stat34     
e530: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
e540: 55 73 65 20 53 54 41 54 33 20 6f 72 20 53 54 41  Use STAT3 or STA
e550: 54 34 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a  T4 data */.   /*
e560: 20 54 48 33 20 65 78 70 65 63 74 73 20 74 68 65   TH3 expects the
e570: 20 53 74 61 74 33 34 20 20 5e 5e 5e 5e 5e 5e 20   Stat34  ^^^^^^ 
e580: 76 61 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38  value to be 0x08
e590: 30 30 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67  00.  Don't chang
e5a0: 65 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  e it */.#define 
e5b0: 53 51 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20  SQLITE_PushDown 
e5c0: 20 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f        0x1000   /
e5d0: 2a 20 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20  * The push-down 
e5e0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
e5f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
e600: 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78  implifyJoin   0x
e610: 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72  2000   /* Conver
e620: 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a  t LEFT JOIN to J
e630: 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  OIN */.#define S
e640: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
e650: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
e660: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
e670: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
e680: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
e690: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
e6a0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
e6b0: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
e6c0: 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  bled..*/.#define
e6d0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
e6e0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
e6f0: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
e700: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
e710: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
e720: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
e730: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
e740: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
e750: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65  ))==0)../*.** Re
e760: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
e770: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
e780: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
e790: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
e7a0: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
e7b0: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
e7c0: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
e7d0: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
e7e0: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
e7f0: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
e800: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
e810: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
e820: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
e830: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
e840: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
e850: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
e860: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
e870: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
e880: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
e890: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
e8a0: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
e8b0: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
e8c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e8d0: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
e8e0: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
e8f0: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
e900: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e910: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
e920: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
e930: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
e940: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
e950: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
e960: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
e970: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
e980: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
e990: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
e9a0: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
e9b0: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
e9c0: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
e9d0: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
e9e0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
e9f0: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
ea00: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
ea10: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
ea20: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
ea30: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
ea40: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
ea50: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
ea60: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
ea70: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
ea80: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
ea90: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
eaa0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
eab0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
eac0: 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
ead0: 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e   global built-in
eae0: 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20   functions (ex: 
eaf0: 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c  substr(), max(),
eb00: 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70   count()).** a p
eb10: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
eb20: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
eb30: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42   in the sqlite3B
eb40: 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20  uiltinFunctions 
eb50: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70  object..** For p
eb60: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70  er-connection ap
eb70: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
eb80: 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70  d functions, a p
eb90: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a  ointer to this.*
eba0: 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68  * structure is h
ebb0: 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61  eld in the db->a
ebc0: 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e  Hash hash table.
ebd0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61  .**.** The u.pHa
ebe0: 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  sh field is used
ebf0: 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62   by the global b
ec00: 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75  uilt-ins.  The u
ec10: 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  .pDestructor.** 
ec20: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
ec30: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
ec40: 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e  app-def function
ec50: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
ec60: 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67  cDef {.  i8 nArg
ec70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
ec80: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
ec90: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
eca0: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
ecb0: 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20  16 funcFlags;   
ecc0: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
ecd0: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
ece0: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
ecf0: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
ed00: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
ed10: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
ed20: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
ed30: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
ed40: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
ed50: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
ed60: 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  xSFunc)(sqlite3_
ed70: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
ed80: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
ed90: 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74  * func or agg-st
eda0: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
edb0: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
edc0: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ede0: 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a   Agg finalizer *
edf0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
ee00: 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20  zName;   /* SQL 
ee10: 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
ee20: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e  tion. */.  union
ee30: 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a   {.    FuncDef *
ee40: 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e  pHash;      /* N
ee50: 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65  ext with a diffe
ee60: 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68  rent name but th
ee70: 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20  e same hash */. 
ee80: 20 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f     FuncDestructo
ee90: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
eea0: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
eeb0: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
eec0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
eed0: 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  } u;.};../*.** T
eee0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e  his structure en
eef0: 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65  capsulates a use
ef00: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72  r-function destr
ef10: 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28  uctor callback (
ef20: 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  as.** configured
ef30: 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75   using create_fu
ef40: 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64  nction_v2()) and
ef50: 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75   a reference cou
ef60: 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72  nter. When.** cr
ef70: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
ef80: 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  () is called to 
ef90: 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f  create a functio
efa0: 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63  n with a destruc
efb0: 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  tor,.** a single
efc0: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
efd0: 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  type is allocate
efe0: 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  d. FuncDestructo
eff0: 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f  r.nRef is set to
f000: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
f010: 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  f FuncDef object
f020: 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65  s created (eithe
f030: 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64  r 1 or 3, depend
f040: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
f050: 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65  * or not the spe
f060: 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20  cified encoding 
f070: 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20  is SQLITE_ANY). 
f080: 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73  The FuncDef.pDes
f090: 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65  tructor.** membe
f0a0: 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  r of each of the
f0b0: 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a   new FuncDef obj
f0c0: 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70  ects is set to p
f0d0: 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f  oint to the allo
f0e0: 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73  cated.** FuncDes
f0f0: 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  tructor..**.** T
f100: 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20  hereafter, when 
f110: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
f120: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65  ef objects is de
f130: 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72  leted, the refer
f140: 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e  ence.** count on
f150: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   this object is 
f160: 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65  decremented. Whe
f170: 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20  n it reaches 0, 
f180: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a  the destructor.*
f190: 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64  * is invoked and
f1a0: 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63   the FuncDestruc
f1b0: 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72  tor structure fr
f1c0: 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  eed..*/.struct F
f1d0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a  uncDestructor {.
f1e0: 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f    int nRef;.  vo
f1f0: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
f200: 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  oid *);.  void *
f210: 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f  pUserData;.};../
f220: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
f230: 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66  lues for FuncDef
f240: 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68  .flags.  Note th
f250: 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61  at the _LENGTH a
f260: 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61  nd _TYPEOF.** va
f270: 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73  lues must corres
f280: 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c  pond to OPFLAG_L
f290: 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
f2a0: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20  LAG_TYPEOFARG.  
f2b0: 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55  And.** SQLITE_FU
f2c0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74  NC_CONSTANT must
f2d0: 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20   be the same as 
f2e0: 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49  SQLITE_DETERMINI
f2f0: 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20  STIC.  There.** 
f300: 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61  are assert() sta
f310: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
f320: 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68  ode to verify th
f330: 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  is..**.** Value 
f340: 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
f350: 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
f360: 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ()):.**     SQLI
f370: 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20  TE_FUNC_MINMAX  
f380: 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41    ==  NC_MinMaxA
f390: 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69  gg      == SF_Mi
f3a0: 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53  nMaxAgg.**     S
f3b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
f3c0: 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f  H    ==  OPFLAG_
f3d0: 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20  LENGTHARG.**    
f3e0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
f3f0: 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41  EOF    ==  OPFLA
f400: 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20  G_TYPEOFARG.**  
f410: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43     SQLITE_FUNC_C
f420: 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c  ONSTANT  ==  SQL
f430: 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49  ITE_DETERMINISTI
f440: 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a  C from the API.*
f450: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
f460: 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65  C_ENCMASK   depe
f470: 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54  nds on SQLITE_UT
f480: 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65  F* macros in the
f490: 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20   API.*/.#define 
f4a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
f4b0: 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53  ASK  0x0003 /* S
f4c0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
f4d0: 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54  TE_UTF16BE or UT
f4e0: 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65  F16LE */.#define
f4f0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b   SQLITE_FUNC_LIK
f500: 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20  E     0x0004 /* 
f510: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
f520: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
f530: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
f540: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
f550: 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61      0x0008 /* Ca
f560: 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b  se-sensitive LIK
f570: 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20  E-type function 
f580: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f590: 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20  E_FUNC_EPHEM    
f5a0: 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65  0x0010 /* Epheme
f5b0: 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74  ral.  Delete wit
f5c0: 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e  h VDBE */.#defin
f5d0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
f5e0: 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a  EDCOLL 0x0020 /*
f5f0: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
f600: 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62  ollSeq() might b
f610: 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69  e called*/.#defi
f620: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
f630: 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20 2f  ENGTH   0x0040 /
f640: 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74  * Built-in lengt
f650: 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  h() function */.
f660: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f670: 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30  UNC_TYPEOF   0x0
f680: 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  080 /* Built-in 
f690: 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
f6a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f6b0: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
f6c0: 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c    0x0100 /* Buil
f6d0: 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67  t-in count(*) ag
f6e0: 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69  gregate */.#defi
f6f0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
f700: 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f  OALESCE 0x0200 /
f710: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
f720: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
f730: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
f740: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
f750: 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c  Y 0x0400 /* Buil
f760: 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20  t-in unlikely() 
f770: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
f780: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f790: 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20  CONSTANT 0x0800 
f7a0: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75  /* Constant inpu
f7b0: 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61  ts give a consta
f7c0: 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  nt output */.#de
f7d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f7e0: 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30  _MINMAX   0x1000
f7f0: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e   /* True for min
f800: 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67  () and max() agg
f810: 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  regates */.#defi
f820: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  ne SQLITE_FUNC_S
f830: 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f  LOCHNG  0x2000 /
f840: 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e  * "Slow Change".
f850: 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20   Value constant 
f860: 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20  during a.       
f870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
f890: 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d  single query - m
f8a0: 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72  ight change over
f8b0: 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65   time */.#define
f8c0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46   SQLITE_FUNC_AFF
f8d0: 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20  INITY 0x4000 /* 
f8e0: 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74  Built-in affinit
f8f0: 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  y() function */.
f900: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f910: 55 4e 43 5f 4f 46 46 53 45 54 20 20 20 30 78 38  UNC_OFFSET   0x8
f920: 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  000 /* Built-in 
f930: 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20  sqlite_offset() 
f940: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  function */../*.
f950: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
f960: 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46   three macros, F
f970: 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46  UNCTION(), LIKEF
f980: 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47  UNC() and AGGREG
f990: 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65  ATE() are.** use
f9a0: 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  d to create the 
f9b0: 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72  initializers for
f9c0: 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72   the FuncDef str
f9d0: 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20  uctures..**.**  
f9e0: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
f9f0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
fa00: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
fa10: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
fa20: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
fa30: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
fa40: 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a   function zName.
fa50: 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  **     implement
fa60: 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e  ed by C function
fa70: 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65   xFunc that acce
fa80: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
fa90: 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76  ts. The.**     v
faa0: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69  alue passed as i
fab0: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
fac0: 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64   (void*) and mad
fad0: 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20  e available.**  
fae0: 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64     as the user-d
faf0: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
fb00: 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68  r_data()) for th
fb10: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a  e function. If.*
fb20: 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
fb30: 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
fb40: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
fb50: 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
fb60: 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56  s set..**.**   V
fb70: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
fb80: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
fb90: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
fba0: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
fbb0: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
fbc0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fbd0: 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  STANT flag..**.*
fbe0: 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e  *   DFUNCTION(zN
fbf0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
fc00: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
fc10: 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f      Like FUNCTIO
fc20: 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74  N except it omit
fc30: 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
fc40: 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20  C_CONSTANT flag 
fc50: 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20  and.**     adds 
fc60: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
fc70: 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55  SLOCHNG flag.  U
fc80: 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20 74  sed for date & t
fc90: 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ime functions.**
fca0: 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f       and functio
fcb0: 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76  ns like sqlite_v
fcc0: 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61  ersion() that ca
fcd0: 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f  n change, but no
fce0: 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20  t during.**     
fcf0: 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 20  a single query. 
fd00: 20 54 68 65 20 69 41 72 67 20 69 73 20 69 67 6e   The iArg is ign
fd10: 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65 72 2d  ored.  The user-
fd20: 64 61 74 61 20 69 73 20 61 6c 77 61 79 73 20 73  data is always s
fd30: 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e  et.**     to a N
fd40: 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68  ULL pointer.  Th
fd50: 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20  e bNC parameter 
fd60: 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
fd70: 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28 7a  **   PURE_DATE(z
fd80: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
fd90: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
fda0: 20 20 20 20 20 55 73 65 64 20 66 6f 72 20 22 70       Used for "p
fdb0: 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20 66  ure" date/time f
fdc0: 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d  unctions, this m
fdd0: 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46 55  acro is like DFU
fde0: 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78  NCTION.**     ex
fdf0: 63 65 70 74 20 74 68 61 74 20 69 74 20 64 6f 65  cept that it doe
fe00: 73 20 73 65 74 20 74 68 65 20 53 51 4c 49 54 45  s set the SQLITE
fe10: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
fe20: 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a 2a  lags.  iArg is.*
fe30: 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61 6e  *     ignored an
fe40: 64 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20  d the user-data 
fe50: 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74 69  for these functi
fe60: 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61 6e  ons is set to an
fe70: 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72 61   .**     arbitra
fe80: 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e  ry non-NULL poin
fe90: 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61  ter.  The bNC pa
fea0: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
feb0: 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47  sed..**.**   AGG
fec0: 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
fed0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
fee0: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a  Step, xFinal).**
fef0: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
ff00: 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65  ate an aggregate
ff10: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
ff20: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
ff30: 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43   by.**     the C
ff40: 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70   functions xStep
ff50: 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65   and xFinal. The
ff60: 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61   first four para
ff70: 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72  meters.**     ar
ff80: 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e  e interpreted in
ff90: 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
ffa0: 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72   the first 4 par
ffb0: 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20  ameters to.**   
ffc0: 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a    FUNCTION()..**
ffd0: 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a  .**   LIKEFUNC(z
ffe0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
fff0: 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20  , flags).**     
10000 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
10010 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
10020 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
10030 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a   function zName.
10040 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
10050 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
10060 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
10070 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
10080 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63  to C.**     func
10090 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41  tion likeFunc. A
100a0 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20  rgument pArg is 
100b0 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20  cast to a (void 
100c0 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20  *) and made.**  
100d0 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20     available as 
100e0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  the function use
100f0 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
10100 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68  user_data()). Th
10110 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66  e.**     FuncDef
10120 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20  .flags variable 
10130 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
10140 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68  lue passed as th
10150 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70  e flags.**     p
10160 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65  arameter..*/.#de
10170 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  fine FUNCTION(zN
10180 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10190 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
101a0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
101b0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
101c0 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
101d0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
101e0 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
101f0 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
10200 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
10210 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10220 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28  efine VFUNCTION(
10230 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10240 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
10250 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10260 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
10270 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
10280 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
10290 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
102a0 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
102b0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
102c0 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne DFUNCTION(zNa
102d0 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
102e0 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
102f0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10300 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
10310 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20  E_UTF8, \.   0, 
10320 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
10330 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10340 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61  ne PURE_DATE(zNa
10350 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10360 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10370 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10380 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
10390 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55  E_UTF8|SQLITE_FU
103a0 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20  NC_CONSTANT, \. 
103b0 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65    (void*)&sqlite
103c0 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e  3Config, 0, xFun
103d0 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
103e0 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  } }.#define FUNC
103f0 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
10400 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10410 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
10420 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54   \.  {nArg,SQLIT
10430 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
10440 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
10450 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10460 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
10470 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  s,\.   SQLITE_IN
10480 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
10490 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
104a0 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
104b0 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28  ne STR_FUNCTION(
104c0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
104d0 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
104e0 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
104f0 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
10500 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
10510 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
10520 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c  OLL), \.   pArg,
10530 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
10540 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20  Name, }.#define 
10550 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
10560 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
10570 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10580 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10590 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
105a0 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
105b0 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
105c0 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
105d0 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  0} }.#define AGG
105e0 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
105f0 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
10600 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20  ep, xFinal) \.  
10610 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10620 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
10630 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
10640 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
10650 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53  _PTR(arg), 0, xS
10660 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d  tep,xFinal,#zNam
10670 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20  e, {0}}.#define 
10680 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65  AGGREGATE2(zName
10690 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
106a0 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
106b0 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
106c0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
106d0 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
106e0 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
106f0 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51  raFlags, \.   SQ
10700 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
10710 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78  arg), 0, xStep,x
10720 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30  Final,#zName, {0
10730 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  }}../*.** All cu
10740 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
10750 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
10760 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
10770 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
10780 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
10790 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
107a0 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
107b0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
107c0 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
107d0 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
107e0 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
107f0 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
10800 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
10810 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
10820 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
10830 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
10840 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
10850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10860 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
10870 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
10880 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
10890 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
108a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
108b0 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
108c0 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
108d0 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
108e0 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
108f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10900 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
10910 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
10920 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
10930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10940 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
10950 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
10960 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
10970 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
10980 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
10990 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
109a0 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
109b0 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
109c0 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
109d0 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
109e0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
109f0 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
10a00 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
10a10 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
10a20 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
10a30 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
10a40 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
10a50 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
10a60 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
10a70 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
10a80 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
10a90 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
10aa0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
10ab0 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
10ac0 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
10ad0 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
10ae0 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
10af0 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
10b00 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
10b10 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
10b20 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
10b30 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
10b40 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
10b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10b60 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
10b70 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
10b80 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
10b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
10bb0 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
10bc0 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
10bd0 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
10be0 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
10bf0 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
10c00 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
10c10 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ion */.  Table *
10c20 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20  pEpoTab;        
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10c40 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65   Eponymous table
10c50 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65   for this module
10c60 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e   */.};../*.** in
10c70 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
10c80 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  each column of a
10c90 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68  n SQL table is h
10ca0 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e  eld in an instan
10cb0 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
10cc0 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
10cd0 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68  ct Column {.  ch
10ce0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f  ar *zName;     /
10cf0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63  * Name of this c
10d00 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65  olumn, \000, the
10d10 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20  n the type */.  
10d20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20  Expr *pDflt;    
10d30 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75   /* Default valu
10d40 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
10d50 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
10d60 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
10d70 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
10d80 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
10d90 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
10da0 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
10db0 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72   An OE_ code for
10dc0 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20   handling a NOT 
10dd0 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
10de0 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
10df0 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
10e00 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
10e10 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  .. values */.  u
10e20 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20  8 szEst;        
10e30 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
10e40 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68  e of value in th
10e50 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f  is column. sizeo
10e60 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75  f(INT)==1 */.  u
10e70 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20  8 colFlags;     
10e80 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  /* Boolean prope
10e90 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46  rties.  See COLF
10ea0 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c  LAG_ defines bel
10eb0 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  ow */.};../* All
10ec0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
10ed0 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a  Column.colFlags:
10ee0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46  .*/.#define COLF
10ef0 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30  LAG_PRIMKEY  0x0
10f00 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  001    /* Column
10f10 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
10f20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
10f30 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
10f40 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20  IDDEN   0x0002  
10f50 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f    /* A hidden co
10f60 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61  lumn in a virtua
10f70 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
10f80 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59  ne COLFLAG_HASTY
10f90 50 45 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  PE  0x0004    /*
10fa0 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f   Type name follo
10fb0 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a  ws column name *
10fc0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
10fd0 47 5f 55 4e 49 51 55 45 20 20 20 30 78 30 30 30  G_UNIQUE   0x000
10fe0 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64  8    /* Column d
10ff0 65 66 20 63 6f 6e 74 61 69 6e 73 20 22 55 4e 49  ef contains "UNI
11000 51 55 45 22 20 6f 72 20 22 50 4b 22 20 2a 2f 0a  QUE" or "PK" */.
11010 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
11020 53 4f 52 54 45 52 52 45 46 20 30 78 30 30 31 30  SORTERREF 0x0010
11030 20 20 20 2f 2a 20 55 73 65 20 73 6f 72 74 65 72     /* Use sorter
11040 2d 72 65 66 73 20 77 69 74 68 20 74 68 69 73 20  -refs with this 
11050 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  column */../*.**
11060 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
11070 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
11080 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
11090 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
110a0 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
110b0 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
110c0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
110d0 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
110e0 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
110f0 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
11100 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
11110 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
11120 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
11130 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d  * If CollSeq.xCm
11140 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65  p is NULL, it me
11150 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ans that the.** 
11160 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11170 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ce is undefined.
11180 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20    Indices built 
11190 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a  on an undefined.
111a0 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
111b0 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65  uence may not be
111c0 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e   read or written
111d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c  ..*/.struct Coll
111e0 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  Seq {.  char *zN
111f0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
11200 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   Name of the col
11210 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
11220 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a   UTF-8 encoded *
11230 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
11240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
11250 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c  t encoding handl
11260 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a  ed by xCmp() */.
11270 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
11280 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
11290 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
112a0 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
112b0 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
112c0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
112d0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
112e0 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
112f0 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
11300 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
11310 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  */.};../*.** A s
11320 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65  ort order can be
11330 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44   either ASC or D
11340 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ESC..*/.#define 
11350 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20  SQLITE_SO_ASC   
11360 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69      0  /* Sort i
11370 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
11380 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
11390 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20  ITE_SO_DESC     
113a0 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   1  /* Sort in a
113b0 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
113c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
113d0 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31  _SO_UNDEFINED -1
113e0 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65   /* No sort orde
113f0 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a  r specified */..
11400 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66  /*.** Column aff
11410 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a  inity types..**.
11420 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  ** These used to
11430 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e   have mnemonic n
11440 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72  ame like 'i' for
11450 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
11460 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66  GER and.** 't' f
11470 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  or SQLITE_AFF_TE
11480 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20  XT.  But we can 
11490 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70  save a little sp
114a0 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a  ace and improve.
114b0 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c  ** the speed a l
114c0 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69  ittle by numberi
114d0 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f  ng the values co
114e0 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a  nsecutively..**.
114f0 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68  ** But rather th
11500 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20  an start with 0 
11510 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77  or 1, we begin w
11520 69 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77  ith 'A'.  That w
11530 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74  ay,.** when mult
11540 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79  iple affinity ty
11550 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e  pes are concaten
11560 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69  ated into a stri
11570 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61  ng and.** used a
11580 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  s the P4 operand
11590 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d  , they will be m
115a0 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a  ore readable..**
115b0 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68  .** Note also th
115c0 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  at the numeric t
115d0 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64  ypes are grouped
115e0 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61   together so tha
115f0 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72  t testing.** for
11600 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20   a numeric type 
11610 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70  is a single comp
11620 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65  arison.  And the
11630 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69   BLOB type is fi
11640 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  rst..*/.#define 
11650 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20  SQLITE_AFF_BLOB 
11660 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20      'A'.#define 
11670 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
11680 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20      'B'.#define 
11690 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
116a0 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20  IC  'C'.#define 
116b0 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
116c0 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20  ER  'D'.#define 
116d0 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
116e0 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65      'E'..#define
116f0 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69   sqlite3IsNumeri
11700 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28  cAffinity(X)  ((
11710 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  X)>=SQLITE_AFF_N
11720 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54  UMERIC)../*.** T
11730 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
11740 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20  SK values masks 
11750 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63  off the signific
11760 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a  ant bits of an.*
11770 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65  * affinity value
11780 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
11790 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20  ITE_AFF_MASK    
117a0 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64   0x47../*.** Add
117b0 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75  itional bit valu
117c0 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f  es that can be O
117d0 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69  Red with an affi
117e0 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20  nity without.** 
117f0 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66  changing the aff
11800 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  inity..**.** The
11810 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
11820 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e  flag is a combin
11830 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20  ation of NULLEQ 
11840 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a  and JUMPIFNULL..
11850 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20  ** It causes an 
11860 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65  assert() to fire
11870 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
11880 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73  nd to a comparis
11890 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69  on.** operator i
118a0 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  s NULL.  It is a
118b0 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20  dded to certain 
118c0 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
118d0 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65  tors to.** prove
118e0 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e   that the operan
118f0 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f  ds are always NO
11900 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69  T NULL..*/.#defi
11910 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  ne SQLITE_KEEPNU
11920 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  LL     0x08  /* 
11930 55 73 65 64 20 62 79 20 76 65 63 74 6f 72 20 3d  Used by vector =
11940 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69  = or <> */.#defi
11950 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  ne SQLITE_JUMPIF
11960 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20  NULL   0x10  /* 
11970 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20  jumps if either 
11980 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
11990 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
119a0 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30  E_STOREP2      0
119b0 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65  x20  /* Store re
119c0 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20  sult in reg[P2] 
119d0 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70  rather than jump
119e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
119f0 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20  TE_NULLEQ       
11a00 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55  0x80  /* NULL=NU
11a10 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
11a20 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20  LITE_NOTNULL    
11a30 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72    0x90  /* Asser
11a40 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20  t that operands 
11a50 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a  are never NULL *
11a60 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  /../*.** An obje
11a70 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
11a80 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
11a90 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ach virtual tabl
11aa0 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20  e present in.** 
11ab0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
11ac0 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ema..**.** If th
11ad0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
11ae0 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
11af0 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
11b00 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
11b10 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
11b20 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
11b30 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
11b40 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
11b50 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
11b60 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
11b70 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
11b80 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
11b90 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
11ba0 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
11bb0 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
11bc0 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
11bd0 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
11be0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a   virtual table.*
11bf0 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
11c00 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
11c10 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
11c20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
11c30 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  n.** database co
11c40 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
11c50 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
11c60 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
11c70 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d  atabase.** schem
11c80 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
11c90 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
11ca0 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
11cb0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
11cc0 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
11cd0 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
11ce0 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
11cf0 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
11d00 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
11d10 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
11d20 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
11d30 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11d40 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
11d50 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
11d60 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
11d70 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
11d80 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
11d90 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68  l tables.** with
11da0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
11db0 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70   So that they ap
11dc0 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20  pear as part of 
11dd0 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74  the callers.** t
11de0 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
11df0 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
11e00 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
11e10 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
11e20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
11e30 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
11e40 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
11e50 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
11e60 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
11e70 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
11e80 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
11e90 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
11ea0 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
11eb0 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
11ec0 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
11ed0 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
11ee0 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
11ef0 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
11f00 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
11f10 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
11f20 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
11f30 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
11f40 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
11f50 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
11f60 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
11f70 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
11f80 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
11f90 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
11fa0 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
11fb0 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
11fc0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
11fd0 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
11fe0 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
11ff0 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
12000 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
12010 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
12020 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
12030 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
12040 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
12050 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
12060 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
12070 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
12080 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
12090 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
120a0 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
120b0 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
120c0 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
120d0 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e  ot.** deleted an
120e0 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  d the sqlite3_vt
120f0 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20  ab* handles are 
12100 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28  not xDisconnect(
12110 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  )ed.** immediate
12120 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65  ly. Instead, the
12130 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d  y are moved from
12140 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
12150 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e  le list to.** an
12160 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73  other linked lis
12170 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20  t headed by the 
12180 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
12190 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ect member of th
121a0 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
121b0 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63  ng sqlite3 struc
121c0 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74  ture. They are t
121d0 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73  hen deleted/xDis
121e0 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78  connected.** nex
121f0 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
12200 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
12210 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
12220 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
12230 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
12240 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
12250 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
12260 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
12270 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
12280 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
12290 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
122a0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
122b0 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
122c0 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
122d0 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
122e0 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
122f0 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
12300 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
12310 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
12320 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
12330 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
12340 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
12350 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
12360 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
12370 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
12380 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  ated by.** sqlit
12390 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73  e3DbMalloc(), us
123a0 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
123b0 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64  on handle stored
123c0 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73   in VTable.db as
123d0 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
123e0 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
123f0 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
12400 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
12410 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
12420 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
12430 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
12440 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
12450 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
12460 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
12470 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
12480 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
12490 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
124a0 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
124b0 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
124c0 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
124d0 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
124e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
124f0 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
12500 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
12510 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
12520 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
12530 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
12540 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
12550 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
12560 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
12570 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
12580 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
12590 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
125a0 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
125b0 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
125c0 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
125d0 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
125e0 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65  The schema for e
125f0 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e  ach SQL table an
12600 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73  d view is repres
12610 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
12620 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ** by an instanc
12630 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
12640 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
12650 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
12660 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
12670 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
12680 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
12690 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
126a0 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
126b0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
126c0 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
126d0 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
126e0 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
126f0 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
12700 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
12710 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
12720 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
12730 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
12740 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
12750 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
12760 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
12770 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
12780 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
12790 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
127a0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
127b0 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
127c0 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
127d0 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
127e0 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
127f0 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  n */.  ExprList 
12800 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
12810 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
12820 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  ints */.        
12830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12840 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65  *   ... also use
12850 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  d as column name
12860 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20   list in a VIEW 
12870 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
12880 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
12890 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72  t BTree page for
128a0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
128b0 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20 20   u32 nTabRef;   
128c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
128d0 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
128e0 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75  his Table */.  u
128f0 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  32 tabFlags;    
12900 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
12910 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
12920 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20  i16 iPKey;      
12930 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
12940 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f  egative, use aCo
12950 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20  l[iPKey] as the 
12960 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e  rowid */.  i16 n
12970 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
12980 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
12990 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
129a0 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  le */.  LogEst n
129b0 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20  RowLogEst;   /* 
129c0 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69  Estimated rows i
129d0 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73  n table - from s
129e0 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
129f0 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  e */.  LogEst sz
12a00 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  TabRow;     /* E
12a10 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
12a20 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20   each table row 
12a30 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64  in bytes */.#ifd
12a40 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
12a50 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45  _COSTMULT.  LogE
12a60 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20  st costMult;    
12a70 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c   /* Cost multipl
12a80 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68  ier for using th
12a90 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  is table */.#end
12aa0 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  if.  u8 keyConf;
12ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
12ac0 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
12ad0 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
12ae0 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
12af0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
12b00 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
12b10 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
12b20 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
12b30 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
12b40 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
12b50 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
12b60 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
12b70 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
12b80 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
12b90 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
12ba0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
12bb0 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
12bc0 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
12bd0 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
12be0 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68  0: module 1: sch
12bf0 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65  ema 2: vtab name
12c00 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20   3...: args */. 
12c10 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
12c20 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
12c30 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
12c40 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
12c50 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
12c60 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
12c70 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
12c80 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
12c90 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
12ca0 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
12cb0 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
12cc0 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
12cd0 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
12ce0 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
12cf0 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
12d00 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
12d10 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
12d20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61  for Table.tabFla
12d30 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f  gs..**.** TF_OOO
12d40 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74  Hidden applies t
12d50 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77  o tables or view
12d60 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65   that have hidde
12d70 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  n columns that a
12d80 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62  re.** followed b
12d90 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  y non-hidden col
12da0 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20  umns.  Example: 
12db0 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   "CREATE VIRTUAL
12dc0 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a   TABLE x USING.*
12dd0 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e  * vtab1(a HIDDEN
12de0 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22  , b);".  Since "
12df0 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64  b" is a non-hidd
12e00 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61  en column but "a
12e10 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20  " is hidden,.** 
12e20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  the TF_OOOHidden
12e30 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64   attribute would
12e40 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63   apply in this c
12e50 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65  ase.  Such table
12e60 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65  s require.** spe
12e70 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75  cial handling du
12e80 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63  ring INSERT proc
12e90 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69  essing..*/.#defi
12ea0 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
12eb0 20 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20        0x0001    
12ec0 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
12ed0 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
12ee0 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
12ef0 6c 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20  l       0x0002  
12f00 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61    /* An ephemera
12f10 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
12f20 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  ne TF_HasPrimary
12f30 4b 65 79 20 20 20 30 78 30 30 30 34 20 20 20 20  Key   0x0004    
12f40 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70  /* Table has a p
12f50 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
12f60 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63  efine TF_Autoinc
12f70 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38 20  rement   0x0008 
12f80 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
12f90 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
12fa0 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
12fb0 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61 74  efine TF_HasStat
12fc0 31 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  1        0x0010 
12fd0 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73 74     /* nRowLogEst
12fe0 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74 65   set from sqlite
12ff0 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69 6e  _stat1 */.#defin
13000 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
13010 64 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f  d    0x0020    /
13020 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49  * No rowid.  PRI
13030 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20  MARY KEY is the 
13040 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
13050 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
13060 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 4e    0x0040    /* N
13070 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22  o user-visible "
13080 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f  rowid" column */
13090 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
130a0 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 30 30  idden       0x00
130b0 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d  80    /* Out-of-
130c0 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c  Order hidden col
130d0 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  umns */.#define 
130e0 54 46 5f 53 74 61 74 73 55 73 65 64 20 20 20 20  TF_StatsUsed    
130f0 20 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a 20     0x0100    /* 
13100 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64 65  Query planner de
13110 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65 64  cisions affected
13120 20 62 79 0a 20 20 20 20 20 20 20 20 20 20 20 20   by.            
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13140 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64 65           ** Inde
13150 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d 20  x.aiRowLogEst[] 
13160 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e  values */.#defin
13170 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20  e TF_HasNotNull 
13180 20 20 20 20 20 30 78 30 32 30 30 20 20 20 20 2f       0x0200    /
13190 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20 4e  * Contains NOT N
131a0 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ULL constraints 
131b0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74  */../*.** Test t
131c0 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72  o see whether or
131d0 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20   not a table is 
131e0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
131f0 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e    This is.** don
13200 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20  e as a macro so 
13210 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20  that it will be 
13220 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68  optimized out wh
13230 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  en virtual.** ta
13240 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f  ble support is o
13250 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
13260 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  build..*/.#ifnde
13270 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
13280 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
13290 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
132a0 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f  )      ((X)->nMo
132b0 64 75 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a 23  duleArg).#else.#
132c0 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
132d0 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e  al(X)      0.#en
132e0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
132f0 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  s to determine i
13300 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69  f a column is hi
13310 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72  dden.  IsOrdinar
13320 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a  yHiddenColumn().
13330 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  ** only works fo
13340 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61  r non-virtual ta
13350 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74  bles (ordinary t
13360 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29  ables and views)
13370 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79   and is.** alway
13380 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53  s false unless S
13390 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
133a0 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64  DEN_COLUMNS is d
133b0 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20  efined.  The.** 
133c0 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  IsHiddenColumn()
133d0 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61   macro is genera
133e0 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69  l purpose..*/.#i
133f0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
13400 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
13410 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e  OLUMNS).#  defin
13420 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
13430 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
13440 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
13450 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
13460 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
13470 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
13480 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c  mn(X) (((X)->col
13490 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
134a0 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69  HIDDEN)!=0).#eli
134b0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
134c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
134d0 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49  BLE).#  define I
134e0 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
134f0 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e           (((X)->
13500 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
13510 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
13520 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e    define IsOrdin
13530 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
13540 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65  X) 0.#else.#  de
13550 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
13560 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 30  umn(X)         0
13570 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
13580 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
13590 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a  n(X) 0.#endif...
135a0 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c  /* Does the tabl
135b0 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a  e have a rowid *
135c0 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77  /.#define HasRow
135d0 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d  id(X)     (((X)-
135e0 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57  >tabFlags & TF_W
135f0 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29  ithoutRowid)==0)
13600 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65  .#define Visible
13610 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e  Rowid(X) (((X)->
13620 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f  tabFlags & TF_No
13630 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30  VisibleRowid)==0
13640 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f  )../*.** Each fo
13650 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
13660 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61  aint is an insta
13670 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
13680 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
13690 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20  **.** A foreign 
136a0 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65  key is associate
136b0 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65  d with two table
136c0 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74  s.  The "from" t
136d0 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74  able is.** the t
136e0 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
136f0 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ns the REFERENCE
13700 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72  S clause that cr
13710 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67  eates the foreig
13720 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22  n.** key.  The "
13730 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65  to" table is the
13740 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e   table that is n
13750 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45  amed in the REFE
13760 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a  RENCES clause..*
13770 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20  * Consider this 
13780 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20  example:.**.**  
13790 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
137a0 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20  ex1(.**       a 
137b0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
137c0 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20  KEY,.**       b 
137d0 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49  INTEGER CONSTRAI
137e0 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45  NT fk1 REFERENCE
137f0 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20  S ex2(x).**     
13800 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72  );.**.** For for
13810 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20  eign key "fk1", 
13820 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
13830 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20  s "ex1" and the 
13840 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32  to-table is "ex2
13850 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74  "..** Equivalent
13860 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20   names:.**.**   
13870 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20    from-table == 
13880 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20  child-table.**  
13890 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d       to-table ==
138a0 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a   parent-table.**
138b0 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e  .** Each REFEREN
138c0 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72  CES clause gener
138d0 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ates an instance
138e0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
138f0 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77  g structure.** w
13900 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64  hich is attached
13910 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62   to the from-tab
13920 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c  le.  The to-tabl
13930 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74  e need not exist
13940 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f   when.** the fro
13950 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  m-table is creat
13960 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e  ed.  The existen
13970 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62  ce of the to-tab
13980 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65  le is not checke
13990 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73  d..**.** The lis
139a0 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73  t of all parents
139b0 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65   for child Table
139c0 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e   X is held at X.
139d0 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c  pFKey..**.** A l
139e0 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64  ist of all child
139f0 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20  ren for a table 
13a00 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d  named Z (which m
13a10 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78  ight not even ex
13a20 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20  ist).** is held 
13a30 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61  in Schema.fkeyHa
13a40 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b  sh with a hash k
13a50 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75  ey of Z..*/.stru
13a60 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c  ct FKey {.  Tabl
13a70 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a  e *pFrom;     /*
13a80 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   Table containin
13a90 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  g the REFERENCES
13aa0 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68   clause (aka: Ch
13ab0 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ild) */.  FKey *
13ac0 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e  pNextFrom;  /* N
13ad0 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68  ext FKey with th
13ae0 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e  e same in pFrom.
13af0 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20   Next parent of 
13b00 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20  pFrom */.  char 
13b10 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  *zTo;        /* 
13b20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68  Name of table th
13b30 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74  at the key point
13b40 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e  s to (aka: Paren
13b50 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  t) */.  FKey *pN
13b60 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78  extTo;    /* Nex
13b70 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  t with the same 
13b80 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20  zTo. Next child 
13b90 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65  of zTo. */.  FKe
13ba0 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f  y *pPrevTo;    /
13bb0 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20  * Previous with 
13bc0 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a  the same zTo */.
13bd0 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
13be0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13bf0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
13c00 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a   key */.  /* EV:
13c10 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a   R-30323-21917 *
13c20 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65  /.  u8 isDeferre
13c30 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65  d;       /* True
13c40 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63   if constraint c
13c50 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72  hecking is defer
13c60 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20  red till COMMIT 
13c70 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b  */.  u8 aAction[
13c80 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e  2];        /* ON
13c90 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55   DELETE and ON U
13ca0 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72  PDATE actions, r
13cb0 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20  espectively */. 
13cc0 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67   Trigger *apTrig
13cd0 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65  ger[2];/* Trigge
13ce0 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d  rs for aAction[]
13cf0 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74   actions */.  st
13d00 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20  ruct sColMap {  
13d10 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f      /* Mapping o
13d20 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72  f columns in pFr
13d30 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  om to columns in
13d40 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20   zTo */.    int 
13d50 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20  iFrom;          
13d60 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f    /* Index of co
13d70 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f  lumn in pFrom */
13d80 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  .    char *zCol;
13d90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
13da0 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  me of column in 
13db0 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73  zTo.  If NULL us
13dc0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  e PRIMARY KEY */
13dd0 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20  .  } aCol[1];   
13de0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
13df0 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f  entry for each o
13e00 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a  f nCol columns *
13e10 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69  /.};../*.** SQLi
13e20 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79  te supports many
13e30 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
13e40 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e  to resolve a con
13e50 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
13e60 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  .  ROLLBACK proc
13e70 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
13e80 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
13e90 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73  iolation.** caus
13ea0 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  es the operation
13eb0 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66   in process to f
13ec0 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20  ail and for the 
13ed0 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
13ee0 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c  ion.** to be rol
13ef0 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54  led back.  ABORT
13f00 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
13f10 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
13f20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61  in process.** fa
13f30 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f  ils and any prio
13f40 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74  r changes from t
13f50 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f  hat one operatio
13f60 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74  n are backed out
13f70 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61  ,.** but the tra
13f80 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
13f90 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41  rolled back.  FA
13fa0 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  IL processing me
13fb0 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ans that.** the 
13fc0 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
13fd0 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20  gress stops and 
13fe0 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72  returns an error
13ff0 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f   code.  But prio
14000 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65  r.** changes due
14010 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65   to the same ope
14020 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62  ration are not b
14030 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f  acked out and no
14040 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63   rollback.** occ
14050 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61  urs.  IGNORE mea
14060 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74  ns that the part
14070 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20  icular row that 
14080 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74  caused the const
14090 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69  raint.** error i
140a0 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
140b0 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63  r updated.  Proc
140c0 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
140d0 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a   and no error.**
140e0 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52   is returned.  R
140f0 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61  EPLACE means tha
14100 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61  t preexisting da
14110 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
14120 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49   caused.** a UNI
14130 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  QUE constraint v
14140 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d  iolation are rem
14150 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  oved so that the
14160 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a   new insert or.*
14170 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f  * update can pro
14180 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ceed.  Processin
14190 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
141a0 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  no error is repo
141b0 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54  rted..**.** REST
141c0 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61  RICT, SETNULL, a
141d0 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f  nd CASCADE actio
141e0 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f  ns apply only to
141f0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a   foreign keys..*
14200 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68  * RESTRICT is th
14210 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20  e same as ABORT 
14220 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f  for IMMEDIATE fo
14230 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74  reign keys and t
14240 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f  he.** same as RO
14250 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52  LLBACK for DEFER
14260 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55  RED keys.  SETNU
14270 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  LL means that th
14280 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
14290 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
142a0 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20    CASCADE means 
142b0 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72  that a DELETE or
142c0 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a   UPDATE of the.*
142d0 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  * referenced tab
142e0 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67  le row is propag
142f0 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f  ated into the ro
14300 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  w that holds the
14310 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e  .** foreign key.
14320 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  .**.** The follo
14330 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61  wing symbolic va
14340 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  lues are used to
14350 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79   record which ty
14360 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20  pe.** of action 
14370 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66  to take..*/.#def
14380 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20  ine OE_None     
14390 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20  0   /* There is 
143a0 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f  no constraint to
143b0 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e   check */.#defin
143c0 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20  e OE_Rollback 1 
143d0 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70    /* Fail the op
143e0 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c  eration and roll
143f0 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63  back the transac
14400 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
14410 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20  OE_Abort    2   
14420 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e  /* Back out chan
14430 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f  ges but do no ro
14440 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
14450 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
14460 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a  _Fail     3   /*
14470 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74   Stop the operat
14480 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c  ion but leave al
14490 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  l prior changes 
144a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67  */.#define OE_Ig
144b0 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67  nore   4   /* Ig
144c0 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20  nore the error. 
144d0 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e  Do not do the IN
144e0 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
144f0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70  /.#define OE_Rep
14500 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c  lace  5   /* Del
14510 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63  ete existing rec
14520 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53  ord, then do INS
14530 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
14540 0a 23 64 65 66 69 6e 65 20 4f 45 5f 55 70 64 61  .#define OE_Upda
14550 74 65 20 20 20 36 20 20 20 2f 2a 20 50 72 6f 63  te   6   /* Proc
14560 65 73 73 20 61 73 20 61 20 44 4f 20 55 50 44 41  ess as a DO UPDA
14570 54 45 20 69 6e 20 61 6e 20 75 70 73 65 72 74 20  TE in an upsert 
14580 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
14590 73 74 72 69 63 74 20 37 20 20 20 2f 2a 20 4f 45  strict 7   /* OE
145a0 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
145b0 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
145c0 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
145d0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
145e0 4e 75 6c 6c 20 20 38 20 20 20 2f 2a 20 53 65 74  Null  8   /* Set
145f0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
14600 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
14610 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
14620 44 66 6c 74 20 20 39 20 20 20 2f 2a 20 53 65 74  Dflt  9   /* Set
14630 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
14640 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
14650 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
14660 20 4f 45 5f 43 61 73 63 61 64 65 20 20 31 30 20   OE_Cascade  10 
14670 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
14680 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
14690 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31  ne OE_Default  1
146a0 31 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65  1  /* Do whateve
146b0 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  r the default ac
146c0 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a  tion is */.../*.
146d0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
146e0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
146f0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
14700 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74  sed as the first
14710 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  .** argument to 
14720 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f  sqlite3VdbeKeyCo
14730 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65  mpare and is use
14740 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65  d to control the
14750 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
14760 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20  f the two index 
14770 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  keys..**.** Note
14780 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72   that aSortOrder
14790 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68  [] and aColl[] h
147a0 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f  ave nField+1 slo
147b0 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  ts.  There.** ar
147c0 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66  e nField slots f
147d0 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  or the columns o
147e0 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20  f an index then 
147f0 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a  one extra slot.*
14800 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20  * for the rowid 
14810 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  at the end..*/.s
14820 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
14830 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20    u32 nRef;     
14840 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14850 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  of references to
14860 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62   this KeyInfo ob
14870 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ject */.  u8 enc
14880 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14890 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d   Text encoding -
148a0 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   one of the SQLI
148b0 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a  TE_UTF* values *
148c0 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46 69 65 6c  /.  u16 nKeyFiel
148d0 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  d;      /* Numbe
148e0 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73  r of key columns
148f0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
14900 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c 64  .  u16 nAllField
14910 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20  ;      /* Total 
14920 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64 69  columns, includi
14930 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f 74 68 65  ng key plus othe
14940 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rs */.  sqlite3 
14950 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
14960 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
14970 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a  ection */.  u8 *
14980 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
14990 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f  /* Sort order fo
149a0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a  r each column. *
149b0 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f  /.  CollSeq *aCo
149c0 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61  ll[1];  /* Colla
149d0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f  ting sequence fo
149e0 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  r each term of t
149f0 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  he key */.};../*
14a00 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  .** This object 
14a10 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 77  holds a record w
14a20 68 69 63 68 20 68 61 73 20 62 65 65 6e 20 70 61  hich has been pa
14a30 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e  rsed out into in
14a40 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c  dividual.** fiel
14a50 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70  ds, for the purp
14a60 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61 20  oses of doing a 
14a70 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a  comparison..**.*
14a80 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e  * A record is an
14a90 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e   object that con
14aa0 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
14ab0 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61  e fields of data
14ac0 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65  ..** Records are
14ad0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
14ae0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
14af0 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f  table row and to
14b00 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65   store.** the ke
14b10 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20  y of an index.  
14b20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20  A blob encoding 
14b30 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63  of a record is c
14b40 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65  reated by.** the
14b50 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f   OP_MakeRecord o
14b60 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42  pcode of the VDB
14b70 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65  E and is disasse
14b80 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  mbled by the.** 
14b90 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
14ba0 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ..**.** An insta
14bb0 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
14bc0 63 74 20 73 65 72 76 65 73 20 61 73 20 61 20 22  ct serves as a "
14bd0 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20 61  key" for doing a
14be0 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e   search on.** an
14bf0 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20 54   index b+tree. T
14c00 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20 73  he goal of the s
14c10 65 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e 64  earch is to find
14c20 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 0a   the entry that.
14c30 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f 20  ** is closed to 
14c40 74 68 65 20 6b 65 79 20 64 65 73 63 72 69 62 65  the key describe
14c50 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63 74  d by this object
14c60 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 6d  .  This object m
14c70 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73  ight hold.** jus
14c80 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  t a prefix of th
14c90 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d 62  e key.  The numb
14ca0 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73 20  er of fields is 
14cb0 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79  given by.** pKey
14cc0 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a  Info->nField..**
14cd0 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72  .** The r1 and r
14ce0 32 20 66 69 65 6c 64 73 20 61 72 65 20 74 68 65  2 fields are the
14cf0 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75 72   values to retur
14d00 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20 69 73  n if this key is
14d10 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72   less than.** or
14d20 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 61 20   greater than a 
14d30 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72 65 65  key in the btree
14d40 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
14d50 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d 61   These are norma
14d60 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31  lly.** -1 and +1
14d70 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 62   respectively, b
14d80 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76 65  ut might be inve
14d90 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d  rted to +1 and -
14da0 31 20 69 66 20 74 68 65 20 62 2d 74 72 65 65 0a  1 if the b-tree.
14db0 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f 72  ** is in DESC or
14dc0 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b  der..**.** The k
14dd0 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  ey comparison fu
14de0 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79  nctions actually
14df0 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 5f   return default_
14e00 72 63 20 77 68 65 6e 20 74 68 65 79 20 66 69 6e  rc when they fin
14e10 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20 63  d.** an equals c
14e20 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66 61  omparison.  defa
14e30 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d 31  ult_rc can be -1
14e40 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20  , 0, or +1.  If 
14e50 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c  there are.** mul
14e60 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e  tiple entries in
14e70 20 74 68 65 20 62 2d 74 72 65 65 20 77 69 74 68   the b-tree with
14e80 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28 77   the same key (w
14e90 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67  hen only looking
14ea0 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73 74  .** at the first
14eb0 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
14ec0 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75 6c  ds,) then defaul
14ed0 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74 20  t_rc can be set 
14ee0 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73  to -1 to.** caus
14ef0 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 20  e the search to 
14f00 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d 61  find the last ma
14f10 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61  tch, or +1 to ca
14f20 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74  use the search t
14f30 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66 69  o.** find the fi
14f40 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a  rst match..**.**
14f50 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69   The key compari
14f60 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77 69  son functions wi
14f70 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74 6f  ll set eqSeen to
14f80 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65 76   true if they ev
14f90 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65 71  er.** get and eq
14fa0 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65 6e  ual results when
14fb0 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73 20   comparing this 
14fc0 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20 62  structure to a b
14fd0 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a  -tree record..**
14fe0 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63   When default_rc
14ff0 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68 20  !=0, the search 
15000 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e 20  might end up on 
15010 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64  the record immed
15020 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65  iately.** before
15030 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68   the first match
15040 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   or immediately 
15050 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20 6d  after the last m
15060 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71  atch.  The.** eq
15070 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20  Seen field will 
15080 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65 72  indicate whether
15090 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63 74   or not an exact
150a0 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69 6e   match exists in
150b0 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a   the.** b-tree..
150c0 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b  */.struct Unpack
150d0 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79  edRecord {.  Key
150e0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20  Info *pKeyInfo; 
150f0 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e   /* Collation an
15100 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66  d sort-order inf
15110 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65  ormation */.  Me
15120 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *aMem;        
15130 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20    /* Values */. 
15140 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
15150 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15160 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d  f entries in apM
15170 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66  em[] */.  i8 def
15180 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a  ault_rc;      /*
15190 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75   Comparison resu
151a0 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65  lt if keys are e
151b0 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72  qual */.  u8 err
151c0 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Code;         /*
151d0 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20   Error detected 
151e0 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72  by xRecordCompar
151f0 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f  e (CORRUPT or NO
15200 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b  MEM) */.  i8 r1;
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15220 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
15230 20 69 66 20 28 6c 68 73 20 3c 20 72 68 73 29 20   if (lhs < rhs) 
15240 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20 20  */.  i8 r2;     
15250 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
15260 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
15270 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20  lhs > rhs) */.  
15280 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20 20  u8 eqSeen;      
15290 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
152a0 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70 61  n equality compa
152b0 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20 73  rison has been s
152c0 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a  een */.};.../*.*
152d0 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78  * Each SQL index
152e0 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
152f0 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a  in memory by an.
15300 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
15310 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
15320 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  ucture..**.** Th
15330 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
15340 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20   table that are 
15350 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72  to be indexed ar
15360 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62  e described.** b
15370 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d  y the aiColumn[]
15380 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73   field of this s
15390 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65  tructure.  For e
153a0 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a  xample, suppose.
153b0 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66  ** we have the f
153c0 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61  ollowing table a
153d0 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20  nd index:.**.** 
153e0 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
153f0 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20   Ex1(c1 int, c2 
15400 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a  int, c3 text);.*
15410 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  *     CREATE IND
15420 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33  EX Ex2 ON Ex1(c3
15430 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  ,c1);.**.** In t
15440 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  he Table structu
15450 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78  re describing Ex
15460 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75  1, nCol==3 becau
15470 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  se there are.** 
15480 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  three columns in
15490 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20   the table.  In 
154a0 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74  the Index struct
154b0 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a  ure describing.*
154c0 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d  * Ex2, nColumn==
154d0 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65  2 since 2 of the
154e0 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78   3 columns of Ex
154f0 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a  1 are indexed..*
15500 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  * The value of a
15510 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30  iColumn is {2, 0
15520 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d  }.  aiColumn[0]=
15530 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 0a 2a  =2 because the.*
15540 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74  * first column t
15550 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33  o be indexed (c3
15560 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
15570 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b  f 2 in Ex1.aCol[
15580 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  ]..** The second
15590 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
155a0 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61  dexed (c1) has a
155b0 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a  n index of 0 in.
155c0 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68  ** Ex1.aCol[], h
155d0 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d  ence Ex2.aiColum
155e0 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54  n[1]==0..**.** T
155f0 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  he Index.onError
15600 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65   field determine
15610 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  s whether or not
15620 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c   the indexed col
15630 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20  umns.** must be 
15640 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20  unique and what 
15650 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72  to do if they ar
15660 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64  e not.  When Ind
15670 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f  ex.onError=OE_No
15680 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20  ne,.** it means 
15690 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e  this is not a un
156a0 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68  ique index.  Oth
156b0 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75  erwise it is a u
156c0 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61  nique index.** a
156d0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nd the value of 
156e0 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e  Index.onError in
156f0 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68  dicate the which
15700 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
15710 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68  tion.** algorith
15720 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e  m to employ when
15730 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20  ever an attempt 
15740 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72  is made to inser
15750 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a  t a non-unique.*
15760 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  * element..**.**
15770 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   While parsing a
15780 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72   CREATE TABLE or
15790 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74   CREATE INDEX st
157a0 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72  atement in order
157b0 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20   to.** generate 
157c0 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70  VDBE code (as op
157d0 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67  posed to parsing
157e0 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61   one read from a
157f0 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  n sqlite_master.
15800 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74  ** table as part
15810 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65   of parsing an e
15820 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
15830 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69   schema), transi
15840 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a  ent instances.**
15850 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
15860 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  re may be create
15870 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
15880 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76  the Index.tnum v
15890 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73  ariable is.** us
158a0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
158b0 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42  address of a VDB
158c0 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e  E instruction, n
158d0 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61  ot a database pa
158e0 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74  ge.** number (it
158f0 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61   cannot - the da
15900 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e  tabase page is n
15910 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74  ot allocated unt
15920 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70  il the VDBE.** p
15930 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74  rogram is execut
15940 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74  ed). See convert
15950 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61  ToWithoutRowidTa
15960 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c  ble() for detail
15970 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  s..*/.struct Ind
15980 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ex {.  char *zNa
15990 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
159a0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
159b0 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a  index */.  i16 *
159c0 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  aiColumn;       
159d0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c      /* Which col
159e0 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79  umns are used by
159f0 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73   this index.  1s
15a00 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45  t is 0 */.  LogE
15a10 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b  st *aiRowLogEst;
15a20 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41       /* From ANA
15a30 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20  LYZE: Est. rows 
15a40 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68  selected by each
15a50 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62   column */.  Tab
15a60 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20  le *pTable;     
15a70 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c        /* The SQL
15a80 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64   table being ind
15a90 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  exed */.  char *
15aa0 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20  zColAff;        
15ab0 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
15ac0 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
15ad0 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
15ae0 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
15af0 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
15b00 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65  /* The next inde
15b10 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
15b20 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  h the same table
15b30 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
15b40 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f  chema;         /
15b50 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
15b60 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
15b70 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
15b80 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
15b90 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a  for each column:
15ba0 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c   True==DESC, Fal
15bb0 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e  se==ASC */.  con
15bc0 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c  st char **azColl
15bd0 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f  ;     /* Array o
15be0 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  f collation sequ
15bf0 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69  ence names for i
15c00 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndex */.  Expr *
15c10 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20  pPartIdxWhere;  
15c20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
15c30 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69  se for partial i
15c40 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72  ndices */.  Expr
15c50 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20  List *aColExpr; 
15c60 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65       /* Column e
15c70 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
15c80 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
15c90 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50           /* DB P
15ca0 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72  age containing r
15cb0 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65  oot of this inde
15cc0 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  x */.  LogEst sz
15cd0 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20  IdxRow;         
15ce0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65  /* Estimated ave
15cf0 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e  rage row size in
15d00 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20   bytes */.  u16 
15d10 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20  nKeyCol;        
15d20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15d30 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e  f columns formin
15d40 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75  g the key */.  u
15d50 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 nColumn;     
15d60 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15d70 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f  r of columns sto
15d80 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78  red in the index
15d90 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72   */.  u8 onError
15da0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15db0 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49  * OE_Abort, OE_I
15dc0 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63  gnore, OE_Replac
15dd0 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f  e, or OE_None */
15de0 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54  .  unsigned idxT
15df0 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31  ype:2;      /* 1
15e00 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49  ==UNIQUE, 2==PRI
15e10 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45  MARY KEY, 0==CRE
15e20 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75  ATE INDEX */.  u
15e30 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72  nsigned bUnorder
15e40 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74  ed:1;   /* Use t
15e50 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d  his index for ==
15e60 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f   or IN queries o
15e70 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  nly */.  unsigne
15e80 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b  d uniqNotNull:1;
15e90 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49    /* True if UNI
15ea0 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
15eb0 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73   for all columns
15ec0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
15ed0 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f  sResized:1;    /
15ee0 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65  * True if resize
15ef0 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61  IndexObject() ha
15f00 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
15f10 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f  .  unsigned isCo
15f20 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54  vering:1;   /* T
15f30 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61  rue if this is a
15f40 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   covering index 
15f50 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  */.  unsigned no
15f60 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a  SkipScan:1;   /*
15f70 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75   Do not try to u
15f80 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20  se skip-scan if 
15f90 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  true */.  unsign
15fa0 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20  ed hasStat1:1;  
15fb0 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73     /* aiRowLogEs
15fc0 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72  t values come fr
15fd0 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
15fe0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 4e  */.  unsigned bN
15ff0 6f 51 75 65 72 79 3a 31 3b 20 20 20 20 20 2f 2a  oQuery:1;     /*
16000 20 44 6f 20 6e 6f 74 20 75 73 65 20 74 68 69 73   Do not use this
16010 20 69 6e 64 65 78 20 74 6f 20 6f 70 74 69 6d 69   index to optimi
16020 7a 65 20 71 75 65 72 69 65 73 20 2a 2f 0a 23 69  ze queries */.#i
16030 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
16040 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
16050 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16070 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
16080 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
16090 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
160a0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
160b0 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
160c0 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
160d0 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
160e0 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
160f0 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
16100 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
16110 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
16120 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
16130 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
16140 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
16150 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
16160 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69  */.  tRowcnt *ai
16170 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a  RowEst;       /*
16180 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
16190 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20   stat1 data for 
161a0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
161b0 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30  tRowcnt nRowEst0
161c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  ;        /* Non-
161d0 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62  logarithmic numb
161e0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
161f0 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69  e index */.#endi
16200 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  f.};../*.** Allo
16210 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49  wed values for I
16220 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a  ndex.idxType.*/.
16230 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
16240 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20  DXTYPE_APPDEF   
16250 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65     0   /* Create
16260 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49  d using CREATE I
16270 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
16280 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55  SQLITE_IDXTYPE_U
16290 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f  NIQUE      1   /
162a0 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55  * Implements a U
162b0 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
162c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
162d0 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
162e0 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73  RYKEY  2   /* Is
162f0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
16300 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a   for the table *
16310 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  /../* Return tru
16320 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
16330 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  a PRIMARY KEY in
16340 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
16350 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  sPrimaryKeyIndex
16360 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79  (X)  ((X)->idxTy
16370 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59  pe==SQLITE_IDXTY
16380 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a  PE_PRIMARYKEY)..
16390 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
163a0 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55  f index X is a U
163b0 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23  NIQUE index */.#
163c0 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49  define IsUniqueI
163d0 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58  ndex(X)      ((X
163e0 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e  )->onError!=OE_N
163f0 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64  one)../* The Ind
16400 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61  ex.aiColumn[] va
16410 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  lues are normall
16420 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  y positive integ
16430 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72  er.  But.** ther
16440 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74  e are some negat
16450 69 76 65 20 76 61 6c 75 65 73 20 74 68 61 74 20  ive values that 
16460 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61  have special mea
16470 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  ning:.*/.#define
16480 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d   XN_ROWID     (-
16490 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  1)     /* Indexe
164a0 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  d column is the 
164b0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
164c0 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d   XN_EXPR      (-
164d0 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  2)     /* Indexe
164e0 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65  d column is an e
164f0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a  xpression */../*
16500 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
16510 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
16520 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
16530 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
16540 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69  in memory.** usi
16550 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f  ng a structure o
16560 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65  f this type.  Se
16570 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
16580 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
16590 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73  e.** analyze.c s
165a0 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61  ource file for a
165b0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
165c0 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
165d0 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20   IndexSample {. 
165e0 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20   void *p;       
165f0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
16600 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20   sampled record 
16610 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
16620 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
16630 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65  f record in byte
16640 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  s */.  tRowcnt *
16650 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anEq;    /* Est.
16660 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
16670 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71  where the key eq
16680 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65  uals this sample
16690 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
166a0 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nLt;    /* Est. 
166b0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
166c0 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73  here key is less
166d0 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
166e0 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
166f0 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e  anDLt;   /* Est.
16700 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69   number of disti
16710 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68  nct keys less th
16720 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
16730 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
16740 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
16750 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
16760 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
16770 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
16780 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
16790 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
167a0 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
167b0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69  on..**.** Note i
167c0 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65  f Token.z==0 the
167d0 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20  n Token.dyn and 
167e0 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65  Token.n are unde
167f0 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79  fined and.** may
16800 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20   contain random 
16810 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20  values.  Do not 
16820 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74  make any assumpt
16830 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e  ions about Token
16840 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65  .dyn.** and Toke
16850 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a  n.n when Token.z
16860 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ==0..*/.struct T
16870 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
16880 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
16890 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
168a0 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
168b0 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
168c0 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
168d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
168e0 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
168f0 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
16900 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
16910 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
16920 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
16930 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
16940 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
16950 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
16960 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
16970 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
16980 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
16990 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
169a0 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
169b0 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
169c0 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
169d0 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
169e0 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
169f0 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
16a00 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
16a10 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
16a20 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
16a30 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
16a40 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
16a50 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
16a60 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
16a70 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
16a80 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
16a90 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
16aa0 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
16ab0 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
16ac0 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
16ad0 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
16ae0 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
16af0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
16b00 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
16b10 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
16b20 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
16b30 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
16b40 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
16b50 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
16b60 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
16b70 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
16b80 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
16b90 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
16ba0 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
16bd0 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
16be0 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
16bf0 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
16c00 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
16c10 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
16c20 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
16c30 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
16c40 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
16c70 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
16c80 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
16c90 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
16ca0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
16cb0 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
16cc0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
16cd0 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
16ce0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
16cf0 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
16d00 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
16d10 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
16d20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
16d30 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
16d40 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
16d50 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
16d60 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
16d70 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
16d80 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
16d90 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
16da0 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
16db0 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
16dc0 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
16dd0 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
16de0 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
16df0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
16e00 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
16e10 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
16e20 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
16e30 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
16e40 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
16e50 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
16e60 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
16e70 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
16e80 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
16e90 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
16ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
16eb0 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
16ec0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
16ed0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
16ee0 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
16ef0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
16f00 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
16f10 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
16f20 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
16f30 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
16f40 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
16f50 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
16f60 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
16f70 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
16f80 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
16f90 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
16fa0 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
16fb0 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
16fc0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16fd0 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
16fe0 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
16ff0 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
17000 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
17010 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
17020 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
17030 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
17060 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
17070 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
17080 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
170b0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
170c0 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
170d0 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
170e0 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
170f0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
17100 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
17110 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
17120 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
17130 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
17140 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
17150 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
17160 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
17170 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
17180 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
17190 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
171a0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
171b0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
171c0 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
171d0 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
171e0 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
171f0 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
17200 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
17210 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
17220 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
17230 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
17240 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17250 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
17260 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
17270 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
17280 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
17290 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
172a0 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
172b0 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
172c0 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
172d0 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
172e0 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
172f0 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
17300 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
17310 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
17320 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
17330 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
17340 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
17350 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
17360 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
17370 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
17380 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
17390 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
173a0 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
173b0 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
173c0 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
173d0 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
173e0 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
173f0 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
17400 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
17410 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
17420 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
17430 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
17440 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
17450 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
17460 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
17470 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
17480 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
17490 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
174a0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
174b0 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
174c0 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
174d0 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
174e0 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
174f0 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
17500 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
17510 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
17520 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
17530 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
17540 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
17550 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
17560 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
17570 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
17580 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
17590 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
175a0 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
175b0 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
175c0 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
175d0 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
175e0 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
175f0 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
17600 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
17610 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
17620 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
17630 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
17640 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
17650 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
17660 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
17670 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
17680 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
17690 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
176a0 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
176b0 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54  TK_BLOB,.** or T
176c0 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
176d0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
176e0 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
176f0 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
17700 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
17710 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
17720 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
17730 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
17740 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a  en contains the.
17750 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
17760 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
17770 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
17780 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
17790 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
177a0 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
177b0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
177c0 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
177d0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
177e0 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
177f0 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
17800 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
17810 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
17820 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
17830 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
17840 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
17850 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
17860 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
17870 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
17880 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
17890 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
178a0 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
178b0 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
178c0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
178d0 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
178e0 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
178f0 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
17900 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
17910 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
17920 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
17930 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
17940 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
17950 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
17960 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
17970 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
17980 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
17990 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
179a0 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
179b0 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
179c0 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
179d0 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64  List is.** valid
179e0 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
179f0 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
17a00 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
17a10 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
17a20 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
17a30 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
17a40 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
17a50 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
17a60 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
17a70 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
17a80 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
17a90 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
17aa0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
17ab0 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
17ac0 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
17ad0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
17ae0 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
17af0 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
17b00 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
17b10 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
17b20 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
17b30 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
17b40 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
17b50 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
17b60 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
17b70 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
17b80 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
17b90 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
17ba0 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
17bb0 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
17bc0 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
17bd0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17be0 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
17bf0 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
17c00 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a  a question mark.
17c10 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
17c20 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
17c30 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
17c40 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
17c50 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75   the index.** nu
17c60 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
17c70 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
17c80 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17c90 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
17ca0 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
17cb0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
17cc0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
17cd0 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
17ce0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
17cf0 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
17d00 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
17d10 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
17d20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
17d30 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
17d40 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
17d50 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
17d60 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
17d70 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
17d80 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
17d90 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
17da0 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
17db0 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
17dc0 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
17dd0 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
17de0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
17df0 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
17e00 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
17e10 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
17e20 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
17e30 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
17e40 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
17e50 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
17e60 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
17e70 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
17e80 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
17e90 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
17ea0 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
17eb0 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
17ec0 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
17ed0 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
17ee0 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
17ef0 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
17f00 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
17f10 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
17f20 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
17f30 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
17f40 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
17f50 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
17f60 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
17f70 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
17f80 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
17f90 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
17fa0 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
17fb0 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
17fc0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
17fd0 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
17fe0 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
17ff0 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
18000 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
18010 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
18020 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
18030 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
18040 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
18050 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
18060 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
18070 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
18080 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
18090 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
180a0 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
180b0 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
180c0 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
180d0 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
180e0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
180f0 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
18100 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
18110 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
18120 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
18130 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
18140 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
18150 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
18160 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
18170 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
18180 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
18190 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
181a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
181b0 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
181c0 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
181d0 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
181e0 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  affinity;       
181f0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
18200 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  y of the column 
18210 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f  or 0 if not a co
18220 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c  lumn */.  u32 fl
18230 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
18240 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
18250 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c  s.  EP_* See bel
18260 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ow */.  union {.
18270 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e      char *zToken
18280 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  ;          /* To
18290 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20  ken value. Zero 
182a0 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64  terminated and d
182b0 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69  equoted */.    i
182c0 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20  nt iValue;      
182d0 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67        /* Non-neg
182e0 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61  ative integer va
182f0 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c  lue if EP_IntVal
18300 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20  ue */.  } u;..  
18310 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b  /* If the EP_Tok
18320 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73  enOnly flag is s
18330 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
18340 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
18350 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
18360 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
18370 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
18380 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
18390 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
183a0 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
183b0 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
183c0 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
183d0 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
183e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
183f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
18420 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
18430 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
18440 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
18450 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
18460 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
18470 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
18480 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
18490 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
184a0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
184b0 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
184c0 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
184d0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
184e0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
184f0 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
18500 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
18510 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
18520 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
18530 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
18540 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
18550 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
18560 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
18570 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
18580 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
18590 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
185a0 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
185b0 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
185c0 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
185d0 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
185e0 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
185f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18600 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
18630 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
18640 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
18650 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
18660 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
18670 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
18680 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
18690 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
186a0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
186b0 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
186c0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
186d0 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
186e0 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
18710 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18730 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
18740 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
18750 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18770 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
18780 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
18790 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a  imes likelihood.
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187b0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
187c0 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67 69 73  ELECT: 1st regis
187d0 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65  ter of result ve
187e0 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20  ctor */.  ynVar 
187f0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
18800 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
18810 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
18820 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18840 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
18850 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
18860 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
18870 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
18890 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e  TK_SELECT_COLUMN
188a0 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  : column of the 
188b0 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f  result vector */
188c0 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
188d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
188e0 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
188f0 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
18900 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
18910 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
18920 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
18930 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
18940 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
18950 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
18960 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18970 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
18980 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
18990 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189b0 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
189c0 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
189d0 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189f0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
18a00 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
18a10 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
18a20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
18a30 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
18a40 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
18a50 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
18a60 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
18a70 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
18a80 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
18a90 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
18aa0 6e 73 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  ns.  Can be NULL
18ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ac0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72            ** for
18ad0 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20   a column of an 
18ae0 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78 70 72  index on an expr
18af0 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ession */.};../*
18b00 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
18b10 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
18b20 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
18b30 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
18b40 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
18b50 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30  P_FromJoin  0x00
18b60 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74  0001 /* Originat
18b70 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63  es in ON/USING c
18b80 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a  lause of outer j
18b90 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  oin */.#define E
18ba0 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30  P_Agg       0x00
18bb0 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0002 /* Contains
18bc0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
18bd0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
18be0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48   */.#define EP_H
18bf0 61 73 46 75 6e 63 20 20 20 30 78 30 30 30 30 30  asFunc   0x00000
18c00 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e  4 /* Contains on
18c10 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 69  e or more functi
18c20 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20  ons of any kind 
18c30 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
18c40 20 20 20 20 20 2f 2a 20 30 78 30 30 30 30 30 38       /* 0x000008
18c50 20 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20 66 6f   // available fo
18c60 72 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  r use */.#define
18c70 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
18c80 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
18c90 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
18ca0 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
18cb0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
18cc0 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
18cd0 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
18ce0 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
18cf0 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
18d00 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
18d10 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
18d20 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
18d30 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
18d40 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
18d50 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
18d60 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
18d70 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
18d80 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
18d90 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
18da0 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
18db0 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
18dc0 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
18dd0 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
18de0 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
18df0 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
18e00 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
18e10 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
18e20 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
18e30 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
18e40 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
18e50 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
18e60 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
18e70 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
18e80 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
18e90 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
18ea0 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
18eb0 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
18ec0 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
18ed0 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
18ee0 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
18ef0 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
18f00 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
18f10 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
18f20 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
18f30 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
18f40 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
18f50 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
18f60 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
18f70 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
18f80 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
18f90 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
18fa0 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
18fb0 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
18fc0 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
18fd0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
18fe0 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
18ff0 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
19000 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
19010 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
19020 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
19030 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
19040 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
19050 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
19060 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
19070 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
19080 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
19090 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
190a0 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
190b0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
190c0 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30  ConstFunc 0x0800
190d0 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46  00 /* A SQLITE_F
190e0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20  UNC_CONSTANT or 
190f0 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f  _SLOCHNG functio
19100 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
19110 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30  CanBeNull 0x1000
19120 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c  00 /* Can be nul
19130 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55  l despite NOT NU
19140 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
19150 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71  .#define EP_Subq
19160 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f  uery  0x200000 /
19170 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
19180 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
19190 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
191a0 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34  EP_Alias     0x4
191b0 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61  00000 /* Is an a
191c0 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c  lias for a resul
191d0 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  t set column */.
191e0 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20  #define EP_Leaf 
191f0 20 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a       0x800000 /*
19200 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52   Expr.pLeft, .pR
19210 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74  ight, .u.pSelect
19220 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a   all NULL */../*
19230 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f 70 61  .** The EP_Propa
19240 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61 20 73  gate mask is a s
19250 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73  et of properties
19260 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69 63 61   that automatica
19270 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a  lly propagate.**
19280 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20 70 61   upwards into pa
19290 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23  rent nodes..*/.#
192a0 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
192b0 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
192c0 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50 5f 48  EP_Subquery|EP_H
192d0 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54  asFunc)../*.** T
192e0 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
192f0 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
19300 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
19310 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  its in the.** Ex
19320 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
19330 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
19340 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
19350 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
19360 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
19370 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70  e ExprHasAllProp
19380 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29  erty(E,P)  (((E)
19390 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
193a0 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  )).#define ExprS
193b0 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
193c0 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
193d0 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
193e0 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
193f0 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
19400 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78  =~(P)../* The Ex
19410 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
19420 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
19430 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f   for Verificatio
19440 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a  n, Validation,.*
19450 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  * and Accreditat
19460 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f  ion only.  It wo
19470 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74  rks like ExprSet
19480 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e  Property() durin
19490 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73  g VVA.** process
194a0 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f  es but is a no-o
194b0 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a  p for delivery..
194c0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
194d0 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
194e0 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
194f0 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c  ty(E,P)  (E)->fl
19500 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23  ags|=(P).#else.#
19510 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
19520 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a  VAProperty(E,P).
19530 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
19540 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
19550 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
19560 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62  bytes required b
19570 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a  y a normal Expr.
19580 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78  ** struct, an Ex
19590 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
195a0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
195b0 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66  ag set in Expr.f
195c0 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  lags.** and an E
195d0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
195e0 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
195f0 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
19600 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
19610 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
19620 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
19630 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
19640 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
19650 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
19660 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
19670 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
19680 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
19690 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
196a0 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
196b0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
196c0 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
196d0 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
196e0 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
196f0 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
19700 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
19710 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
19720 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62  er comment.** ab
19730 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  ove sqlite3ExprD
19740 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  up() for details
19750 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
19760 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20  RDUP_REDUCE     
19770 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55      0x0001  /* U
19780 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65  sed reduced-size
19790 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a   Expr nodes */..
197a0 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  /*.** A list of 
197b0 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61  expressions.  Ea
197c0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  ch expression ma
197d0 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76  y optionally hav
197e0 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e  e a.** name.  An
197f0 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69   expr/name combi
19800 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  nation can be us
19810 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
19820 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74  ys, such.** as t
19830 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72  he list of "expr
19840 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66   AS ID" fields f
19850 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45  ollowing a "SELE
19860 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  CT" or in the.**
19870 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65   list of "ID = e
19880 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e  xpr" items in an
19890 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74   UPDATE.  A list
198a0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
198b0 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75  can.** also be u
198c0 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d  sed as the argum
198d0 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f  ent to a functio
198e0 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  n, in which case
198f0 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20   the a.zName.** 
19900 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65  field is not use
19910 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61  d..**.** By defa
19920 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70  ult the Expr.zSp
19930 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61  an field holds a
19940 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20   human-readable 
19950 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a  description of.*
19960 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
19970 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e   that is used in
19980 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
19990 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  of error message
199a0 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  s and.** column 
199b0 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73  labels.  In this
199c0 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61   case, Expr.zSpa
199d0 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74  n is typically t
199e0 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20  he text of a.** 
199f0 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  column expressio
19a00 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69  n as it exists i
19a10 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
19a20 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20  ment.  However, 
19a30 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49  if.** the bSpanI
19a40 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74  sTab flag is set
19a50 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20  , then zSpan is 
19a60 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65  overloaded to me
19a70 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f  an the name.** o
19a80 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
19a90 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a  umn in the form:
19aa0 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e   DATABASE.TABLE.
19ab0 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61  COLUMN.  This la
19ac0 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75  ter.** form is u
19ad0 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73  sed for name res
19ae0 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73  olution with nes
19af0 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73  ted FROM clauses
19b00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
19b10 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78  List {.  int nEx
19b20 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
19b30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70  /* Number of exp
19b40 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20  ressions on the 
19b50 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74  list */.  struct
19b60 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
19b70 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
19b80 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
19b90 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
19ba0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
19bb0 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20     /* The parse 
19bc0 74 72 65 65 20 66 6f 72 20 74 68 69 73 20 65 78  tree for this ex
19bd0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
19be0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
19bf0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
19c00 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
19c10 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
19c20 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
19c30 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  pan;            
19c40 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
19c50 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
19c60 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
19c70 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
19c80 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
19c90 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
19ca0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e      unsigned don
19cb0 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41  e :1;       /* A
19cc0 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
19cd0 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
19ce0 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
19cf0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
19d00 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20  panIsTab :1; /* 
19d10 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54  zSpan holds DB.T
19d20 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20  ABLE.COLUMN */. 
19d30 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73     unsigned reus
19d40 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f  able :1;   /* Co
19d50 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
19d60 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f  n is reusable */
19d70 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
19d80 6f 72 74 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20  orterRef :1; /* 
19d90 44 65 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e  Defer evaluation
19da0 20 75 6e 74 69 6c 20 61 66 74 65 72 20 73 6f 72   until after sor
19db0 74 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  ting */.    unio
19dc0 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74  n {.      struct
19dd0 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69   {.        u16 i
19de0 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20  OrderByCol;     
19df0 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59   /* For ORDER BY
19e00 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  , column number 
19e10 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f  in result set */
19e20 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c  .        u16 iAl
19e30 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ias;           /
19e40 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72  * Index into Par
19e50 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20  se.aAlias[] for 
19e60 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d  zName */.      }
19e70 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43   x;.      int iC
19e80 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20  onstExprReg;    
19e90 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e    /* Register in
19ea0 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75   which Expr valu
19eb0 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20  e is cached */. 
19ec0 20 20 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d     } u;.  } a[1]
19ed0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
19ee0 20 20 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66     /* One slot f
19ef0 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
19f00 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
19f10 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
19f20 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
19f30 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
19f40 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
19f50 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
19f60 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
19f70 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
19f80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
19f90 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
19fa0 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
19fb0 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
19fc0 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
19fd0 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
19fe0 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
19ff0 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
1a000 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
1a010 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
1a020 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
1a030 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
1a040 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
1a050 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
1a060 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
1a070 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
1a080 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
1a090 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
1a0a0 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
1a0b0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
1a0c0 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
1a0d0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
1a0e0 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
1a0f0 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
1a100 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
1a110 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
1a120 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
1a130 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
1a140 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
1a150 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
1a160 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
1a170 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
1a180 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
1a190 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
1a1a0 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
1a1b0 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
1a1c0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
1a1d0 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
1a1e0 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
1a1f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
1a200 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
1a210 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
1a220 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
1a230 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
1a240 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
1a250 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
1a260 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
1a270 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
1a280 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
1a290 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
1a2a0 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
1a2b0 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
1a2c0 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
1a2d0 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
1a2e0 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
1a2f0 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
1a300 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
1a310 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
1a320 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1a330 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
1a340 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
1a350 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
1a360 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
1a370 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
1a380 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
1a390 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
1a3a0 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
1a3b0 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
1a3c0 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
1a3d0 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
1a3e0 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
1a3f0 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
1a400 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
1a410 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
1a420 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
1a430 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
1a440 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
1a450 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
1a460 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
1a470 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
1a480 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
1a490 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1a4a0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
1a4b0 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
1a4c0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
1a4d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1a4e0 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
1a4f0 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
1a500 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
1a510 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
1a520 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
1a530 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
1a540 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
1a550 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
1a560 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
1a570 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
1a580 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
1a590 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
1a5a0 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
1a5b0 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
1a5c0 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
1a5d0 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
1a5e0 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
1a5f0 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
1a600 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1a610 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
1a620 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
1a630 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
1a640 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
1a650 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
1a660 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
1a670 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
1a680 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
1a690 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
1a6a0 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
1a6b0 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
1a6c0 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
1a6d0 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
1a6e0 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
1a6f0 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
1a700 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
1a710 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
1a720 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
1a730 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
1a740 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
1a750 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
1a760 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
1a770 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
1a780 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
1a790 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
1a7a0 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
1a7b0 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
1a7c0 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
1a7d0 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
1a7e0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
1a7f0 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
1a800 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
1a810 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
1a820 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
1a830 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
1a840 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
1a850 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
1a860 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
1a870 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
1a880 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
1a890 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20  int nSrc;       
1a8a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
1a8b0 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
1a8c0 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
1a8d0 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e  lause */.  u32 n
1a8e0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
1a8f0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
1a900 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
1a910 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
1a920 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
1a930 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
1a940 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
1a950 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
1a960 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
1a970 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
1a980 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
1a990 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1a9a0 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
1a9b0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
1a9c0 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1a9d0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
1a9e0 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
1a9f0 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
1aa00 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
1aa10 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
1aa20 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
1aa30 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
1aa40 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
1aa50 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
1aa60 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
1aa70 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
1aa80 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
1aa90 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
1aaa0 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
1aab0 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
1aac0 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
1aad0 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
1aae0 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
1aaf0 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
1ab00 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
1ab10 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
1ab20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1ab30 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
1ab40 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
1ab50 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
1ab60 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  ult;    /* Regis
1ab70 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73  ters holding res
1ab80 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75  ults of a co-rou
1ab90 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  tine */.    stru
1aba0 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f  ct {.      u8 jo
1abb0 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
1abc0 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
1abd0 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20  ween this table 
1abe0 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
1abf0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1ac00 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31  ed notIndexed :1
1ac10 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
1ac20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49  there is a NOT I
1ac30 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f  NDEXED clause */
1ac40 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1ac50 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20  isIndexedBy :1; 
1ac60 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1ac70 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44  re is an INDEXED
1ac80 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1ac90 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54      unsigned isT
1aca0 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f  abFunc :1;     /
1acb0 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d  * True if table-
1acc0 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1acd0 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20  syntax */.      
1ace0 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
1acf0 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
1ad00 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
1ad10 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
1ad20 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1ad30 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
1ad40 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
1ad50 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
1ad60 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1ad70 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
1ad80 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
1ad90 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
1ada0 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
1adb0 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65      } fg;.#ifnde
1adc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
1add0 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65  PLAIN.    u8 iSe
1ade0 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49  lectId;     /* I
1adf0 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68  f pSelect!=0, th
1ae00 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d  e id of the sub-
1ae10 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f  select in EQP */
1ae20 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20  .#endif.    int 
1ae30 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a  iCursor;      /*
1ae40 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
1ae50 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   number used to 
1ae60 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c  access this tabl
1ae70 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  e */.    Expr *p
1ae80 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  On;        /* Th
1ae90 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
1aea0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c   join */.    IdL
1aeb0 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f  ist *pUsing;   /
1aec0 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75  * The USING clau
1aed0 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
1aee0 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55      Bitmask colU
1aef0 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28  sed;  /* Bit N (
1af00 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c  1<<N) set if col
1af10 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73  umn N of pTab is
1af20 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69   used */.    uni
1af30 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20  on {.      char 
1af40 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20  *zIndexedBy;    
1af50 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
1af60 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
1af70 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
1af80 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73  */.      ExprLis
1af90 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a  t *pFuncArg;  /*
1afa0 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61   Arguments to ta
1afb0 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74  ble-valued-funct
1afc0 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b  ion */.    } u1;
1afd0 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49  .    Index *pIBI
1afe0 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20  ndex;  /* Index 
1aff0 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
1b000 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49  ponding to u1.zI
1b010 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20  ndexedBy */.  } 
1b020 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
1b030 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
1b040 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69  or each identifi
1b050 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  er on the list *
1b060 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d  /.};../*.** Perm
1b070 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20  itted values of 
1b080 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f  the SrcList.a.jo
1b090 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a  intype field.*/.
1b0a0 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52  #define JT_INNER
1b0b0 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
1b0c0 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e  * Any kind of in
1b0d0 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69  ner or cross joi
1b0e0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1b0f0 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32  CROSS     0x0002
1b100 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20      /* Explicit 
1b110 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53  use of the CROSS
1b120 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1b130 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20  ine JT_NATURAL  
1b140 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72   0x0004    /* Tr
1b150 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61  ue for a "natura
1b160 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  l" join */.#defi
1b170 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20  ne JT_LEFT      
1b180 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66  0x0008    /* Lef
1b190 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
1b1a0 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54  #define JT_RIGHT
1b1b0 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
1b1c0 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f  * Right outer jo
1b1d0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1b1e0 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32  _OUTER     0x002
1b1f0 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54  0    /* The "OUT
1b200 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ER" keyword is p
1b210 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  resent */.#defin
1b220 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30  e JT_ERROR     0
1b230 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e  x0040    /* unkn
1b240 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74  own or unsupport
1b250 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a  ed join type */.
1b260 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70  ../*.** Flags ap
1b270 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68  propriate for th
1b280 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72  e wctrlFlags par
1b290 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ameter of sqlite
1b2a0 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a  3WhereBegin().**
1b2b0 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e   and the WhereIn
1b2c0 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65  fo.wctrlFlags me
1b2d0 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  mber..**.** Valu
1b2e0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
1b2f0 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
1b300 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48  rt()):.**     WH
1b310 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d  ERE_USE_LIMIT  =
1b320 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a  = SF_FixedLimit.
1b330 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b340 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
1b350 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
1b360 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
1b370 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
1b380 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
1b390 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
1b3a0 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
1b3b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b3c0 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
1b3d0 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
1b3e0 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1b3f0 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
1b400 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b410 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
1b420 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
1b430 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
1b440 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
1b450 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b460 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20  NEPASS_MULTIROW 
1b470 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53  0x0008 /* ONEPAS
1b480 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c  S is ok with mul
1b490 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
1b4a0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
1b4b0 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
1b4c0 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  010 /* Ok to ret
1b4d0 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
1b4e0 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
1b4f0 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42  ine WHERE_OR_SUB
1b500 43 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32  CLAUSE     0x002
1b510 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  0 /* Processing 
1b520 61 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70  a sub-WHERE as p
1b530 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20  art of.         
1b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
1b560 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74  the OR optimizat
1b570 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ion  */.#define 
1b580 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
1b590 20 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a         0x0040 /*
1b5a0 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
1b5b0 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
1b5c0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b5d0 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
1b5e0 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65   0x0080 /* pOrde
1b5f0 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
1b600 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
1b610 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b620 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
1b630 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20    0x0100 /* All 
1b640 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
1b650 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
1b660 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
1b670 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
1b680 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0200 /* Support 
1b690 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
1b6a0 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
1b6b0 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42  e WHERE_SEEK_TAB
1b6c0 4c 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20  LE       0x0400 
1b6d0 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20  /* Do not defer 
1b6e0 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61  seeks on main ta
1b6f0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ble */.#define W
1b700 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d  HERE_ORDERBY_LIM
1b710 49 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20  IT    0x0800 /* 
1b720 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e  ORDERBY+LIMIT on
1b730 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20   the inner loop 
1b740 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b750 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45  _SEEK_UNIQ_TABLE
1b760 20 20 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e    0x1000 /* Do n
1b770 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 69  ot defer seeks i
1b780 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20  f unique */.    
1b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7a0 20 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30      /*     0x200
1b7b0 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1b7c0 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ly used */.#defi
1b7d0 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  ne WHERE_USE_LIM
1b7e0 49 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30  IT        0x4000
1b7f0 20 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49   /* Use the LIMI
1b800 54 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61  T in cost estima
1b810 74 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  tes */.         
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b830 2a 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20  *     0x8000    
1b840 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1b850 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  ed */../* Allowe
1b860 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
1b870 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72  from sqlite3Wher
1b880 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f  eIsDistinct().*/
1b890 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1b8a0 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20  ISTINCT_NOOP    
1b8b0 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54    0  /* DISTINCT
1b8c0 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65   keyword not use
1b8d0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
1b8e0 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51  RE_DISTINCT_UNIQ
1b8f0 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64  UE    1  /* No d
1b900 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65  uplicates */.#de
1b910 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1b920 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20  NCT_ORDERED   2 
1b930 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74   /* All duplicat
1b940 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20  es are adjacent 
1b950 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b960 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45  _DISTINCT_UNORDE
1b970 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63  RED 3  /* Duplic
1b980 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72  ates are scatter
1b990 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e  ed */../*.** A N
1b9a0 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e  ameContext defin
1b9b0 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20  es a context in 
1b9c0 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65  which to resolve
1b9d0 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d   table and colum
1b9e0 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65  n.** names.  The
1b9f0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74   context consist
1ba00 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74  s of a list of t
1ba10 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c  ables (the pSrcL
1ba20 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a  ist) field and.*
1ba30 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  * a list of name
1ba40 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45  d expression (pE
1ba50 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65  List).  The name
1ba60 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  d expression lis
1ba70 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c  t may.** be NULL
1ba80 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72  .  The pSrc corr
1ba90 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46  esponds to the F
1baa0 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
1bab0 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20  SELECT or.** to 
1bac0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
1bad0 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49  operated on by I
1bae0 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f  NSERT, UPDATE, o
1baf0 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a  r DELETE.  The.*
1bb00 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70  * pEList corresp
1bb10 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75  onds to the resu
1bb20 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45  lt set of a SELE
1bb30 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66  CT and is NULL f
1bb40 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74  or.** other stat
1bb50 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61  ements..**.** Na
1bb60 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62  meContexts can b
1bb70 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20  e nested.  When 
1bb80 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c  resolving names,
1bb90 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a   the inner-most.
1bba0 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
1bbb0 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
1bbc0 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
1bbd0 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
1bbe0 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
1bbf0 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
1bc00 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
1bc10 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
1bc20 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
1bc30 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
1bc40 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
1bc50 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
1bc60 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
1bc70 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
1bc80 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
1bc90 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
1bca0 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
1bcb0 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
1bcc0 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
1bcd0 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
1bce0 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
1bcf0 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
1bd00 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
1bd10 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
1bd20 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
1bd30 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
1bd40 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
1bd50 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
1bd60 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
1bd70 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
1bd80 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
1bd90 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
1bda0 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
1bdb0 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
1bdc0 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
1bdd0 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
1bde0 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
1bdf0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
1be00 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1be10 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1be20 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
1be30 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
1be40 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
1be50 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
1be60 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75  lve names */.  u
1be70 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c  nion {.    ExprL
1be80 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
1be90 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74  /* Optional list
1bea0 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63   of result-set c
1beb0 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20 20 41 67  olumns */.    Ag
1bec0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
1bed0 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
1bee0 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
1bef0 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
1bf00 20 2a 2f 0a 20 20 20 20 55 70 73 65 72 74 20 2a   */.    Upsert *
1bf10 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20  pUpsert;     /* 
1bf20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1bf30 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  se information f
1bf40 72 6f 6d 20 61 6e 20 75 70 73 65 72 74 20 2a 2f  rom an upsert */
1bf50 0a 20 20 7d 20 75 4e 43 3b 0a 20 20 4e 61 6d 65  .  } uNC;.  Name
1bf60 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20  Context *pNext; 
1bf70 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e   /* Next outer n
1bf80 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55  ame context.  NU
1bf90 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74  LL for outermost
1bfa0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
1bfb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1bfc0 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65  mber of names re
1bfd0 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63  solved by this c
1bfe0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
1bff0 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
1c000 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
1c010 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  rors encountered
1c020 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67   while resolving
1c030 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20   names */.  u16 
1c040 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ncFlags;        
1c050 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* Zero or more
1c060 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69   NC_* flags defi
1c070 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ned below */.};.
1c080 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
1c090 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61  alues for the Na
1c0a0 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61  meContext, ncFla
1c0b0 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
1c0c0 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1c0d0 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76  s (all checked v
1c0e0 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
1c0f0 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20      NC_HasAgg   
1c100 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a   == SF_HasAgg.**
1c110 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67      NC_MinMaxAgg
1c120 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
1c130 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   == SQLITE_FUNC_
1c140 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65  MINMAX.**.*/.#de
1c150 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67  fine NC_AllowAgg
1c160 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67    0x0001  /* Agg
1c170 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1c180 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
1c190 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
1c1a0 50 61 72 74 49 64 78 20 20 20 30 78 30 30 30 32  PartIdx   0x0002
1c1b0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1c1c0 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c  olving a partial
1c1d0 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a   index WHERE */.
1c1e0 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65  #define NC_IsChe
1c1f0 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20  ck   0x0004  /* 
1c200 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1c210 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45  g names in a CHE
1c220 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  CK constraint */
1c230 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67  .#define NC_InAg
1c240 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a  gFunc 0x0008  /*
1c250 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69   True if analyzi
1c260 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  ng arguments to 
1c270 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23  an agg func */.#
1c280 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67  define NC_HasAgg
1c290 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 4f      0x0010  /* O
1c2a0 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
1c2b0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
1c2c0 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1c2d0 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30  C_IdxExpr   0x00
1c2e0 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  20  /* True if r
1c2f0 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73  esolving columns
1c300 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45 58   of CREATE INDEX
1c310 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56   */.#define NC_V
1c320 61 72 53 65 6c 65 63 74 20 30 78 30 30 34 30 20  arSelect 0x0040 
1c330 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65 64   /* A correlated
1c340 20 73 75 62 71 75 65 72 79 20 68 61 73 20 62 65   subquery has be
1c350 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  en seen */.#defi
1c360 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20 20 20 20  ne NC_UEList    
1c370 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20  0x0080  /* True 
1c380 69 66 20 75 4e 43 2e 70 45 4c 69 73 74 20 69 73  if uNC.pEList is
1c390 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1c3a0 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20 20 30 78   NC_UAggInfo  0x
1c3b0 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0100  /* True if
1c3c0 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f 20 69 73   uNC.pAggInfo is
1c3d0 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1c3e0 20 4e 43 5f 55 55 70 73 65 72 74 20 20 20 30 78   NC_UUpsert   0x
1c3f0 30 32 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0200  /* True if
1c400 20 75 4e 43 2e 70 55 70 73 65 72 74 20 69 73 20   uNC.pUpsert is 
1c410 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1c420 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31  NC_MinMaxAgg 0x1
1c430 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20  000  /* min/max 
1c440 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e  aggregates seen.
1c450 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65    See note above
1c460 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43   */.#define NC_C
1c470 6f 6d 70 6c 65 78 20 20 20 30 78 32 30 30 30 20  omplex   0x2000 
1c480 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 66 75   /* True if a fu
1c490 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62 71 75 65  nction or subque
1c4a0 72 79 20 73 65 65 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  ry seen */../*.*
1c4b0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1c4c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   the following o
1c4d0 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
1c4e0 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46  a single ON CONF
1c4f0 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65 20 69  LICT.** clause i
1c500 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a 2a 0a  n an upsert..**.
1c510 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 54 61  ** The pUpsertTa
1c520 72 67 65 74 20 66 69 65 6c 64 20 69 73 20 6f 6e  rget field is on
1c530 6c 79 20 73 65 74 20 69 66 20 74 68 65 20 4f 4e  ly set if the ON
1c540 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1c550 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e   includes.** con
1c560 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61  flict-target cla
1c570 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20 43 4f  use.  (In "ON CO
1c580 4e 46 4c 49 43 54 28 61 2c 62 29 22 20 74 68 65  NFLICT(a,b)" the
1c590 20 22 28 61 2c 62 29 22 20 69 73 20 74 68 65 0a   "(a,b)" is the.
1c5a0 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67  ** conflict-targ
1c5b0 65 74 20 63 6c 61 75 73 65 2e 29 20 20 54 68 65  et clause.)  The
1c5c0 20 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68   pUpsertTargetWh
1c5d0 65 72 65 20 69 73 20 74 68 65 20 6f 70 74 69 6f  ere is the optio
1c5e0 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61  nal.** WHERE cla
1c5f0 75 73 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e  use used to iden
1c600 74 69 66 79 20 70 61 72 74 69 61 6c 20 75 6e 69  tify partial uni
1c610 71 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a  que indexes..**.
1c620 2a 2a 20 70 55 70 73 65 72 74 53 65 74 20 69 73  ** pUpsertSet is
1c630 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c   the list of col
1c640 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73 20 6f  umn=expr terms o
1c650 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
1c660 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68 65 20  tement. .** The 
1c670 70 55 70 73 65 72 74 53 65 74 20 66 69 65 6c 64  pUpsertSet field
1c680 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61 20 4f   is NULL for a O
1c690 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20 4e 4f  N CONFLICT DO NO
1c6a0 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a 20 70  THING.  The.** p
1c6b0 55 70 73 65 72 74 57 68 65 72 65 20 69 73 20 74  UpsertWhere is t
1c6c0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1c6d0 66 6f 72 20 74 68 65 20 55 50 44 41 54 45 20 61  for the UPDATE a
1c6e0 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66 20 74 68  nd is NULL if th
1c6f0 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73  e.** WHERE claus
1c700 65 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f  e is omitted..*/
1c710 0a 73 74 72 75 63 74 20 55 70 73 65 72 74 20 7b  .struct Upsert {
1c720 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70  .  ExprList *pUp
1c730 73 65 72 74 54 61 72 67 65 74 3b 20 20 2f 2a 20  sertTarget;  /* 
1c740 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63 72 69 70  Optional descrip
1c750 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69 63 74  tion of conflict
1c760 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  ing index */.  E
1c770 78 70 72 20 2a 70 55 70 73 65 72 74 54 61 72 67  xpr *pUpsertTarg
1c780 65 74 57 68 65 72 65 3b 20 2f 2a 20 57 48 45 52  etWhere; /* WHER
1c790 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
1c7a0 74 69 61 6c 20 69 6e 64 65 78 20 74 61 72 67 65  tial index targe
1c7b0 74 73 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  ts */.  Index *p
1c7c0 55 70 73 65 72 74 49 64 78 3b 20 20 20 20 20 20  UpsertIdx;      
1c7d0 20 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20    /* Constraint 
1c7e0 74 68 61 74 20 70 55 70 73 65 72 74 54 61 72 67  that pUpsertTarg
1c7f0 65 74 20 69 64 65 6e 74 69 66 69 65 73 20 2a 2f  et identifies */
1c800 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55 70  .  ExprList *pUp
1c810 73 65 72 74 53 65 74 3b 20 20 20 20 20 2f 2a 20  sertSet;     /* 
1c820 54 68 65 20 53 45 54 20 63 6c 61 75 73 65 20 66  The SET clause f
1c830 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49  rom an ON CONFLI
1c840 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 45  CT UPDATE */.  E
1c850 78 70 72 20 2a 70 55 70 73 65 72 74 57 68 65 72  xpr *pUpsertWher
1c860 65 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52  e;       /* WHER
1c870 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65  E clause for the
1c880 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44   ON CONFLICT UPD
1c890 41 54 45 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  ATE */.  /* The 
1c8a0 66 69 65 6c 64 73 20 61 62 6f 76 65 20 63 6f 6d  fields above com
1c8b0 70 72 69 73 65 20 74 68 65 20 70 61 72 73 65 20  prise the parse 
1c8c0 74 72 65 65 20 66 6f 72 20 74 68 65 20 75 70 73  tree for the ups
1c8d0 65 72 74 20 63 6c 61 75 73 65 2e 0a 20 20 2a 2a  ert clause..  **
1c8e0 20 54 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   The fields belo
1c8f0 77 20 61 72 65 20 75 73 65 64 20 74 6f 20 74 72  w are used to tr
1c900 61 6e 73 66 65 72 20 69 6e 66 6f 72 6d 61 74 69  ansfer informati
1c910 6f 6e 20 66 72 6f 6d 20 74 68 65 20 49 4e 53 45  on from the INSE
1c920 52 54 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 69  RT.  ** processi
1c930 6e 67 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68 65  ng down into the
1c940 20 55 50 44 41 54 45 20 70 72 6f 63 65 73 73 69   UPDATE processi
1c950 6e 67 20 77 68 69 6c 65 20 67 65 6e 65 72 61 74  ng while generat
1c960 69 6e 67 20 63 6f 64 65 2e 0a 20 20 2a 2a 20 55  ing code..  ** U
1c970 70 73 65 72 74 20 6f 77 6e 73 20 74 68 65 20 6d  psert owns the m
1c980 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64 20  emory allocated 
1c990 61 62 6f 76 65 2c 20 62 75 74 20 6e 6f 74 20 74  above, but not t
1c9a0 68 65 20 6d 65 6d 6f 72 79 20 62 65 6c 6f 77 2e  he memory below.
1c9b0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1c9c0 55 70 73 65 72 74 53 72 63 3b 20 20 20 20 20 20  UpsertSrc;      
1c9d0 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62 65 20 75  /* Table to be u
1c9e0 70 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  pdated */.  int 
1c9f0 72 65 67 44 61 74 61 3b 20 20 20 20 20 20 20 20  regData;        
1ca00 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
1ca10 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1ca20 61 72 72 61 79 20 6f 66 20 56 41 4c 55 45 53 20  array of VALUES 
1ca30 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74 61 43 75  */.  int iDataCu
1ca40 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1ca50 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 64  * Index of the d
1ca60 61 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ata cursor */.  
1ca70 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20 20  int iIdxCur;    
1ca80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1ca90 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ex of the first 
1caa0 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a  index cursor */.
1cab0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
1cac0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1cad0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1cae0 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e   contains all in
1caf0 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65  formation.** nee
1cb00 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ded to generate 
1cb10 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c  code for a singl
1cb20 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1cb30 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74  nt..**.** nLimit
1cb40 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66   is set to -1 if
1cb50 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d   there is no LIM
1cb60 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66  IT clause.  nOff
1cb70 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e  set is set to 0.
1cb80 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20  .** If there is 
1cb90 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
1cba0 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20  the parser sets 
1cbb0 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61  nLimit to the va
1cbc0 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  lue of the.** li
1cbd0 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
1cbe0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
1cbf0 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30  the offset (or 0
1cc00 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74   if there is not
1cc10 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75  .** offset).  Bu
1cc20 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d  t later on, nLim
1cc30 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62  it and nOffset b
1cc40 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79  ecome the memory
1cc50 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e   locations.** in
1cc60 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72   the VDBE that r
1cc70 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20  ecord the limit 
1cc80 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  and offset count
1cc90 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f  ers..**.** addrO
1cca0 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65  penEphm[] entrie
1ccb0 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64  s contain the ad
1ccc0 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e  dress of OP_Open
1ccd0 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1cce0 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72  s..** These addr
1ccf0 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74  esses must be st
1cd00 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20  ored so that we 
1cd10 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20  can go back and 
1cd20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50  fill in.** the P
1cd30 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32  4_KEYINFO and P2
1cd40 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65   parameters late
1cd50 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20  r.  Neither the 
1cd60 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74  KeyInfo nor.** t
1cd70 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1cd80 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62  umns in P2 can b
1cd90 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68  e computed at th
1cda0 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61  e same time.** a
1cdb0 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68  s the OP_OpenEph
1cdc0 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  m instruction is
1cdd0 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e   coded because n
1cde0 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66  ot.** enough inf
1cdf0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
1ce00 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72  he compound quer
1ce10 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68  y is known at th
1ce20 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65  at point..** The
1ce30 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
1ce40 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64  rOpenTran[0] and
1ce50 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f   [1] contains co
1ce60 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1ce70 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73  s.** for the res
1ce80 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65  ult set.  The Ke
1ce90 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
1cea0 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69  enEphm[2] contai
1ceb0 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ns collating.** 
1cec0 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68  sequences for th
1ced0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1cee0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  e..*/.struct Sel
1cef0 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74  ect {.  ExprList
1cf00 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f   *pEList;      /
1cf10 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20  * The fields of 
1cf20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
1cf30 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1cf40 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1cf50 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c  : TK_UNION TK_AL
1cf60 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54  L TK_INTERSECT T
1cf70 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f  K_EXCEPT */.  Lo
1cf80 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b  gEst nSelectRow;
1cf90 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
1cfa0 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  d number of resu
1cfb0 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32  lt rows */.  u32
1cfc0 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
1cfd0 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
1cfe0 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
1cff0 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
1d000 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
1d010 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
1d020 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
1d030 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69  T counters */.#i
1d040 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1d050 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65  ABLED.  char zSe
1d060 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f  lName[12];     /
1d070 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  * Symbolic name 
1d080 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75  of this SELECT u
1d090 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67  se for debugging
1d0a0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1d0b0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
1d0c0 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
1d0d0 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
1d0e0 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
1d0f0 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ct */.  SrcList 
1d100 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
1d110 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
1d120 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
1d130 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
1d140 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1d150 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1d160 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
1d170 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
1d180 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1d190 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
1d1a0 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
1d1b0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1d1c0 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1d1d0 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
1d1e0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
1d1f0 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
1d200 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
1d210 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
1d220 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
1d230 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
1d240 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1d250 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
1d260 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
1d270 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
1d280 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
1d290 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
1d2a0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1d2b0 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1d2c0 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
1d2d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49             /* WI
1d2e0 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68  TH clause attach
1d2f0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1d300 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d  t. Or NULL. */.}
1d310 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1d320 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65   values for Sele
1d330 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68  ct.selFlags.  Th
1d340 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74  e "SF" prefix st
1d350 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c  ands for.** "Sel
1d360 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a  ect Flag"..**.**
1d370 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1d380 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20  ts (all checked 
1d390 76 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a  via assert()).**
1d3a0 20 20 20 20 20 53 46 5f 48 61 73 41 67 67 20 20       SF_HasAgg  
1d3b0 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a     == NC_HasAgg.
1d3c0 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78  **     SF_MinMax
1d3d0 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61  Agg  == NC_MinMa
1d3e0 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49  xAgg     == SQLI
1d3f0 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a  TE_FUNC_MINMAX.*
1d400 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69  *     SF_FixedLi
1d410 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45  mit == WHERE_USE
1d420 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e  _LIMIT.*/.#defin
1d430 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20  e SF_Distinct   
1d440 20 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20      0x00001  /* 
1d450 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65  Output should be
1d460 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65   DISTINCT */.#de
1d470 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20  fine SF_All     
1d480 20 20 20 20 20 20 20 30 78 30 30 30 30 32 20 20         0x00002  
1d490 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20  /* Includes the 
1d4a0 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  ALL keyword */.#
1d4b0 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76  define SF_Resolv
1d4c0 65 64 20 20 20 20 20 20 20 30 78 30 30 30 30 34  ed       0x00004
1d4d0 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73    /* Identifiers
1d4e0 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
1d4f0 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ved */.#define S
1d500 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20  F_Aggregate     
1d510 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e   0x00008  /* Con
1d520 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69  tains agg functi
1d530 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42  ons or a GROUP B
1d540 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  Y */.#define SF_
1d550 48 61 73 41 67 67 20 20 20 20 20 20 20 20 20 30  HasAgg         0
1d560 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61  x00010  /* Conta
1d570 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
1d580 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
1d590 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65  ne SF_UsesEpheme
1d5a0 72 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a  ral  0x00020  /*
1d5b0 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70   Uses the OpenEp
1d5c0 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a  hemeral opcode *
1d5d0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70  /.#define SF_Exp
1d5e0 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30 30  anded       0x00
1d5f0 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53  040  /* sqlite3S
1d600 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61  electExpand() ca
1d610 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a  lled on this */.
1d620 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79  #define SF_HasTy
1d630 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38  peInfo    0x0008
1d640 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75  0  /* FROM subqu
1d650 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65  eries have Table
1d660 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65   metadata */.#de
1d670 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64  fine SF_Compound
1d680 20 20 20 20 20 20 20 30 78 30 30 31 30 30 20 20         0x00100  
1d690 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d  /* Part of a com
1d6a0 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23  pound query */.#
1d6b0 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73  define SF_Values
1d6c0 20 20 20 20 20 20 20 20 20 30 78 30 30 32 30 30           0x00200
1d6d0 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64    /* Synthesized
1d6e0 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61   from VALUES cla
1d6f0 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
1d700 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20  F_MultiValue    
1d710 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e   0x00400  /* Sin
1d720 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20  gle VALUES term 
1d730 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f  with multiple ro
1d740 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ws */.#define SF
1d750 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20  _NestedFrom     
1d760 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74  0x00800  /* Part
1d770 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69   of a parenthesi
1d780 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  zed FROM clause 
1d790 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69  */.#define SF_Mi
1d7a0 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78 30  nMaxAgg      0x0
1d7b0 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61  1000  /* Aggrega
1d7c0 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69  te containing mi
1d7d0 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a  n() or max() */.
1d7e0 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72  #define SF_Recur
1d7f0 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30 30  sive      0x0200
1d800 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73  0  /* The recurs
1d810 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65  ive part of a re
1d820 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23  cursive CTE */.#
1d830 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c  define SF_FixedL
1d840 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30 30  imit     0x04000
1d850 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20    /* nSelectRow 
1d860 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e  set by a constan
1d870 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69  t LIMIT */.#defi
1d880 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65  ne SF_MaybeConve
1d890 72 74 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a  rt   0x08000  /*
1d8a0 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d   Need convertCom
1d8b0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1d8c0 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1d8d0 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20  ne SF_Converted 
1d8e0 20 20 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a       0x10000  /*
1d8f0 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f   By convertCompo
1d900 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1d910 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1d920 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65   SF_IncludeHidde
1d930 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49  n  0x20000  /* I
1d940 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f  nclude hidden co
1d950 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20  lumns in output 
1d960 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
1d970 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34  mplexResult  0x4
1d980 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20  0000  /* Result 
1d990 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62  set contains sub
1d9a0 71 75 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f  query or functio
1d9b0 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  n */.../*.** The
1d9c0 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
1d9d0 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
1d9e0 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
1d9f0 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
1da00 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
1da10 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1da20 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
1da30 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
1da40 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
1da50 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
1da60 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
1da70 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1da80 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
1da90 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a  mporary index.**
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dab0 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20       identified 
1dac0 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  by pDest->iSDPar
1dad0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1dae0 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d  _Except      Rem
1daf0 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  ove results from
1db00 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69   the temporary i
1db10 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50  ndex pDest->iSDP
1db20 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
1db30 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53  RT_Exists      S
1db40 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f  tore a 1 in memo
1db50 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69  ry cell pDest->i
1db60 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65  SDParm if the re
1db70 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  sult.**         
1db80 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1db90 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a  is not empty..**
1dba0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63  .**     SRT_Disc
1dbb0 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68  ard     Throw th
1dbc0 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20  e results away. 
1dbd0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
1dbe0 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20   SELECT.**      
1dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1dc00 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1dc10 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20   triggers whose 
1dc20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a  only purpose is.
1dc30 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1dc40 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d         the side-
1dc50 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74  effects of funct
1dc60 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  ions..**.** All 
1dc70 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
1dc80 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20   free to ignore 
1dc90 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63  their ORDER BY c
1dca0 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61  lause. Those tha
1dcb0 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74  t.** follow must
1dcc0 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52   honor the ORDER
1dcd0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
1dce0 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74  *     SRT_Output
1dcf0 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61        Generate a
1dd00 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28   row of output (
1dd10 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73  using the OP_Res
1dd20 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20  ultRow.**       
1dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
1dd40 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72  code) for each r
1dd50 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ow in the result
1dd60 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20   set..**.**     
1dd70 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1dd80 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68  Only valid if th
1dd90 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69  e result is a si
1dda0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20  ngle column..** 
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddc0 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69      Store the fi
1ddd0 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
1dde0 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72  e first result r
1ddf0 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1de00 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67            in reg
1de10 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1de20 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f  Parm then abando
1de30 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20  n the rest.**   
1de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de50 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20    of the query. 
1de60 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   This destinatio
1de70 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54  n implies "LIMIT
1de80 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53   1"..**.**     S
1de90 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54  RT_Set         T
1dea0 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62  he result must b
1deb0 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  e a single colum
1dec0 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a  n.  Store each.*
1ded0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1dee0 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73        row of res
1def0 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69  ult as the key i
1df00 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  n table pDest->i
1df10 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1df30 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74  pply the affinit
1df40 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74  y pDest->affSdst
1df50 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a   before storing.
1df60 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1df70 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20         results. 
1df80 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   Used to impleme
1df90 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e  nt "IN (SELECT .
1dfa0 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ..)"..**.**     
1dfb0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1dfc0 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72  Create an tempor
1dfd0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1dfe0 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f  >iSDParm and sto
1dff0 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1e000 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65            the re
1e010 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20  sult there. The 
1e020 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f  cursor is left o
1e030 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20  pen after.**    
1e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e050 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69   returning.  Thi
1e060 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61  s is like SRT_Ta
1e070 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a  ble except that.
1e080 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e090 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74         this dest
1e0a0 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f  ination uses OP_
1e0b0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f  OpenEphemeral to
1e0c0 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20   create.**      
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e0e0 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a  he table first..
1e0f0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f  **.**     SRT_Co
1e100 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61  routine   Genera
1e110 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  te a co-routine 
1e120 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e  that returns a n
1e130 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20  ew row of.**    
1e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e150 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69   results each ti
1e160 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64  me it is invoked
1e170 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69  .  The entry poi
1e180 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  nt.**           
1e190 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1e1a0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73   co-routine is s
1e1b0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1e1c0 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1e1d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e1e0 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20          and the 
1e1f0 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74  result row is st
1e200 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e  ored in pDest->n
1e210 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a  Dest registers.*
1e220 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e230 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77        starting w
1e240 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74  ith pDest->iSdst
1e250 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e260 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72  Table       Stor
1e270 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d  e results in tem
1e280 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1e290 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1e2a0 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20      SRT_Fifo    
1e2b0 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65      This is like
1e2c0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78   SRT_EphemTab ex
1e2d0 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61  cept that the ta
1e2e0 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ble.**          
1e2f0 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73             is as
1e300 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79  sumed to already
1e310 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46   be open.  SRT_F
1e320 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20  ifo has.**      
1e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e340 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72  he additional pr
1e350 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20  operty of being 
1e360 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a  able to ignore.*
1e370 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e380 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20        the ORDER 
1e390 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1e3a0 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66       SRT_DistFif
1e3b0 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  o    Store resul
1e3c0 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ts in a temporar
1e3d0 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1e3e0 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1e400 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70  ut also use temp
1e410 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1e420 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a  t->iSDParm+1 as.
1e430 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e440 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20         a record 
1e450 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73  of all prior res
1e460 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20  ults and ignore 
1e470 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a  any duplicate.**
1e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e490 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65       rows.  Name
1e4a0 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e   means:  "Distin
1e4b0 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20  ct Fifo"..**.** 
1e4c0 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20      SRT_Queue   
1e4d0 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1e4e0 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1e4f0 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1e500 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20  rm (really.**   
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e520 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70    an index).  Ap
1e530 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20  pend a sequence 
1e540 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61  number so that a
1e550 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20  ll entries.**   
1e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e570 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a    are distinct..
1e580 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1e590 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20  stQueue   Store 
1e5a0 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
1e5b0 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
1e5c0 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66  >iSDParm only if
1e5d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e5e0 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65          the same
1e5f0 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65   record has neve
1e600 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65  r been stored be
1e610 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20  fore.  The.**   
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74    index at pDest
1e640 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64  ->iSDParm+1 hold
1e650 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65   all prior store
1e660 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  s..*/.#define SR
1e670 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
1e680 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1e690 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
1e6a0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1e6b0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1e6c0 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
1e6d0 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
1e6e0 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
1e6f0 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
1e700 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
1e710 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
1e720 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
1e730 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1e740 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
1e750 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
1e760 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
1e770 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1e780 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20  Fifo         5  
1e790 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1e7a0 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1e7b0 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1e7c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1e7d0 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f  istFifo     6  /
1e7e0 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c  * Like SRT_Fifo,
1e7f0 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1e800 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  lts only */.#def
1e810 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20  ine SRT_Queue   
1e820 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65       7  /* Store
1e830 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75   result in an qu
1e840 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  eue */.#define S
1e850 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20  RT_DistQueue    
1e860 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51  8  /* Like SRT_Q
1e870 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65  ueue, but unique
1e880 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1e890 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42  ../* The ORDER B
1e8a0 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f  Y clause is igno
1e8b0 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74  red for all of t
1e8c0 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66  he above */.#def
1e8d0 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64  ine IgnorableOrd
1e8e0 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65  erby(X) ((X->eDe
1e8f0 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65  st)<=SRT_DistQue
1e900 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  ue)..#define SRT
1e910 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20  _Output       9 
1e920 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
1e930 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1e940 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
1e950 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20           10  /* 
1e960 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1e970 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
1e980 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
1e990 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20           11  /* 
1e9a0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1e9b0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
1e9c0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1e9d0 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20  _EphemTab    12 
1e9e0 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
1e9f0 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
1ea00 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
1ea10 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1ea20 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20  _Coroutine   13 
1ea30 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
1ea40 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
1ea50 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
1ea60 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31  RT_Table       1
1ea70 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  4  /* Store resu
1ea80 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1ea90 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1eaa0 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  id */../*.** An 
1eab0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1eac0 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1ead0 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f  s where to put o
1eae0 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
1eaf0 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61  .** a SELECT sta
1eb00 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
1eb10 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
1eb20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
1eb30 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20        /* How to 
1eb40 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72  dispose of the r
1eb50 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53  esults.  On of S
1eb60 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20  RT_* above. */. 
1eb70 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20   int iSDParm;   
1eb80 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d        /* A param
1eb90 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65  eter used by the
1eba0 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20   eDest disposal 
1ebb0 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20  method */.  int 
1ebc0 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20  iSdst;          
1ebd0 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
1ebe0 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20  r where results 
1ebf0 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20  are written */. 
1ec00 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20   int nSdst;     
1ec10 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ec20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
1ec30 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ocated */.  char
1ec40 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20   *zAffSdst;     
1ec50 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
1ec60 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
1ec70 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c  T_Set */.  ExprL
1ec80 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1ec90 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66  /* Key columns f
1eca0 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64  or SRT_Queue and
1ecb0 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a   SRT_DistQueue *
1ecc0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69  /.};../*.** Duri
1ecd0 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  ng code generati
1ece0 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  on of statements
1ecf0 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73   that do inserts
1ed00 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d   into AUTOINCREM
1ed10 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  ENT.** tables, t
1ed20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
1ed30 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
1ed40 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
1ed50 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
1ed60 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
1ed70 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
1ed80 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
1ed90 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
1eda0 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
1edb0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1edc0 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
1edd0 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
1ede0 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
1edf0 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
1ee00 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
1ee10 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74  re done within t
1ee20 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
1ee30 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
1ee40 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
1ee50 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
1ee60 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
1ee70 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
1ee80 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
1ee90 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
1eea0 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
1eeb0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1eec0 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
1eed0 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
1eee0 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
1eef0 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
1ef00 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
1ef10 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
1ef20 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
1ef30 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
1ef40 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
1ef50 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1ef60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1ef70 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
1ef80 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
1ef90 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
1efa0 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
1efb0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
1efc0 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
1efd0 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
1efe0 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
1eff0 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f  * Size of the co
1f000 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69  lumn cache.*/.#i
1f010 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43  fndef SQLITE_N_C
1f020 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65  OLCACHE.# define
1f030 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
1f040 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  HE 10.#endif../*
1f050 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65  .** At least one
1f060 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1f070 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1f080 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20  ture is created 
1f090 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67  for each.** trig
1f0a0 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
1f0b0 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
1f0c0 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
1f0d0 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
1f0e0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
1f0f0 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
1f100 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
1f110 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
1f120 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
1f130 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
1f140 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
1f150 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
1f160 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
1f170 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
1f180 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
1f190 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
1f1a0 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
1f1b0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1f1c0 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
1f1d0 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
1f1e0 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
1f1f0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
1f200 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
1f210 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
1f220 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
1f230 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
1f240 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
1f250 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
1f260 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
1f270 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
1f280 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
1f290 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
1f2a0 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
1f2b0 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
1f2c0 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
1f2d0 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
1f2e0 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
1f2f0 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
1f300 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
1f310 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
1f320 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
1f330 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
1f340 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61  of INSERT.** sta
1f350 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61  tements). Simila
1f360 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72  rly, the Trigger
1f370 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20  Prg.aColmask[1] 
1f380 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1f390 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20  to.** a mask of 
1f3a0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73  new.* columns us
1f3b0 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
1f3c0 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  m..*/.struct Tri
1f3d0 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67  ggerPrg {.  Trig
1f3e0 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
1f3f0 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74      /* Trigger t
1f400 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20  his program was 
1f410 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20  coded from */.  
1f420 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78  TriggerPrg *pNex
1f430 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
1f440 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70  entry in Parse.p
1f450 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1f460 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
1f470 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
1f480 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e  Program implemen
1f490 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72  ting pTrigger/or
1f4a0 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72  conf */.  int or
1f4b0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
1f4c0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1f4d0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1f4e0 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
1f4f0 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
1f500 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
1f510 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
1f520 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cessed */.};../*
1f530 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20  .** The yDbMask 
1f540 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
1f550 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20   bitmask of all 
1f560 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1f570 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  es..*/.#if SQLIT
1f580 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
1f590 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  0.  typedef unsi
1f5a0 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73  gned char yDbMas
1f5b0 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  k[(SQLITE_MAX_AT
1f5c0 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20  TACHED+9)/8];.# 
1f5d0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1f5e0 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b  t(M,I)    (((M)[
1f5f0 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26  (I)/8]&(1<<((I)&
1f600 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  7)))!=0).# defin
1f610 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1f620 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c       memset((M),
1f630 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64  0,sizeof(M)).# d
1f640 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1f650 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29  M,I)     (M)[(I)
1f660 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29  /8]|=(1<<((I)&7)
1f670 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1f680 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71  kAllZero(M)   sq
1f690 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1f6a0 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44  ro(M).# define D
1f6b0 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1f6c0 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b    (sqlite3DbMask
1f6d0 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23  AllZero(M)==0).#
1f6e0 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
1f6f0 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d  nsigned int yDbM
1f700 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  ask;.# define Db
1f710 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
1f720 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73   (((M)&(((yDbMas
1f730 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a  k)1)<<(I)))!=0).
1f740 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
1f750 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d  ero(M)      (M)=
1f760 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1f770 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1f780 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29  )|=(((yDbMask)1)
1f790 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20  <<(I)).# define 
1f7a0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1f7b0 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69     (M)==0.# defi
1f7c0 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1f7d0 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e  (M)   (M)!=0.#en
1f7e0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51  dif../*.** An SQ
1f7f0 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74  L parser context
1f800 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69  .  A copy of thi
1f810 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  s structure is p
1f820 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
1f830 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1f840 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68  down into all th
1f850 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20  e parser action 
1f860 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
1f870 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f   to.** carry aro
1f880 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
1f890 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  that is global t
1f8a0 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72  o the entire par
1f8b0 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  se..**.** The st
1f8c0 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64  ructure is divid
1f8d0 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74  ed into two part
1f8e0 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72  s.  When the par
1f8f0 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20  ser and code.** 
1f900 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68  generate call th
1f910 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69  emselves recursi
1f920 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20  vely, the first 
1f930 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
1f940 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  cture.** is cons
1f950 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63  tant but the sec
1f960 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65  ond part is rese
1f970 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  t at the beginni
1f980 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a  ng and end of.**
1f990 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1f9a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c  .**.** The nTabl
1f9b0 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65  eLock and aTable
1f9c0 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61  Lock variables a
1f9d0 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  re only used if 
1f9e0 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
1f9f0 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65  .** feature is e
1fa00 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74  nabled (if sqlit
1fa10 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72  e3Tsd()->useShar
1fa20 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e  edData is true).
1fa30 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65   They are.** use
1fa40 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73  d to store the s
1fa50 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b  et of table-lock
1fa60 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  s required by th
1fa70 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
1fa80 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46  g.** compiled. F
1fa90 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54  unction sqlite3T
1faa0 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73  ableLock() is us
1fab0 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65  ed to add entrie
1fac0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74  s to the.** list
1fad0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73  ..*/.struct Pars
1fae0 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
1faf0 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  b;         /* Th
1fb00 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1fb10 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63  structure */.  c
1fb20 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20  har *zErrMsg;   
1fb30 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20      /* An error 
1fb40 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62  message */.  Vdb
1fb50 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
1fb60 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66    /* An engine f
1fb70 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74  or executing dat
1fb80 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a  abase bytecode *
1fb90 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
1fba0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75           /* Retu
1fbb0 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65  rn code from exe
1fbc0 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63  cution */.  u8 c
1fbd0 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20  olNamesSet;     
1fbe0 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f   /* TRUE after O
1fbf0 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73  P_ColumnName has
1fc00 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20   been issued to 
1fc10 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68  pVdbe */.  u8 ch
1fc20 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20  eckSchema;      
1fc30 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61  /* Causes schema
1fc40 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66   cookie check af
1fc50 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a  ter an error */.
1fc60 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20    u8 nested;    
1fc70 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1fc80 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
1fc90 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63   to the parser/c
1fca0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
1fcb0 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20  .  u8 nTempReg; 
1fcc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1fcd0 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72  r of temporary r
1fce0 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d  egisters in aTem
1fcf0 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  pReg[] */.  u8 i
1fd00 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20  sMultiWrite;    
1fd10 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1fd20 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79  ement may modify
1fd30 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65  /insert multiple
1fd40 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61   rows */.  u8 ma
1fd50 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20  yAbort;         
1fd60 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1fd70 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61  ment may throw a
1fd80 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
1fd90 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d  n */.  u8 hasCom
1fda0 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e  pound;      /* N
1fdb0 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f  eed to invoke co
1fdc0 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
1fdd0 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
1fde0 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46  */.  u8 okConstF
1fdf0 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20  actor;    /* OK 
1fe00 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f  to factor out co
1fe10 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20  nstants */.  u8 
1fe20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65  disableLookaside
1fe30 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74  ; /* Number of t
1fe40 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68  imes lookaside h
1fe50 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64  as been disabled
1fe60 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63   */.  u8 nColCac
1fe70 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  he;        /* Nu
1fe80 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
1fe90 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a  in aColCache[] *
1fea0 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
1feb0 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
1fec0 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
1fed0 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1fee0 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
1fef0 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
1ff00 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
1ff10 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1ff20 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1ff30 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1ff40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ff50 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
1ff60 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
1ff70 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ff80 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
1ff90 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
1ffa0 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
1ffb0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
1ffc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
1ffd0 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
1ffe0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1fff0 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  pAlloc;        /
20000 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74  * Number of slot
20010 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
20020 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
20030 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20  int szOpAlloc;  
20040 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
20050 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c   memory space al
20060 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
20070 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
20080 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20  iSelfTab;       
20090 20 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63 69   /* Table associ
200a0 61 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e 64  ated with an ind
200b0 65 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e  ex on expr, or n
200c0 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 20 20  egative.        
200d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
200e0 2a 20 6f 66 20 74 68 65 20 62 61 73 65 20 72 65  * of the base re
200f0 67 69 73 74 65 72 20 64 75 72 69 6e 67 20 63 68  gister during ch
20100 65 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65  eck-constraint e
20110 76 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  val */.  int iCa
20120 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  cheLevel;     /*
20130 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20   ColCache valid 
20140 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  when aColCache[]
20150 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c  .iLevel<=iCacheL
20160 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43  evel */.  int iC
20170 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f  acheCnt;       /
20180 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74  * Counter used t
20190 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43  o generate aColC
201a0 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65  ache[].lru value
201b0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65  s */.  int nLabe
201c0 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  l;          /* N
201d0 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20  umber of labels 
201e0 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  used */.  int *a
201f0 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f  Label;         /
20200 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  * Space to hold 
20210 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20  the labels */.  
20220 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74  ExprList *pConst
20230 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74  Expr;/* Constant
20240 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
20250 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69    Token constrai
20260 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f  ntName;/* Name o
20270 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  f the constraint
20280 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
20290 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62   parsed */.  yDb
202a0 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20  Mask writeMask; 
202b0 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69    /* Start a wri
202c0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f  te transaction o
202d0 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65  n these database
202e0 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63  s */.  yDbMask c
202f0 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42  ookieMask;  /* B
20300 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61  itmask of schema
20310 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61   verified databa
20320 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ses */.  int reg
20330 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
20340 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
20350 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
20360 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
20370 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
20380 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
20390 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
203a0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
203b0 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
203c0 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20    int nMaxArg;  
203d0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72         /* Max ar
203e0 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65  gs passed to use
203f0 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75  r function by su
20400 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66  b-program */.#if
20410 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
20420 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65  BLED.  int nSele
20430 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ct;         /* N
20440 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20  umber of SELECT 
20450 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20  statements seen 
20460 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
20470 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
20480 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
20490 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
204a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
204b0 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
204c0 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
204d0 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
204e0 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
204f0 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
20500 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
20510 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
20520 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
20530 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
20540 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
20550 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  NT counters */. 
20560 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65   Parse *pTopleve
20570 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73  l;    /* Parse s
20580 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69  tructure for mai
20590 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55  n program (or NU
205a0 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  LL) */.  Table *
205b0 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a  pTriggerTab;  /*
205c0 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20   Table triggers 
205d0 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
205e0 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  for */.  int add
205f0 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a  rCrTab;       /*
20600 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43   Address of OP_C
20610 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64  reateBtree opcod
20620 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c  e on CREATE TABL
20630 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72  E */.  u32 nQuer
20640 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45  yLoop;      /* E
20650 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  st number of ite
20660 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
20670 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20  ry (10*log2(N)) 
20680 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
20690 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
206a0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
206b0 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
206c0 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
206d0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
206e0 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
206f0 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
20700 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
20710 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
20720 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
20730 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
20740 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
20750 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
20760 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
20770 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
20780 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
20790 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
207a0 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
207b0 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
207c0 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
207d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
207e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
207f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
20810 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d  * Fields above m
20820 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
20830 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65  ed to zero.  The
20840 20 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c   fields that fol
20850 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74  low,.  ** down t
20860 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  o the beginning 
20870 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65  of the recursive
20880 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74   section, do not
20890 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a   need to be.  **
208a0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20   initialized as 
208b0 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74  they will be set
208c0 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73   before being us
208d0 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  ed.  The boundar
208e0 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d  y is.  ** determ
208f0 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66  ined by offsetof
20900 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65  (Parse,aColCache
20910 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  )..  ***********
20920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
20960 0a 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43  ..  struct yColC
20970 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69  ache {.    int i
20980 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
20990 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
209a0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69   number */.    i
209b0 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 iColumn;     
209c0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
209d0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  lumn number */. 
209e0 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20     u8 tempReg;  
209f0 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67           /* iReg
20a00 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73   is a temp regis
20a10 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74  ter that needs t
20a20 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20  o be freed */.  
20a30 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
20a40 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69          /* Nesti
20a50 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  ng level */.    
20a60 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20  int iReg;       
20a70 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74        /* Reg wit
20a80 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  h value of this 
20a90 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20  column. 0 means 
20aa0 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  none. */.    int
20ab0 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20   lru;           
20ac0 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65     /* Least rece
20ad0 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20  ntly used entry 
20ae0 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  has the smallest
20af0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43   value */.  } aC
20b00 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e  olCache[SQLITE_N
20b10 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20  _COLCACHE];  /* 
20b20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  One for each col
20b30 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20  umn cache entry 
20b40 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65  */.  int aTempRe
20b50 67 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  g[8];        /* 
20b60 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72  Holding area for
20b70 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
20b80 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  ters */.  Token 
20b90 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20  sNameToken;     
20ba0 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20    /* Token with 
20bb0 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65  unqualified sche
20bc0 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a  ma object name *
20bd0 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /..  /**********
20be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20  **************. 
20c20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e   ** Above is con
20c30 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65  stant between re
20c40 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77  cursions.  Below
20c50 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65   is reset before
20c60 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20   and after.  ** 
20c70 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20  each recursion. 
20c80 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65   The boundary be
20c90 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20  tween these two 
20ca0 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72  regions is deter
20cb0 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67  mined.  ** using
20cc0 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
20cd0 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74  sLastToken) so t
20ce0 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69  he sLastToken fi
20cf0 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a  eld must be the.
20d00 20 20 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64    ** first field
20d10 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76   in the recursiv
20d20 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  e region..  ****
20d30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d70 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73  ****/..  Token s
20d80 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
20d90 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b   /* The last tok
20da0 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  en parsed */.  y
20db0 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20  nVar nVar;      
20dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20dd0 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
20de0 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
20df0 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
20e00 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b  u8 iPkSortOrder;
20e10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43            /* ASC
20e20 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54   or DESC for INT
20e30 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
20e40 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e   */.  u8 explain
20e50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20e60 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
20e70 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
20e80 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
20e90 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
20ea0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
20eb0 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61  TABLE.  u8 decla
20ec0 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
20ed0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73    /* True if ins
20ee0 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  ide sqlite3_decl
20ef0 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20  are_vtab() */.  
20f00 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
20f10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20f20 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
20f30 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
20f40 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48  .#endif.  int nH
20f50 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
20f60 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
20f70 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
20f80 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
20f90 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
20fa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
20fb0 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  IN.  int iSelect
20fc0 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
20fd0 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20  * ID of current 
20fe0 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41  select for EXPLA
20ff0 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69  IN output */.  i
21000 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
21010 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
21020 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63   available selec
21030 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e  t ID for EXPLAIN
21040 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
21050 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73  f.  VList *pVLis
21060 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
21070 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e   Mapping between
21080 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20   variable names 
21090 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20  and numbers */. 
210a0 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
210b0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
210c0 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
210d0 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
210e0 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
210f0 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
21100 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
21110 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
21120 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
21130 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
21140 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
21150 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
21160 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
21170 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
21180 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
21190 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
211a0 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
211b0 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
211c0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
211d0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
211e0 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
211f0 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
21200 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
21210 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66  callbacks */.#if
21220 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21230 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
21240 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
21250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
21260 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
21270 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
21280 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
21290 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f  tabLock;       /
212a0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72  * Pointer to vir
212b0 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64  tual tables need
212c0 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23  ing locking */.#
212d0 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70  endif.  Table *p
212e0 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
212f0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62    /* List of Tab
21300 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65  le objects to de
21310 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20  lete after code 
21320 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  gen */.  Trigger
21330 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67  Prg *pTriggerPrg
21340 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73  ;  /* Linked lis
21350 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
21360 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ers */.  With *p
21370 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
21380 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49     /* Current WI
21390 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
213a0 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  LL */.  With *pW
213b0 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20  ithToFree;      
213c0 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57    /* Free this W
213d0 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68  ITH object at th
213e0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72  e end of the par
213f0 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  se */.};../*.** 
21400 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65  Sizes and pointe
21410 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61  rs of various pa
21420 72 74 73 20 6f 66 20 74 68 65 20 50 61 72 73 65  rts of the Parse
21430 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66   object..*/.#def
21440 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a  ine PARSE_HDR_SZ
21450 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
21460 61 43 6f 6c 43 61 63 68 65 29 20 2f 2a 20 52 65  aColCache) /* Re
21470 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f  cursive part w/o
21480 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65   aColCache*/.#de
21490 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52  fine PARSE_RECUR
214a0 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50  SE_SZ offsetof(P
214b0 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29  arse,sLastToken)
214c0 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65      /* Recursive
214d0 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
214e0 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28   PARSE_TAIL_SZ (
214f0 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41  sizeof(Parse)-PA
21500 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
21510 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65  /* Non-recursive
21520 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
21530 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28   PARSE_TAIL(X) (
21540 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52  ((char*)(X))+PAR
21550 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20  SE_RECURSE_SZ)  
21560 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61  /* Pointer to ta
21570 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  il */../*.** Ret
21580 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
21590 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
215a0 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
215b0 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
215c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
215d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
215e0 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
215f0 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
21600 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
21610 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
21620 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62  rse->declareVtab
21630 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
21640 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
21650 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
21660 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
21670 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
21680 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
21690 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
216a0 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
216b0 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
216c0 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
216d0 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
216e0 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
216f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
21700 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
21710 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
21720 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
21730 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
21740 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
21750 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
21760 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
21770 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
21780 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
21790 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
217a0 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  des..**.** Value
217b0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
217c0 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
217d0 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c  t()):.**    OPFL
217e0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
217f0 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  == SQLITE_FUNC_L
21800 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c  ENGTH.**    OPFL
21810 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
21820 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  == SQLITE_FUNC_T
21830 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c  YPEOF.**    OPFL
21840 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
21850 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  == BTREE_BULKLOA
21860 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  D.**    OPFLAG_S
21870 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42  EEKEQ       == B
21880 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20  TREE_SEEK_EQ.** 
21890 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c     OPFLAG_FORDEL
218a0 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
218b0 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20  FORDELETE.**    
218c0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
218d0 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56  ION == BTREE_SAV
218e0 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20  EPOSITION.**    
218f0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
21900 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58      == BTREE_AUX
21910 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e  DELETE.*/.#defin
21920 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
21930 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
21940 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74  * OP_Insert: Set
21950 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
21960 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20  Change */.      
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21990 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50  * Also used in P
219a0 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50  2 (not P5) of OP
219b0 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69  _Delete */.#defi
219c0 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20  ne OPFLAG_EPHEM 
219d0 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
219e0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70  /* OP_Column: Ep
219f0 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69  hemeral output i
21a00 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s ok */.#define 
21a10 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
21a20 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20       0x20    /* 
21a30 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
21a40 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
21a50 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
21a60 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
21a70 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
21a80 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
21a90 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
21aa0 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
21ab0 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
21ac0 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
21ad0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
21ae0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21af0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
21b00 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
21b10 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
21b20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
21b30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21b40 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20  AG_ISNOOP       
21b50 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44   0x40    /* OP_D
21b60 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75  elete does pre-u
21b70 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20  pdate-hook only 
21b80 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21b90 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
21ba0 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
21bb0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
21bc0 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
21bd0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
21be0 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
21bf0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
21c00 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
21c10 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
21c20 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
21c30 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
21c40 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
21c50 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
21c60 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
21c70 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
21c80 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
21c90 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f   OP_Open** curso
21ca0 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f  r uses EQ seek o
21cb0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
21cc0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
21cd0 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f      0x08    /* O
21ce0 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73  P_Open should us
21cf0 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  e BTREE_FORDELET
21d00 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
21d10 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
21d20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20    0x10    /* P2 
21d30 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
21d40 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
21d50 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
21d60 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
21d70 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
21d80 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
21d90 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
21da0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
21db0 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30  AVEPOSITION  0x0
21dc0 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  2    /* OP_Delet
21dd0 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63  e/Insert: save c
21de0 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65  ursor pos */.#de
21df0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44  fine OPFLAG_AUXD
21e00 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20  ELETE     0x04  
21e10 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20    /* OP_Delete: 
21e20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54  index in a DELET
21e30 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  E op */.#define 
21e40 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41  OPFLAG_NOCHNG_MA
21e50 47 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a 20  GIC  0x6d    /* 
21e60 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73  OP_MakeRecord: s
21e70 65 72 69 61 6c 74 79 70 65 20 31 30 20 69 73 20  erialtype 10 is 
21e80 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  ok */../*. * Eac
21e90 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
21ea0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
21eb0 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
21ec0 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
21ed0 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
21ee0 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f  rigger.. *. * Po
21ef0 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
21f00 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
21f10 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
21f20 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
21f30 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
21f40 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
21f50 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
21f60 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
21f70 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20  esents the. *   
21f80 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
21f90 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
21fa0 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
21fb0 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
21fc0 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
21fd0 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
21fe0 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
21ff0 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
22000 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
22010 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
22020 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
22030 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
22040 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
22050 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
22060 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
22070 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
22080 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
22090 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
220a0 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
220b0 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
220c0 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
220d0 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
220e0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
220f0 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
22100 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
22110 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
22120 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
22130 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
22140 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
22150 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
22160 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
22170 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
22180 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
22190 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
221a0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
221b0 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
221c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
221d0 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
221e0 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
221f0 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
22200 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
22210 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
22220 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
22230 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
22240 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
22250 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
22260 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
22270 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
22280 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
22290 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
222a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
222b0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
222c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
222d0 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
222e0 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
222f0 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
22300 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
22310 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
22320 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22340 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
22350 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
22360 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
22370 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
22380 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
22390 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
223a0 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
223b0 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
223c0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
223d0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
223e0 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
223f0 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
22400 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
22410 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
22420 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
22430 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
22440 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
22450 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
22460 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
22470 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
22480 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
22490 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
224a0 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
224b0 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
224c0 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
224d0 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
224e0 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ich..**.** If th
224f0 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
22500 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
22510 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
22520 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
22530 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
22540 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
22550 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
22560 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
22570 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
22580 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
22590 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
225a0 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
225b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
225c0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
225d0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
225e0 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
225f0 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
22600 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
22610 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
22620 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
22630 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
22640 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
22650 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
22660 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
22670 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
22680 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
22690 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
226a0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
226b0 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73  er of the. * ass
226c0 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
226d0 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
226e0 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
226f0 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
22700 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
22710 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
22720 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
22730 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70  m.. *. * The "op
22740 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
22750 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
22760 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
22770 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
22780 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
22790 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
227a0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
227b0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
227c0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
227d0 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  he. * value of "
227e0 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
227f0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
22800 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
22810 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
22820 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
22830 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
22840 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
22850 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
22860 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
22870 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
22880 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
22890 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
228a0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
228b0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
228c0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
228d0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
228e0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
228f0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
22900 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
22910 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
22920 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
22930 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
22940 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
22950 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
22960 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
22970 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
22980 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
22990 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
229a0 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
229b0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
229c0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
229d0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
229e0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
229f0 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
22a00 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
22a10 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
22a20 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
22a30 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
22a40 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
22a50 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
22a60 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
22a70 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
22a80 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
22a90 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
22aa0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
22ab0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
22ac0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
22ad0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
22ae0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
22af0 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
22b00 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ULL.. *. * (op =
22b10 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
22b20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
22b30 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
22b40 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
22b50 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  e.. * pWhere    
22b60 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
22b70 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
22b80 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
22b90 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
22ba0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
22bb0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
22bc0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
22bd0 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
22be0 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
22bf0 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
22c00 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
22c10 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
22c20 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
22c30 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
22c40 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
22c50 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
22c60 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
22c70 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20  .. *. */.struct 
22c80 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
22c90 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
22ca0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
22cb0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
22cc0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
22cd0 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
22ce0 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
22cf0 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
22d00 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
22d10 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
22d20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
22d30 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
22d40 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
22d50 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
22d60 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
22d70 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
22d80 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
22d90 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
22da0 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
22db0 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
22dc0 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
22dd0 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
22de0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
22df0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
22e00 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
22e10 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
22e20 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
22e30 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
22e40 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
22e50 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  e for UPDATE */.
22e60 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
22e70 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
22e80 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
22e90 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a 70  T */.  Upsert *p
22ea0 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 55  Upsert;     /* U
22eb0 70 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f 6e  psert clauses on
22ec0 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20   an INSERT */.  
22ed0 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
22ee0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
22ef0 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68 69   SQL text of thi
22f00 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54  s command */.  T
22f10 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
22f20 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
22f30 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
22f40 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
22f50 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
22f60 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
22f70 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
22f80 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
22f90 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
22fa0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
22fb0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
22fc0 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
22fd0 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
22fe0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
22ff0 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
23000 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
23010 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
23020 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
23030 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
23040 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
23050 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
23060 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
23070 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
23080 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
23090 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
230a0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
230b0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
230c0 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
230d0 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
230e0 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
230f0 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
23100 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
23110 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
23120 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
23130 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
23140 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
23150 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
23160 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
23170 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
23180 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
23190 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
231a0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
231b0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
231c0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
231d0 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
231e0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
231f0 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
23200 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
23210 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
23220 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
23230 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
23240 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
23250 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
23260 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
23270 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
23280 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
23290 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
232a0 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
232b0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
232c0 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
232d0 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
232e0 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
232f0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
23300 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
23310 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
23320 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
23330 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b  /.  u32  nAlloc;
23340 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75           /* Amou
23350 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f  nt of space allo
23360 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a  cated in zText *
23370 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63  /.  u32  mxAlloc
23380 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69  ;        /* Maxi
23390 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f  mum allowed allo
233a0 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e  cation.  0 for n
233b0 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a  o malloc usage *
233c0 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20  /.  u32  nChar; 
233d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
233e0 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
233f0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
23400 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20    accError;     
23410 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f    /* STRACCUM_NO
23420 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f  MEM or STRACCUM_
23430 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20  TOOBIG */.  u8  
23440 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20   printfFlags;   
23450 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54   /* SQLITE_PRINT
23460 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f  F flags below */
23470 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41  .};.#define STRA
23480 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23  CCUM_NOMEM   1.#
23490 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
234a0 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69 6e  TOOBIG  2.#defin
234b0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
234c0 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f  INTERNAL 0x01  /
234d0 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f  * Internal-use-o
234e0 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61  nly converters a
234f0 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
23500 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
23510 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f  SQLFUNC  0x02  /
23520 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61  * SQL function a
23530 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72  rguments to VXPr
23540 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20  intf */.#define 
23550 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41  SQLITE_PRINTF_MA
23560 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20  LLOCED 0x04  /* 
23570 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69 73  True if xText is
23580 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
23590 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d   */..#define isM
235a0 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58  alloced(X)  (((X
235b0 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26  )->printfFlags &
235c0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
235d0 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f  ALLOCED)!=0).../
235e0 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
235f0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
23600 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
23610 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
23620 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
23630 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
23640 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
23650 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
23660 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
23670 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
23680 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
23690 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
236a0 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
236b0 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
236c0 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
236d0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
236e0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
236f0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
23700 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
23710 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
23720 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
23730 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
23740 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
23750 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
23760 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
23770 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
23780 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
23790 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
237a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
237b0 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
237c0 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
237d0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
237e0 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
237f0 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
23800 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
23810 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
23820 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
23830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23840 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
23850 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
23860 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
23870 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
23880 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
23890 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
238a0 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
238b0 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238d0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
238e0 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
238f0 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
23900 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
23910 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23920 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
23930 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
23940 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
23950 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23960 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
23970 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
23980 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
23990 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c  .  int bSmallMal
239a0 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
239b0 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61       /* Avoid la
239c0 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  rge memory alloc
239d0 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a  ations if true *
239e0 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e  /.  int mxStrlen
239f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23a00 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
23a10 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
23a20 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72  /.  int neverCor
23a30 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  rupt;           
23a40 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
23a50 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c  e is always well
23a60 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74  -formed */.  int
23a70 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20   szLookaside;   
23a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23a90 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
23aa0 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20  ide buffer size 
23ab0 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73  */.  int nLookas
23ac0 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
23ad0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
23ae0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
23af0 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e  er count */.  in
23b00 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20  t nStmtSpill;   
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20  /* Stmt-journal 
23b30 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68  spill-to-disk th
23b40 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c  reshold */.  sql
23b50 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
23b60 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   m;            /
23b70 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f  * Low-level memo
23b80 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
23b90 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
23ba0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
23bb0 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f  ds mutex;      /
23bc0 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65  * Low-level mute
23bd0 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  x interface */. 
23be0 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f   sqlite3_pcache_
23bf0 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32  methods2 pcache2
23c00 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20  ;  /* Low-level 
23c10 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72  page-cache inter
23c20 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  face */.  void *
23c30 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  pHeap;          
23c40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
23c50 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63  eap storage spac
23c60 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70  e */.  int nHeap
23c70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23c80 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
23c90 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20   of pHeap[] */. 
23ca0 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65   int mnReq, mxRe
23cb0 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
23cc0 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61     /* Min and ma
23cd0 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20  x heap requests 
23ce0 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74  sizes */.  sqlit
23cf0 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b  e3_int64 szMmap;
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23d10 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72  mmap() space per
23d20 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20   open file */.  
23d30 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78  sqlite3_int64 mx
23d40 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
23d50 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c    /* Maximum val
23d60 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f  ue for szMmap */
23d70 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20  .  void *pPage; 
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d90 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63       /* Page cac
23da0 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  he memory */.  i
23db0 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20  nt szPage;      
23dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dd0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
23de0 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d   page in pPage[]
23df0 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b   */.  int nPage;
23e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e10 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
23e20 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50  r of pages in pP
23e30 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  age[] */.  int m
23e40 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20  xParserStack;   
23e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23e60 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
23e70 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63   the parser stac
23e80 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65  k */.  int share
23e90 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20  dCacheEnabled;  
23ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65           /* true
23eb0 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65   if shared-cache
23ec0 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f   mode enabled */
23ed0 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20  .  u32 szPma;   
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ef0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
23f00 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20  Sorter PMA size 
23f10 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76  */.  /* The abov
23f20 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69  e might be initi
23f30 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65  alized to non-ze
23f40 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ro.  The followi
23f50 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79  ng need to alway
23f60 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79  s.  ** initially
23f70 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65   be zero, howeve
23f80 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e  r. */.  int isIn
23f90 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
23fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
23fb0 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69  e after initiali
23fc0 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73  zation has finis
23fd0 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50  hed */.  int inP
23fe0 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
23ff0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24000 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c  ue while initial
24010 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  ization in progr
24020 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  ess */.  int isM
24030 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20  utexInit;       
24040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24050 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73  ue after mutexes
24060 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
24070 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c   */.  int isMall
24080 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  ocInit;         
24090 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
240a0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
240b0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
240c0 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69   int isPCacheIni
240d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
240e0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
240f0 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
24100 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
24110 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20  nRefInitMutex;  
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24130 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73   Number of users
24140 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a   of pInitMutex *
24150 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
24160 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
24170 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
24180 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
24190 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
241a0 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f   void (*xLog)(vo
241b0 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
241c0 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f  ar*); /* Functio
241d0 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f  n for logging */
241e0 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67  .  void *pLogArg
241f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24200 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
24210 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f   argument to xLo
24220 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  g() */.#ifdef SQ
24230 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c  LITE_ENABLE_SQLL
24240 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c  OG.  void(*xSqll
24250 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  og)(void*,sqlite
24260 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
24270 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53  int);.  void *pS
24280 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66  qllogArg;.#endif
24290 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56  .#ifdef SQLITE_V
242a0 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f  DBE_COVERAGE.  /
242b0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
242c0 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74  callback (if not
242d0 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65   NULL) is invoke
242e0 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20  d on every VDBE 
242f0 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72  branch.  ** oper
24300 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20  ation.  Set the 
24310 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53  callback using S
24320 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56  QLITE_TESTCTRL_V
24330 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20  DBE_COVERAGE..  
24340 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62  */.  void (*xVdb
24350 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69  eBranch)(void*,i
24360 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65  nt iSrcLine,u8 e
24370 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f  This,u8 eMx);  /
24380 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  * Callback */.  
24390 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63  void *pVdbeBranc
243a0 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
243b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
243d0 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e   argument */.#en
243e0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
243f0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20  TE_UNTESTABLE.  
24400 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62  int (*xTestCallb
24410 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20  ack)(int);      
24420 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20    /* Invoked by 
24430 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
24440 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  ) */.#endif.  in
24450 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
24460 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24470 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
24480 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
24490 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65  s */.  int iOnce
244a0 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20  ResetThreshold; 
244b0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e           /* When
244c0 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63   to reset OP_Onc
244d0 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  e counters */.  
244e0 75 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b  u32 szSorterRef;
244f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24500 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e    /* Min size in
24510 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f   bytes to use so
24520 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a  rter-refs */.};.
24530 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
24540 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
24550 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
24560 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
24570 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
24580 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
24590 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
245a0 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
245b0 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
245c0 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
245d0 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
245e0 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
245f0 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
24600 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
24610 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
24620 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
24630 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
24640 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
24650 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
24660 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
24670 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
24680 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
24690 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
246a0 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
246b0 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
246c0 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
246d0 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
246e0 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
246f0 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
24700 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
24710 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
24720 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
24730 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
24740 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
24750 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
24760 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
24770 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
24780 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
24790 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
247a0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
247b0 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
247c0 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
247d0 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
247e0 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50  uct Walker {.  P
247f0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
24800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24810 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
24820 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
24830 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
24840 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
24850 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
24860 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
24870 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
24880 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
24890 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
248a0 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
248b0 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
248c0 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
248d0 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
248e0 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
248f0 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
24900 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
24910 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
24920 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
24930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24940 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
24950 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64  ies */.  u8 eCod
24960 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24980 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72     /* A small pr
24990 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f  ocessing code */
249a0 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
249d0 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
249e0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
249f0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
24a20 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
24a30 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
24a60 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20   counter */.    
24a70 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20  int iCur;       
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
24aa0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
24ab0 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
24ac0 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24ae0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
24af0 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
24b00 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24b20 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
24b30 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
24b40 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69     struct CCurHi
24b50 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20  nt *pCCurHint;  
24b60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24b70 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73  Used by codeCurs
24b80 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20  orHint() */.    
24b90 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20  int *aiCol;     
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72            /* arr
24bc0 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64  ay of column ind
24bd0 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  exes */.    stru
24be0 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64  ct IdxCover *pId
24bf0 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20  xCover;         
24c00 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
24c10 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67  or index coverag
24c20 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
24c30 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49  IdxExprTrans *pI
24c40 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  dxTrans;        
24c50 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64     /* Convert id
24c60 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75  xed expr to colu
24c70 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  mn */.    ExprLi
24c80 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
24c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ca0 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20      /* GROUP BY 
24cb0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53 65  clause */.    Se
24cc0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ce0 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e          /* HAVIN
24cf0 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73  G to WHERE claus
24d00 65 20 63 74 78 20 2a 2f 0a 20 20 7d 20 75 3b 0a  e ctx */.  } u;.
24d10 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
24d20 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
24d30 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
24d40 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
24d50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
24d60 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
24d70 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
24d80 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
24d90 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
24da0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
24db0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
24dc0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
24dd0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
24de0 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
24df0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
24e00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
24e10 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  xprWalkNoop(Walk
24e20 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
24e30 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
24e40 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
24e50 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
24e60 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46  lite3SelectWalkF
24e70 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ail(Walker*, Sel
24e80 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  ect*);.#ifdef SQ
24e90 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20  LITE_DEBUG.void 
24ea0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
24eb0 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a  kAssert2(Walker*
24ec0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64  , Select*);.#end
24ed0 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
24ee0 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
24ef0 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
24f00 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
24f10 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
24f20 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
24f30 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
24f40 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
24f50 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
24f60 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
24f70 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
24f80 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
24f90 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
24fa0 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
24fb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
24fc0 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
24fd0 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
24fe0 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
24ff0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
25000 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
25010 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
25020 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  t of one or more
25030 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e   CTEs.** (common
25040 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
25050 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61  ns) created by a
25060 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
25070 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  use..*/.struct W
25080 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65  ith {.  int nCte
25090 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
250a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
250b0 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65  r of CTEs in the
250c0 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a   WITH clause */.
250d0 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20    With *pOuter; 
250e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250f0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20    /* Containing 
25100 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
25110 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74  NULL */.  struct
25120 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20   Cte {          
25130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
25140 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65   each CTE in the
25150 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e   WITH clause....
25160 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
25170 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
25180 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
25190 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
251a0 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f     ExprList *pCo
251b0 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ls;             
251c0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78     /* List of ex
251d0 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61  plicit column na
251e0 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  mes, or NULL */.
251f0 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
25200 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
25210 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e      /* The defin
25220 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54  ition of this CT
25230 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63  E */.    const c
25240 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20  har *zCteErr;   
25250 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
25260 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69  r message for ci
25270 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65  rcular reference
25280 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d  s */.  } a[1];.}
25290 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
252a0 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20  _DEBUG./*.** An 
252b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
252c0 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20  TreeView object 
252d0 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e  is used for prin
252e0 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
252f0 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75   of.** data stru
25300 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65  ctures on sqlite
25310 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75  3DebugPrintf() u
25320 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65  sing a tree-like
25330 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74   view..*/.struct
25340 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e   TreeView {.  in
25350 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
25360 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c        /* Which l
25370 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65  evel of the tree
25380 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20   we are on */.  
25390 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20  u8  bLine[100]; 
253a0 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20          /* Draw 
253b0 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75  vertical in colu
253c0 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d  mn i if bLine[i]
253d0 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23   is true */.};.#
253e0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
253f0 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
25400 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69  Assuming zIn poi
25410 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
25420 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38   byte of a UTF-8
25430 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61   character,.** a
25440 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f  dvance zIn to po
25450 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74  int to the first
25460 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78   byte of the nex
25470 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  t UTF-8 characte
25480 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
25490 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a  LITE_SKIP_UTF8(z
254a0 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20  In) {           
254b0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
254c0 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e   if( (*(zIn++))>
254d0 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20  =0xc0 ){        
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254f0 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c        \.    whil
25500 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29  e( (*zIn & 0xc0)
25510 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b  ==0x80 ){ zIn++;
25520 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c   }             \
25530 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  .  }            
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25560 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a          \.}../*.
25570 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f  ** The SQLITE_*_
25580 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20  BKPT macros are 
25590 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20  substitutes for 
255a0 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20  the error codes 
255b0 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65  with.** the same
255c0 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75   name but withou
255d0 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66  t the _BKPT suff
255e0 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f  ix.  These macro
255f0 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74  s invoke.** rout
25600 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74  ines that report
25610 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72   the line-number
25620 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72   on which the er
25630 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a  ror originated.*
25640 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  * using sqlite3_
25650 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74  log().  The rout
25660 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64  ines also provid
25670 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70  e a convenient p
25680 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61  lace.** to set a
25690 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70   debugger breakp
256a0 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oint..*/.int sql
256b0 69 74 65 33 52 65 70 6f 72 74 45 72 72 6f 72 28  ite3ReportError(
256c0 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20 6c 69  int iErr, int li
256d0 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61 72  neno, const char
256e0 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20 73 71   *zType);.int sq
256f0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
25700 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
25710 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
25720 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
25730 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
25740 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
25750 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
25760 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
25770 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
25780 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
25790 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
257a0 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
257b0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
257c0 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
257d0 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
257e0 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
257f0 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ).#ifdef SQLITE_
25800 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69  DEBUG.  int sqli
25810 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e  te3NomemError(in
25820 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
25830 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
25840 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
25850 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45  ite3CorruptPgnoE
25860 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a  rror(int,Pgno);.
25870 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
25880 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74  NOMEM_BKPT sqlit
25890 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c  e3NomemError(__L
258a0 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20  INE__).# define 
258b0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
258c0 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 49  EM_BKPT sqlite3I
258d0 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f  oerrnomemError(_
258e0 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e  _LINE__).# defin
258f0 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
25900 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33  _PGNO(P) sqlite3
25910 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72  CorruptPgnoError
25920 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a 23  (__LINE__,(P)).#
25930 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51  else.# define SQ
25940 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  LITE_NOMEM_BKPT 
25950 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64  SQLITE_NOMEM.# d
25960 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45  efine SQLITE_IOE
25970 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51  RR_NOMEM_BKPT SQ
25980 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
25990 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
259a0 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29  _CORRUPT_PGNO(P)
259b0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
259c0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
259d0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  endif../*.** FTS
259e0 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74 68 20  3 and FTS4 both 
259f0 72 65 71 75 69 72 65 20 76 69 72 74 75 61 6c 20  require virtual 
25a00 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f  table support.*/
25a10 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
25a20 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
25a30 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66 20 53  TABLE).# undef S
25a40 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
25a50 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  3.# undef SQLITE
25a60 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e  _ENABLE_FTS4.#en
25a70 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20  dif../*.** FTS4 
25a80 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74  is really an ext
25a90 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e  ension for FTS3.
25aa0 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20    It is enabled 
25ab0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c  using the.** SQL
25ac0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
25ad0 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61  macro.  But to a
25ae0 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  void confusion w
25af0 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74  e also call.** t
25b00 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
25b10 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73  _FTS4 macro to s
25b20 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73  erve as an alias
25b30 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42   for SQLITE_ENAB
25b40 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20  LE_FTS3..*/.#if 
25b50 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
25b60 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21  NABLE_FTS4) && !
25b70 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
25b80 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65  NABLE_FTS3).# de
25b90 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
25ba0 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66  LE_FTS3 1.#endif
25bb0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70  ../*.** The ctyp
25bc0 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65  e.h header is ne
25bd0 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43  eded for non-ASC
25be0 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20  II systems.  It 
25bf0 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65  is also.** neede
25c00 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46  d by FTS3 when F
25c10 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20  TS3 is included 
25c20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74  in the amalgamat
25c30 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ion..*/.#if !def
25c40 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49  ined(SQLITE_ASCI
25c50 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66  I) || \.    (def
25c60 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
25c70 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69  LE_FTS3) && defi
25c80 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47  ned(SQLITE_AMALG
25c90 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c  AMATION)).# incl
25ca0 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65  ude <ctype.h>.#e
25cb0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
25cc0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
25cd0 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64   mimic the stand
25ce0 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63  ard library func
25cf0 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c  tions toupper(),
25d00 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69  .** isspace(), i
25d10 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69  salnum(), isdigi
25d20 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74  t() and isxdigit
25d30 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  (), respectively
25d40 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20  . The.** sqlite 
25d50 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f  versions only wo
25d60 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  rk for ASCII cha
25d70 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c  racters, regardl
25d80 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a  ess of locale..*
25d90 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
25da0 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73  ASCII.# define s
25db0 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
25dc0 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33    ((x)&~(sqlite3
25dd0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
25de0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32  ed char)(x)]&0x2
25df0 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  0)).# define sql
25e00 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
25e10 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
25e20 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
25e30 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65  )(x)]&0x01).# de
25e40 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
25e50 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65  num(x)   (sqlite
25e60 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
25e70 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
25e80 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  06).# define sql
25e90 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
25ea0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
25eb0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
25ec0 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65  )(x)]&0x02).# de
25ed0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
25ee0 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65  git(x)   (sqlite
25ef0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
25f00 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
25f10 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  04).# define sql
25f20 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
25f30 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
25f40 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
25f50 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65  )(x)]&0x08).# de
25f60 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
25f70 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65  wer(x)   (sqlite
25f80 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75  3UpperToLower[(u
25f90 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25fa0 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  ]).# define sqli
25fb0 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20  te3Isquote(x)   
25fc0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
25fd0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
25fe0 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c 73 65  (x)]&0x80).#else
25ff0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26000 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f  3Toupper(x)   to
26010 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20  upper((unsigned 
26020 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
26030 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
26040 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28  e(x)   isspace((
26050 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
26060 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
26070 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
26080 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65  isalnum((unsigne
26090 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
260a0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
260b0 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61  pha(x)   isalpha
260c0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
260d0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
260e0 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
260f0 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67    isdigit((unsig
26100 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
26110 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
26120 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69  xdigit(x)  isxdi
26130 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
26140 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
26150 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
26160 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e  x)   tolower((un
26170 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
26180 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26190 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 28  3Isquote(x)   ((
261a0 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c  x)=='"'||(x)=='\
261b0 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78  ''||(x)=='['||(x
261c0 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a 23  )=='`').#endif.#
261d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
261e0 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
261f0 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74  _DIAGS.int sqlit
26200 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
26210 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
26220 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20  ternal function 
26230 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e  prototypes.*/.in
26240 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  t sqlite3StrICmp
26250 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
26260 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
26270 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
26280 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
26290 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  r *sqlite3Column
262a0 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61  Type(Column*,cha
262b0 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
262c0 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c  ite3StrNICmp sql
262d0 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69  ite3_strnicmp..i
262e0 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
262f0 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  Init(void);.void
26300 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e   sqlite3MallocEn
26310 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73  d(void);.void *s
26320 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34  qlite3Malloc(u64
26330 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
26340 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b  MallocZero(u64);
26350 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
26360 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74  MallocZero(sqlit
26370 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
26380 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
26390 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  Raw(sqlite3*, u6
263a0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
263b0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73  3DbMallocRawNN(s
263c0 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63  qlite3*, u64);.c
263d0 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
263e0 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  rDup(sqlite3*,co
263f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
26400 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44   *sqlite3DbStrND
26410 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
26420 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63  t char*, u64);.c
26430 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 70  har *sqlite3DbSp
26440 61 6e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  anDup(sqlite3*,c
26450 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
26460 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73   char*);.void *s
26470 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
26480 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  id*, u64);.void 
26490 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
264a0 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
264b0 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
264c0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
264d0 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
264e0 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
264f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
26500 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
26510 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
26520 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c 69 74  e3DbFreeNN(sqlit
26530 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74  e3*, void*);.int
26540 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69   sqlite3MallocSi
26550 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  ze(void*);.int s
26560 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69  qlite3DbMallocSi
26570 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ze(sqlite3*, voi
26580 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
26590 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74  e3PageMalloc(int
265a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
265b0 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  ageFree(void*);.
265c0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53  void sqlite3MemS
265d0 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b  etDefault(void);
265e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
265f0 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20  UNTESTABLE.void 
26600 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
26610 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
26620 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
26630 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66  )(void));.#endif
26640 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70  .int sqlite3Heap
26650 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29  NearlyFull(void)
26660 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74  ;../*.** On syst
26670 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73  ems with ample s
26680 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74  tack space and t
26690 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f  hat support allo
266a0 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73  ca(), make.** us
266b0 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f  e of alloca() to
266c0 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f   obtain space fo
266d0 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69  r large automati
266e0 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64  c objects.  By d
266f0 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69  efault,.** obtai
26700 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c  n space from mal
26710 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  loc()..**.** The
26720 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e   alloca() routin
26730 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20  e never returns 
26740 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c  NULL.  This will
26750 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68   cause code path
26760 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77  s.** that deal w
26770 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ith sqlite3Stack
26780 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73  Alloc() failures
26790 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62   to be unreachab
267a0 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
267b0 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a  LITE_USE_ALLOCA.
267c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
267d0 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
267e0 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23  N)   alloca(N).#
267f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
26800 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
26810 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63  N)  memset(alloc
26820 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65  a(N), 0, N).# de
26830 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
26840 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65  kFree(D,P).#else
26850 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26860 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
26870 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  ,N)   sqlite3DbM
26880 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20  allocRaw(D,N).# 
26890 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
268a0 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
268b0 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  )  sqlite3DbMall
268c0 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65  ocZero(D,N).# de
268d0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
268e0 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
268f0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44   sqlite3DbFree(D
26900 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ,P).#endif../* D
26910 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68  o not allow both
26920 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d   MEMSYS5 and MEM
26930 53 59 53 33 20 74 6f 20 62 65 20 64 65 66 69 6e  SYS3 to be defin
26940 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20 49 66  ed together.  If
26950 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69   they.** are, di
26960 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f  sable MEMSYS3.*/
26970 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
26980 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f  NABLE_MEMSYS5.co
26990 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
269a0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
269b0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f  MemGetMemsys5(vo
269c0 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49  id);.#undef SQLI
269d0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
269e0 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  3.#endif.#ifdef 
269f0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
26a00 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS3.const sqli
26a10 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
26a20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
26a30 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e  msys3(void);.#en
26a40 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
26a50 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
26a60 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
26a70 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
26a80 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
26a90 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
26aa0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
26ab0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
26ac0 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
26ad0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
26ae0 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
26af0 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
26b00 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
26b10 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
26b20 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
26b30 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  id);.#endif.#if 
26b40 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26b50 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21  MUTEX_OMIT) && !
26b60 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
26b70 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69  UTEX_NOOP).  voi
26b80 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42  d sqlite3MemoryB
26b90 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65  arrier(void);.#e
26ba0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
26bb0 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
26bc0 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69  r().#endif..sqli
26bd0 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
26be0 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74  3StatusValue(int
26bf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26c00 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74  tatusUp(int, int
26c10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26c20 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69  tatusDown(int, i
26c30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26c40 33 53 74 61 74 75 73 48 69 67 68 77 61 74 65 72  3StatusHighwater
26c50 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  (int, int);.int 
26c60 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65  sqlite3Lookaside
26c70 55 73 65 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Used(sqlite3*,in
26c80 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20  t*);../* Access 
26c90 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20  to mutexes used 
26ca0 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75  by sqlite3_statu
26cb0 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d  s() */.sqlite3_m
26cc0 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61  utex *sqlite3Pca
26cd0 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b  che1Mutex(void);
26ce0 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
26cf0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74  sqlite3MallocMut
26d00 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64  ex(void);..#if d
26d10 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
26d20 41 42 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41 44  ABLE_MULTITHREAD
26d30 45 44 5f 43 48 45 43 4b 53 29 20 26 26 20 21 64  ED_CHECKS) && !d
26d40 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
26d50 54 45 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73  TEX_OMIT).void s
26d60 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f  qlite3MutexWarnO
26d70 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69  nContention(sqli
26d80 74 65 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c  te3_mutex*);.#el
26d90 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
26da0 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f  te3MutexWarnOnCo
26db0 6e 74 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64  ntention(x).#end
26dc0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
26dd0 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
26de0 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c  _POINT.  int sql
26df0 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
26e00 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
26e10 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58  e sqlite3IsNaN(X
26e20 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )  0.#endif../*.
26e30 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
26e40 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
26e50 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
26e60 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
26e70 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f  t SQL.** functio
26e80 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  ns arguments tha
26e90 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65  t are the parame
26ea0 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e  ters to the prin
26eb0 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  tf() function..*
26ec0 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41  /.struct PrintfA
26ed0 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74  rguments {.  int
26ee0 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
26ef0 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e        /* Total n
26f00 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
26f10 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65  ts */.  int nUse
26f20 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
26f30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
26f40 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20  guments used so 
26f50 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  far */.  sqlite3
26f60 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20  _value **apArg; 
26f70 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e    /* The argumen
26f80 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  t values */.};..
26f90 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72  void sqlite3VXPr
26fa0 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
26fb0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
26fc0 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  list);.void sqli
26fd0 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
26fe0 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  cum*, const char
26ff0 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
27000 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71  qlite3MPrintf(sq
27010 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
27020 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
27030 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28  sqlite3VMPrintf(
27040 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
27050 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
27060 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
27070 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
27080 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45  ined(SQLITE_HAVE
27090 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69  _OS_TRACE).  voi
270a0 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
270b0 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
270c0 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
270d0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
270e0 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
270f0 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
27100 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
27110 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
27120 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
27130 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
27140 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28  te3TreeViewExpr(
27150 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
27160 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76   Expr*, u8);.  v
27170 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
27180 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28  iewBareExprList(
27190 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
271a0 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
271b0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
271c0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
271d0 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
271e0 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
271f0 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  st*, u8, const c
27200 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
27210 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c  lite3TreeViewSel
27220 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ect(TreeView*, c
27230 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38  onst Select*, u8
27240 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
27250 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72  3TreeViewWith(Tr
27260 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57  eeView*, const W
27270 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  ith*, u8);.#endi
27280 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
27290 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
272a0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
272b0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
272c0 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
272d0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
272e0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
272f0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
27300 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
27310 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b  te3TokenInit(Tok
27320 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20  en*,char*);.int 
27330 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f  sqlite3KeywordCo
27340 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  de(const unsigne
27350 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  d char*, int);.i
27360 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  nt sqlite3RunPar
27370 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ser(Parse*, cons
27380 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a  t char*, char **
27390 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
273a0 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73  inishCoding(Pars
273b0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
273c0 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65  GetTempReg(Parse
273d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
273e0 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50  ReleaseTempReg(P
273f0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
27400 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61  sqlite3GetTempRa
27410 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  nge(Parse*,int);
27420 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
27430 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61  easeTempRange(Pa
27440 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  rse*,int,int);.v
27450 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72  oid sqlite3Clear
27460 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72  TempRegCache(Par
27470 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  se*);.#ifdef SQL
27480 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
27490 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61  lite3NoTempsInRa
274a0 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
274b0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72  nt);.#endif.Expr
274c0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
274d0 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
274e0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
274f0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
27500 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
27510 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
27520 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27530 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
27540 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
27550 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
27560 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
27570 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
27580 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
27590 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64 53  sqlite3PExprAddS
275a0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78  elect(Parse*, Ex
275b0 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45  pr*, Select*);.E
275c0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
275d0 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  And(sqlite3*,Exp
275e0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  r*, Expr*);.Expr
275f0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e   *sqlite3ExprFun
27600 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70  ction(Parse*,Exp
27610 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rList*, Token*);
27620 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27630 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
27640 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
27650 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
27660 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c  e3ExprDelete(sql
27670 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  ite3*, Expr*);.E
27680 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
27690 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50  ExprListAppend(P
276a0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
276b0 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
276c0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
276d0 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61  tAppendVector(Pa
276e0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49  rse*,ExprList*,I
276f0 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76  dList*,Expr*);.v
27700 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
27710 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28  istSetSortOrder(
27720 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
27730 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27740 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73  ListSetName(Pars
27750 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b  e*,ExprList*,Tok
27760 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
27770 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
27780 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70  tSpan(Parse*,Exp
27790 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  rList*,const cha
277a0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
277b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
277c0 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
277d0 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
277e0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70  ;.u32 sqlite3Exp
277f0 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74  rListFlags(const
27800 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
27810 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
27820 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
27830 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
27840 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
27850 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
27860 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
27870 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
27880 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
27890 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65  en*,int);.#ifnde
278a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
278b0 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c  RTUALTABLE.Modul
278c0 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61  e *sqlite3Pragma
278d0 56 74 61 62 52 65 67 69 73 74 65 72 28 73 71 6c  VtabRegister(sql
278e0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
278f0 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66   *zName);.#endif
27900 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
27910 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
27920 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
27930 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27940 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
27950 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
27960 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
27970 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
27980 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
27990 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
279a0 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
279b0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
279c0 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e  ite3DeleteColumn
279d0 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54  Names(sqlite3*,T
279e0 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
279f0 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78  te3ColumnsFromEx
27a00 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78  prList(Parse*,Ex
27a10 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c  prList*,i16*,Col
27a20 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  umn**);.void sql
27a30 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c  ite3SelectAddCol
27a40 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74  umnTypeAndCollat
27a50 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
27a60 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  *,Select*);.Tabl
27a70 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
27a80 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
27a90 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
27aa0 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
27ab0 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
27ac0 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73  , int);.Index *s
27ad0 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
27ae0 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69  Index(Table*);.i
27af0 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  16 sqlite3Column
27b00 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20  OfIndex(Index*, 
27b10 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  i16);.void sqlit
27b20 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
27b30 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
27b40 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
27b50 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  t);.#if SQLITE_E
27b60 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
27b70 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69  UMNS.  void sqli
27b80 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
27b90 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c  iesFromName(Tabl
27ba0 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65  e*, Column*);.#e
27bb0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
27bc0 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
27bd0 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43  tiesFromName(T,C
27be0 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65  ) /* no-op */.#e
27bf0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
27c00 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
27c10 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29  *,Token*,Token*)
27c20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
27c30 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
27c40 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27c50 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
27c60 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
27c70 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
27c80 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27c90 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
27ca0 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
27cb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
27cc0 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
27cd0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
27ce0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
27cf0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
27d00 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
27d10 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
27d20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
27d30 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
27d40 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
27d50 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
27d60 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
27d70 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
27d80 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
27d90 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
27da0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
27db0 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
27dc0 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
27dd0 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
27de0 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
27df0 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65  t char*);..#ifde
27e00 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
27e10 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  BLE.# define sql
27e20 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20  ite3FaultSim(X) 
27e30 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a  SQLITE_OK.#else.
27e40 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75    int sqlite3Fau
27e50 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64  ltSim(int);.#end
27e60 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  if..Bitvec *sqli
27e70 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
27e80 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
27e90 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
27ea0 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
27eb0 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
27ec0 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c  NotNull(Bitvec*,
27ed0 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
27ee0 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
27ef0 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
27f00 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
27f10 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
27f20 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
27f30 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
27f40 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
27f50 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
27f60 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66  ze(Bitvec*);.#if
27f70 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
27f80 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74  STABLE.int sqlit
27f90 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
27fa0 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23  est(int,int*);.#
27fb0 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73  endif..RowSet *s
27fc0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
27fd0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
27fe0 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
27ff0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
28000 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
28010 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28020 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
28030 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
28040 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
28050 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
28060 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
28070 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
28080 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
28090 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
280a0 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
280b0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
280c0 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
280d0 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
280e0 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
280f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
28100 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
28110 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
28120 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
28130 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
28140 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
28150 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
28160 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
28170 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
28180 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
28190 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
281a0 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
281b0 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
281c0 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
281d0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
281e0 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
281f0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
28200 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28210 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
28220 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
28230 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
28240 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
28250 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
28260 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
28270 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
28280 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
28290 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
282a0 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
282b0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
282c0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
282d0 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
282e0 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
282f0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
28300 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
28310 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
28320 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
28330 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
28340 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
28350 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
28360 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
28370 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55   IdList*, int, U
28380 70 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73  psert*);.void *s
28390 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
283a0 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
283b0 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  d*,int,int*,int*
283c0 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
283d0 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73  e3IdListAppend(s
283e0 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
283f0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
28400 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
28410 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
28420 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
28430 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45  *sqlite3SrcListE
28440 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c  nlarge(sqlite3*,
28450 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
28460 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
28470 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
28480 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  end(sqlite3*, Sr
28490 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
284a0 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74  Token*);.SrcList
284b0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
284c0 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50  AppendFromTerm(P
284d0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
284e0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
284f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28510 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53         Token*, S
28520 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49  elect*, Expr*, I
28530 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
28540 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65  lite3SrcListInde
28550 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53  xedBy(Parse *, S
28560 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20  rcList *, Token 
28570 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28580 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28  SrcListFuncArgs(
28590 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
285a0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
285b0 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
285c0 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
285d0 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
285e0 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
285f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
28600 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
28610 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
28620 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
28630 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
28640 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
28650 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
28660 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
28670 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
28680 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
28690 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
286a0 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
286b0 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
286c0 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
286d0 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
286e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
286f0 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
28700 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
28710 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
28720 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
28730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28740 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69          Expr*, i
28750 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
28760 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
28770 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
28780 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
28790 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
287a0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
287b0 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
287c0 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
287d0 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
287e0 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
287f0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
28800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28810 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
28820 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78  ExprList*,u32,Ex
28830 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
28840 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73  e3SelectDelete(s
28850 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a  qlite3*, Select*
28860 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
28870 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50  3SrcListLookup(P
28880 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
28890 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
288a0 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20  eadOnly(Parse*, 
288b0 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Table*, int);.vo
288c0 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  id sqlite3OpenTa
288d0 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20  ble(Parse*, int 
288e0 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54  iCur, int iDb, T
288f0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  able*, int);.#if
28900 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28910 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
28920 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21  LETE_LIMIT) && !
28930 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
28940 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78  MIT_SUBQUERY).Ex
28950 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74  pr *sqlite3Limit
28960 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63  Where(Parse*,Src
28970 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
28980 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72  List*,Expr*,char
28990 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  *);.#endif.void 
289a0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f  sqlite3DeleteFro
289b0 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
289c0 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c  t*, Expr*, ExprL
289d0 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
289e0 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
289f0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
28a00 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  *, ExprList*,Exp
28a10 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a  r*,int,ExprList*
28a20 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20  ,Expr*,.        
28a30 20 20 20 20 20 20 20 20 20 20 20 55 70 73 65 72             Upser
28a40 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  t*);.WhereInfo *
28a50 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
28a60 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
28a70 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
28a80 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
28a90 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28aa0 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
28ab0 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73  Info*);.LogEst s
28ac0 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75  qlite3WhereOutpu
28ad0 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49  tRowCount(WhereI
28ae0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
28af0 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
28b00 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
28b10 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
28b20 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e  sOrdered(WhereIn
28b30 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
28b40 33 57 68 65 72 65 4f 72 64 65 72 65 64 49 6e 6e  3WhereOrderedInn
28b50 65 72 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f  erLoop(WhereInfo
28b60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
28b70 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65  hereIsSorted(Whe
28b80 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
28b90 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e  lite3WhereContin
28ba0 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ueLabel(WhereInf
28bb0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
28bc0 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28  WhereBreakLabel(
28bd0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
28be0 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f   sqlite3WhereOkO
28bf0 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f  nePass(WhereInfo
28c00 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e  *, int*);.#defin
28c10 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20  e ONEPASS_OFF   
28c20 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55     0        /* U
28c30 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f  se of ONEPASS no
28c40 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  t allowed */.#de
28c50 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e  fine ONEPASS_SIN
28c60 47 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f  GLE   1        /
28c70 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20  * ONEPASS valid 
28c80 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  for a single row
28c90 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69   update */.#defi
28ca0 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49  ne ONEPASS_MULTI
28cb0 20 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20      2        /* 
28cc0 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64  ONEPASS is valid
28cd0 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f   for multiple ro
28ce0 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ws */.void sqlit
28cf0 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e  e3ExprCodeLoadIn
28d00 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  dexColumn(Parse*
28d10 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
28d20 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
28d30 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
28d40 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
28d50 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
28d60 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
28d70 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
28d80 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61  etColumnToReg(Pa
28d90 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
28da0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
28db0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
28dc0 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
28dd0 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
28de0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
28df0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28e00 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
28e10 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
28e20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28e30 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61  xprCacheStore(Pa
28e40 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
28e50 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28e60 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28  e3ExprCachePush(
28e70 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
28e80 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f  lite3ExprCachePo
28e90 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  p(Parse*);.void 
28ea0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
28eb0 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  Remove(Parse*, i
28ec0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28ed0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43  qlite3ExprCacheC
28ee0 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f  lear(Parse*);.vo
28ef0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
28f00 63 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67  cheAffinityChang
28f10 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
28f20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28f30 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a  3ExprCode(Parse*
28f40 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
28f50 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
28f60 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20  odeCopy(Parse*, 
28f70 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
28f80 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
28f90 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73  eFactorable(Pars
28fa0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
28fb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28fc0 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
28fd0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
28fe0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
28ff0 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
29000 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
29010 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
29020 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
29030 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
29040 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
29050 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
29060 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
29070 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
29080 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
29090 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
290a0 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65  t, int, u8);.#de
290b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
290c0 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20  _DUP      0x01  
290d0 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61  /* Deep, not sha
290e0 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23  llow copies */.#
290f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
29100 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32  EL_FACTOR   0x02
29110 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20    /* Factor out 
29120 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a  constant terms *
29130 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
29140 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30  _ECEL_REF      0
29150 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72  x04  /* Use Expr
29160 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42  List.u.x.iOrderB
29170 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  yCol */.#define 
29180 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54  SQLITE_ECEL_OMIT
29190 52 45 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d  REF  0x08  /* Om
291a0 69 74 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75  it if ExprList.u
291b0 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a  .x.iOrderByCol *
291c0 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
291d0 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c  prIfTrue(Parse*,
291e0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
291f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29200 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65  xprIfFalse(Parse
29210 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
29220 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29230 33 45 78 70 72 49 66 46 61 6c 73 65 44 75 70 28  3ExprIfFalseDup(
29240 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
29250 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20  nt, int);.Table 
29260 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c  *sqlite3FindTabl
29270 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
29280 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
29290 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f  ar*);.#define LO
292a0 43 41 54 45 5f 56 49 45 57 20 20 20 20 30 78 30  CATE_VIEW    0x0
292b0 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45  1.#define LOCATE
292c0 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61  _NOERR   0x02.Ta
292d0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
292e0 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75  teTable(Parse*,u
292f0 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63  32 flags,const c
29300 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
29310 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
29320 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65  e3LocateTableIte
29330 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61  m(Parse*,u32 fla
29340 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  gs,struct SrcLis
29350 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
29360 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
29370 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
29380 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
29390 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
293a0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
293b0 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
293c0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
293d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
293e0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
293f0 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
29400 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
29410 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
29420 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  m(Parse*,Token*)
29430 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
29440 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73  Vacuum(char**, s
29450 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63  qlite3*, int);.c
29460 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
29470 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
29480 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
29490 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
294a0 61 72 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  are(Parse*,Expr*
294b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
294c0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
294d0 6d 70 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c  mpareSkip(Expr*,
294e0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
294f0 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
29500 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
29510 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
29520 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
29530 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
29540 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78  Parse*,Expr*, Ex
29550 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
29560 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
29570 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78 70 72  sNonNullRow(Expr
29580 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
29590 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
295a0 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f  ggregates(NameCo
295b0 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
295c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
295d0 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
295e0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
295f0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
29600 74 65 33 45 78 70 72 43 6f 76 65 72 65 64 42 79  te3ExprCoveredBy
29610 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74  Index(Expr*, int
29620 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49   iCur, Index *pI
29630 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  dx);.int sqlite3
29640 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
29650 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
29660 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
29670 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
29680 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
29690 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f  TE_UNTESTABLE.vo
296a0 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61  id sqlite3PrngSa
296b0 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  veState(void);.v
296c0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52  oid sqlite3PrngR
296d0 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64  estoreState(void
296e0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
296f0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
29700 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
29710 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
29720 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
29730 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
29740 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
29750 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
29760 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
29770 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
29780 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
29790 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
297a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
297b0 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ndTransaction(Pa
297c0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
297d0 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
297e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
297f0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
29800 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
29810 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
29820 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
29830 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
29840 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
29850 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 64  nt sqlite3ExprId
29860 54 6f 54 72 75 65 46 61 6c 73 65 28 45 78 70 72  ToTrueFalse(Expr
29870 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
29880 78 70 72 54 72 75 74 68 56 61 6c 75 65 28 63 6f  xprTruthValue(co
29890 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  nst Expr*);.int 
298a0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
298b0 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e  stant(Expr*);.in
298c0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
298d0 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45  onstantNotJoin(E
298e0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
298f0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
29900 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a  OrFunction(Expr*
29910 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
29920 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
29930 4f 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  OrGroupBy(Parse*
29940 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
29950 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
29960 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74  ExprIsTableConst
29970 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  ant(Expr*,int);.
29980 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
29990 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54  ABLE_CURSOR_HINT
299a0 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  S.int sqlite3Exp
299b0 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72  rContainsSubquer
299c0 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66  y(Expr*);.#endif
299d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
299e0 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c  IsInteger(Expr*,
299f0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
29a00 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c  te3ExprCanBeNull
29a10 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69  (const Expr*);.i
29a20 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65  nt sqlite3ExprNe
29a30 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61  edsNoAffinityCha
29a40 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c  nge(const Expr*,
29a50 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69   char);.int sqli
29a60 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74  te3IsRowid(const
29a70 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
29a80 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
29a90 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73  Delete(.    Pars
29aa0 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65  e*,Table*,Trigge
29ab0 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  r*,int,int,int,i
29ac0 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29  16,u8,u8,u8,int)
29ad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
29ae0 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
29af0 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
29b00 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
29b10 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  nt*, int);.int s
29b20 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e  qlite3GenerateIn
29b30 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49  dexKey(Parse*, I
29b40 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
29b50 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78   int, int*,Index
29b60 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
29b70 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49  ite3ResolvePartI
29b80 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69  dxLabel(Parse*,i
29b90 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29ba0 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61  3GenerateConstra
29bb0 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a  intChecks(Parse*
29bc0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74  ,Table*,int*,int
29bd0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20  ,int,int,int,.  
29be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c00 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74     u8,u8,int,int
29c10 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b  *,int*,Upsert*);
29c20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
29c30 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a  NABLE_NULL_TRIM.
29c40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65    void sqlite3Se
29c50 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64  tMakeRecordP5(Vd
29c60 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  be*,Table*);.#el
29c70 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
29c80 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64  te3SetMakeRecord
29c90 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76  P5(A,B).#endif.v
29ca0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
29cb0 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
29cc0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
29cd0 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c  nt,int,int*,int,
29ce0 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  int,int);.int sq
29cf0 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
29d00 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
29d10 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38   Table*, int, u8
29d20 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a  , int, u8*, int*
29d30 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  , int*);.void sq
29d40 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
29d50 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
29d60 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
29d70 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
29d80 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
29d90 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
29da0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
29db0 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
29dc0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
29dd0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38  , int, char*, i8
29de0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
29df0 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61  te3UniqueConstra
29e00 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
29e10 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
29e20 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74  qlite3RowidConst
29e30 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
29e40 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72  t, Table*);.Expr
29e50 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
29e60 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
29e70 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
29e80 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
29e90 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
29ea0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
29eb0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
29ec0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
29ed0 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
29ee0 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
29ef0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
29f00 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
29f10 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
29f20 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
29f30 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ect*,int);.#if S
29f40 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
29f50 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ED.void sqlite3S
29f60 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c  electSetName(Sel
29f70 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ect*,const char*
29f80 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29f90 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  e sqlite3SelectS
29fa0 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64  etName(A,B).#end
29fb0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
29fc0 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63  nsertBuiltinFunc
29fd0 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b  s(FuncDef*,int);
29fe0 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
29ff0 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
2a000 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2a010 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  r*,int,u8,u8);.v
2a020 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2a030 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
2a040 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
2a050 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44  sqlite3RegisterD
2a060 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73  ateTimeFunctions
2a070 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
2a080 69 74 65 33 52 65 67 69 73 74 65 72 50 65 72 43  ite3RegisterPerC
2a090 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e  onnectionBuiltin
2a0a0 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
2a0b0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2a0c0 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
2a0d0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2a0e0 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
2a0f0 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
2a100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2a110 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
2a120 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
2a130 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2a140 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
2a150 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2a160 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
2a170 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
2a180 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
2a190 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  able*, Expr*, Ex
2a1a0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e  prList*,Expr*,in
2a1b0 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
2a1c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a1d0 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
2a1e0 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
2a1f0 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
2a200 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
2a210 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
2a220 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
2a240 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
2a250 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
2a260 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
2a270 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
2a280 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
2a290 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
2a2a0 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
2a2b0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
2a2c0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
2a2d0 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
2a2e0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
2a2f0 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
2a300 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
2a310 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
2a320 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2a330 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
2a340 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
2a350 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
2a360 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
2a370 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
2a380 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
2a390 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
2a3a0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
2a3b0 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
2a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3d0 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
2a3e0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2a3f0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2a400 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
2a410 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
2a420 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
2a430 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2a440 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
2a450 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
2a460 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
2a470 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
2a480 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
2a490 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
2a4a0 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
2a4b0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
2a4c0 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
2a4d0 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
2a4e0 2c 53 65 6c 65 63 74 2a 2c 0a 20 20 20 20 20 20  ,Select*,.      
2a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a510 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2a520 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
2a530 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2a540 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
2a550 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
2a560 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
2a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a590 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38        Select*,u8
2a5a0 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20 20 20 20  ,Upsert*,.      
2a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5d0 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2a5e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
2a5f0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2a600 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
2a610 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
2a620 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
2a630 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20 20  xpr*, u8,.      
2a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a660 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2a670 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
2a680 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2a690 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
2a6a0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
2a6b0 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20  en*, Expr*,.    
2a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6e0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2a6f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2a700 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2a710 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
2a720 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  3*, Trigger*);. 
2a730 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c   void sqlite3Unl
2a740 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2a750 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ger(sqlite3*,int
2a760 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2a770 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67   u32 sqlite3Trig
2a780 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65  gerColmask(Parse
2a790 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c  *,Trigger*,ExprL
2a7a0 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62  ist*,int,int,Tab
2a7b0 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69  le*,int);.# defi
2a7c0 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
2a7d0 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
2a7e0 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29  >pToplevel ? (p)
2a7f0 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70  ->pToplevel : (p
2a800 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
2a810 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
2a820 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
2a830 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
2a840 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2a850 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
2a860 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
2a870 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
2a880 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
2a890 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
2a8a0 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
2a8b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
2a8c0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2a8d0 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
2a8e0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
2a8f0 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
2a900 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
2a910 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2a920 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
2a930 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
2a940 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2a950 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
2a960 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
2a970 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
2a980 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
2a990 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c  qlite3IsToplevel
2a9a0 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73  (p) 1.# define s
2a9b0 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
2a9c0 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
2a9d0 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
2a9e0 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
2a9f0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2aa00 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2aa10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2aa20 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
2aa30 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2aa40 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
2aa50 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
2aa60 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
2aa70 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
2aa80 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2aa90 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
2aaa0 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
2aab0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
2aac0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
2aad0 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
2aae0 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
2aaf0 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
2ab00 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2ab10 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2ab20 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
2ab30 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2ab40 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
2ab50 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
2ab60 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2ab70 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
2ab80 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
2ab90 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
2aba0 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
2abb0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2abc0 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
2abd0 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
2abe0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2abf0 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
2ac00 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
2ac10 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
2ac20 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
2ac30 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
2ac40 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2ac50 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
2ac60 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
2ac70 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
2ac80 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
2ac90 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
2aca0 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
2acb0 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
2acc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2acd0 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
2ace0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2acf0 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
2ad00 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
2ad10 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2ad20 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
2ad30 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
2ad40 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
2ad50 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2ad60 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
2ad70 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
2ad80 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
2ad90 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
2ada0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2adb0 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
2adc0 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
2add0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2ade0 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
2adf0 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
2ae00 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
2ae10 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
2ae20 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
2ae30 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
2ae40 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
2ae50 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
2ae60 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
2ae70 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
2ae80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2ae90 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c  IT_UTF16.int sql
2aea0 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
2aeb0 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
2aec0 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
2aed0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2aee0 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
2aef0 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
2af00 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
2af10 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
2af20 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
2af30 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2af40 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
2af50 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
2af60 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
2af70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2af80 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2af90 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
2afa0 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
2afb0 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
2afc0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2afd0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
2afe0 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c  SCANSTATUS) || \
2aff0 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
2b000 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
2b010 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a  _OR_STAT4) || \.
2b020 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
2b030 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d  TE_EXPLAIN_ESTIM
2b040 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73  ATED_ROWS).u64 s
2b050 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
2b060 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69  t(LogEst);.#endi
2b070 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  f.VList *sqlite3
2b080 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33  VListAdd(sqlite3
2b090 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  *,VList*,const c
2b0a0 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63  har*,int,int);.c
2b0b0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2b0c0 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65  e3VListNumToName
2b0d0 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e  (VList*,int);.in
2b0e0 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61  t sqlite3VListNa
2b0f0 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63  meToNum(VList*,c
2b100 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2b110 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
2b120 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
2b130 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  te variable-leng
2b140 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  th integers.  Th
2b150 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ese used to.** b
2b160 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c  e defined locall
2b170 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73  y, but now we us
2b180 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75  e the varint rou
2b190 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69  tines in the uti
2b1a0 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a  l.c.** file..*/.
2b1b0 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
2b1c0 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
2b1d0 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71  ar*, u64);.u8 sq
2b1e0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63  lite3GetVarint(c
2b1f0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2b200 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38  ar *, u64 *);.u8
2b210 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2b220 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
2b230 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a  ed char *, u32 *
2b240 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
2b250 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a  rintLen(u64 v);.
2b260 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f  ./*.** The commo
2b270 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20  n case is for a 
2b280 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73  varint to be a s
2b290 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
2b2a0 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d  y following.** m
2b2b0 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65  acros handle the
2b2c0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74   common case wit
2b2d0 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65  hout a procedure
2b2e0 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20   call, but then 
2b2f0 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63  call.** the proc
2b300 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72  edure for larger
2b310 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65   varints..*/.#de
2b320 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
2b330 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
2b340 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f  (*(A)<(u8)0x80)?
2b350 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c  ((B)=(u32)*(A)),
2b360 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  1:sqlite3GetVari
2b370 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29  nt32((A),(u32 *)
2b380 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
2b390 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
2b3a0 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29   \.  (u8)(((u32)
2b3b0 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28  (B)<(u32)0x80)?(
2b3c0 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63  *(A)=(unsigned c
2b3d0 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73  har)(B)),1:\.  s
2b3e0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
2b3f0 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e  (A),(B))).#defin
2b400 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
2b410 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
2b420 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
2b430 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
2b440 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
2b450 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
2b460 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69  AffinityStr(sqli
2b470 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76  te3*, Index*);.v
2b480 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
2b490 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20  Affinity(Vdbe*, 
2b4a0 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68  Table*, int);.ch
2b4b0 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
2b4c0 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
2b4d0 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
2b4e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2b4f0 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
2b500 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
2b510 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
2b520 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65  har sqlite3Table
2b530 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54  ColumnAffinity(T
2b540 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72  able*,int);.char
2b550 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69   sqlite3ExprAffi
2b560 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
2b570 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2b580 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oi64(const char*
2b590 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29  , i64*, int, u8)
2b5a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63  ;.int sqlite3Dec
2b5b0 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74  OrHexToI64(const
2b5c0 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76   char*, i64*);.v
2b5d0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2b5e0 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a  WithMsg(sqlite3*
2b5f0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2b600 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  r*,...);.void sq
2b610 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
2b620 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
2b630 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f  qlite3SystemErro
2b640 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
2b650 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
2b660 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
2b670 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
2b680 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
2b690 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
2b6a0 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
2b6b0 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
2b6c0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
2b6d0 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
2b6e0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
2b6f0 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
2b700 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  ME).const char *
2b710 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
2b720 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
2b730 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2b740 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e  E_DESERIALIZE.in
2b750 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e  t sqlite3MemdbIn
2b760 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  it(void);.#endif
2b770 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
2b780 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
2b790 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
2b7a0 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
2b7b0 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
2b7c0 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
2b7d0 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
2b7e0 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
2b7f0 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ,int);.CollSeq *
2b800 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
2b810 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2b820 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
2b830 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
2b840 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
2b850 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2b860 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
2b870 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2b880 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50 61  ExprNNCollSeq(Pa
2b890 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2b8a0 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
2b8b0 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
2b8c0 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c 45 78  qMatch(Parse*,Ex
2b8d0 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
2b8e0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
2b8f0 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
2b900 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2b910 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  *, const Token*,
2b920 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
2b930 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
2b940 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c  teString(Parse*,
2b950 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
2b960 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2b970 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
2b980 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2b990 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71  ite3CheckCollSeq
2b9a0 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65  (Parse *, CollSe
2b9b0 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  q *);.int sqlite
2b9c0 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65  3CheckObjectName
2b9d0 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20  (Parse *, const 
2b9e0 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  char *);.void sq
2b9f0 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
2ba00 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  ges(sqlite3 *, i
2ba10 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2ba20 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  AddInt64(i64*,i6
2ba30 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
2ba40 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ubInt64(i64*,i64
2ba50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  );.int sqlite3Mu
2ba60 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  lInt64(i64*,i64)
2ba70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73  ;.int sqlite3Abs
2ba80 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64  Int32(int);.#ifd
2ba90 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2baa0 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20  _8_3_NAMES.void 
2bab0 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2bac0 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  x3(const char*, 
2bad0 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
2bae0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69  define sqlite3Fi
2baf0 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23  leSuffix3(X,Y).#
2bb00 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33  endif.u8 sqlite3
2bb10 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
2bb20 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63   char *z,u8);..c
2bb30 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
2bb40 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69  e3ValueText(sqli
2bb50 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
2bb60 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
2bb70 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76  eBytes(sqlite3_v
2bb80 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  alue*, u8);.void
2bb90 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2bba0 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Str(sqlite3_valu
2bbb0 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  e*, int, const v
2bbc0 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20  oid *,u8,.      
2bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbe0 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
2bbf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2bc00 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69  alueSetNull(sqli
2bc10 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69  te3_value*);.voi
2bc20 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
2bc30 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
2bc40 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
2bc50 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
2bc60 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23  ew(sqlite3 *);.#
2bc70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2bc80 49 54 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73  IT_UTF16.char *s
2bc90 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
2bca0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2bcb0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
2bcc0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2bcd0 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
2bce0 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
2bcf0 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
2bd00 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
2bd10 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2bd20 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
2bd30 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
2bd40 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
2bd50 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
2bd60 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
2bd70 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2bd80 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
2bd90 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
2bda0 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
2bdb0 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78  3StrBINARY[];.ex
2bdc0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2bdd0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2bde0 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a  UpperToLower[];.
2bdf0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2be00 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2be10 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78  e3CtypeMap[];.ex
2be20 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  tern const Token
2be30 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e   sqlite3IntToken
2be40 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  s[];.extern SQLI
2be50 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71  TE_WSD struct Sq
2be60 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69  lite3Config sqli
2be70 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72  te3Config;.exter
2be80 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  n FuncDefHash sq
2be90 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63  lite3BuiltinFunc
2bea0 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
2beb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
2bec0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
2bed0 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
2bee0 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64  ndif.#endif.#ifd
2bef0 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
2bf00 65 78 74 65 72 6e 20 73 71 6c 69 74 65 33 5f 75  extern sqlite3_u
2bf10 69 6e 74 36 34 20 73 71 6c 69 74 65 33 4e 50 72  int64 sqlite3NPr
2bf20 6f 66 69 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66  ofileCnt;.#endif
2bf30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
2bf40 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
2bf50 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
2bf60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2bf70 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
2bf80 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2bf90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2bfa0 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
2bfb0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2bfc0 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
2bfd0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2bfe0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
2bff0 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
2c000 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2c010 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76  har *, int *);.v
2c020 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65  oid sqlite3Neste
2c030 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
2c040 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
2c050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2c060 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
2c070 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29  ements(sqlite3*)
2c080 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
2c090 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
2c0a0 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
2c0b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c0c0 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
2c0d0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
2c0e0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
2c0f0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
2c100 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f  rongNumTermsErro
2c110 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  r(Parse *pParse,
2c120 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74   Select *p);.int
2c130 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
2c140 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
2c150 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2c160 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2c170 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
2c180 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
2c190 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
2c1a0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  xt*, Expr*);.int
2c1b0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2c1c0 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d  xprListNames(Nam
2c1d0 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c  eContext*, ExprL
2c1e0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
2c1f0 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74  te3ResolveSelect
2c200 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65  Names(Parse*, Se
2c210 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2c220 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
2c230 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66  e3ResolveSelfRef
2c240 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61  erence(Parse*,Ta
2c250 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45  ble*,int,Expr*,E
2c260 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2c270 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64  qlite3ResolveOrd
2c280 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  erGroupBy(Parse*
2c290 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c  , Select*, ExprL
2c2a0 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
2c2b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c2c0 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64  ColumnDefault(Vd
2c2d0 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  be *, Table *, i
2c2e0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2c2f0 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73  qlite3AlterFinis
2c300 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  hAddColumn(Parse
2c310 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
2c320 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42  id sqlite3AlterB
2c330 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61  eginAddColumn(Pa
2c340 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
2c350 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2c360 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61  te3GetCollSeq(Pa
2c370 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65  rse*, u8, CollSe
2c380 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  q *, const char*
2c390 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41  );.char sqlite3A
2c3a0 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73  ffinityType(cons
2c3b0 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e 2a  t char*, Column*
2c3c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2c3d0 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54  nalyze(Parse*, T
2c3e0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
2c3f0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
2c400 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
2c410 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74  yHandler*, sqlit
2c420 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73  e3_file*);.int s
2c430 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c  qlite3FindDb(sql
2c440 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
2c450 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2c460 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c  bName(sqlite3 *,
2c470 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2c480 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  int sqlite3Analy
2c490 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a  sisLoad(sqlite3*
2c4a0 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20  ,int iDB);.void 
2c4b0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64  sqlite3DeleteInd
2c4c0 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65  exSamples(sqlite
2c4d0 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  3*,Index*);.void
2c4e0 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52   sqlite3DefaultR
2c4f0 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76  owEst(Index*);.v
2c500 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2c510 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
2c520 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
2c530 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69  .int sqlite3IsLi
2c540 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  keFunction(sqlit
2c550 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63  e3*,Expr*,int*,c
2c560 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2c570 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76  te3SchemaClear(v
2c580 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a  oid *);.Schema *
2c590 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
2c5a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65  (sqlite3 *, Btre
2c5b0 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
2c5c0 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73  3SchemaToIndex(s
2c5d0 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65  qlite3 *db, Sche
2c5e0 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  ma *);.KeyInfo *
2c5f0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c  sqlite3KeyInfoAl
2c600 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
2c610 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2c620 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28  te3KeyInfoUnref(
2c630 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
2c640 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2c650 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  foRef(KeyInfo*);
2c660 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2c670 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28  3KeyInfoOfIndex(
2c680 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b  Parse*, Index*);
2c690 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2c6a0 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
2c6b0 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62  KeyInfoIsWriteab
2c6c0 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65  le(KeyInfo*);.#e
2c6d0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2c6e0 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
2c6f0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2c700 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
2c710 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29  id *,.  void (*)
2c720 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2c730 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2c740 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
2c750 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2c760 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2c770 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64  _value **), void
2c780 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2c790 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65  text*),.  FuncDe
2c7a0 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
2c7b0 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71  uctor.);.void sq
2c7c0 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71  lite3OomFault(sq
2c7d0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2c7e0 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71  lite3OomClear(sq
2c7f0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2c800 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
2c810 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
2c820 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
2c830 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
2c840 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
2c850 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
2c860 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65  trAccum*, sqlite
2c870 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  3*, char*, int, 
2c880 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c890 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
2c8a0 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
2c8b0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
2c8c0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2c8d0 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
2c8e0 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
2c8f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2c900 70 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63  ppendChar(StrAcc
2c910 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63  um*,int,char);.c
2c920 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
2c930 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
2c940 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
2c950 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
2c960 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
2c970 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
2c980 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
2c990 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
2c9a0 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
2c9b0 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
2c9c0 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
2c9d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
2c9e0 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
2c9f0 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
2ca00 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
2ca10 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
2ca20 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
2ca30 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
2ca40 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65  t u8 *);..#ifnde
2ca50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  f SQLITE_OMIT_SU
2ca60 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74  BQUERY.int sqlit
2ca70 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61  e3ExprCheckIN(Pa
2ca80 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65  rse*, Expr*);.#e
2ca90 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2caa0 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28  ite3ExprCheckIN(
2cab0 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  x,y) SQLITE_OK.#
2cac0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2cad0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
2cae0 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20  3_OR_STAT4.void 
2caf0 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75  sqlite3AnalyzeFu
2cb00 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
2cb10 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  nt sqlite3Stat4P
2cb20 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20  robeSetValue(.  
2cb30 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c    Parse*,Index*,
2cb40 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a  UnpackedRecord**
2cb50 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  ,Expr*,int,int,i
2cb60 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2cb70 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45  3Stat4ValueFromE
2cb80 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  xpr(Parse*, Expr
2cb90 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  *, u8, sqlite3_v
2cba0 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  alue**);.void sq
2cbb0 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46  lite3Stat4ProbeF
2cbc0 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  ree(UnpackedReco
2cbd0 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  rd*);.int sqlite
2cbe0 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c  3Stat4Column(sql
2cbf0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  ite3*, const voi
2cc00 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71  d*, int, int, sq
2cc10 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2cc20 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65  char sqlite3Inde
2cc30 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  xColumnAffinity(
2cc40 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2cc50 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
2cc60 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
2cc70 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
2cc80 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
2cc90 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  r.*/.#ifndef SQL
2cca0 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2ccb0 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
2ccc0 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
2ccd0 2a 28 2a 29 28 75 36 34 29 29 3b 0a 20 20 76 6f  *(*)(u64));.  vo
2cce0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2ccf0 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
2cd00 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e  (*)(void*));.#en
2cd10 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2cd20 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
2cd30 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
2cd40 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
2cd50 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
2cd60 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
2cd70 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
2cd80 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
2cd90 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
2cda0 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
2cdb0 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
2cdc0 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
2cdd0 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
2cde0 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2cdf0 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
2ce00 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2ce10 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2ce20 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
2ce30 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2ce40 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2ce50 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
2ce60 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
2ce70 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
2ce80 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
2ce90 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2cea0 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
2ceb0 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
2cec0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2ced0 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
2cee0 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
2cef0 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
2cf00 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2cf10 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2cf20 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
2cf30 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
2cf40 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
2cf50 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
2cf60 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
2cf70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2cf80 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
2cf90 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2cfa0 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
2cfb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2cfc0 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
2cfd0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2cfe0 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20  3VtabLock(X).#  
2cff0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2d000 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
2d010 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2d020 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
2d030 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2d040 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
2d050 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
2d060 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2d070 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
2d080 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
2d090 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
2d0a0 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
2d0b0 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
2d0c0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2d0d0 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
2d0e0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
2d0f0 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
2d100 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
2d110 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
2d120 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
2d130 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
2d140 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2d150 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2d160 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
2d170 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
2d180 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
2d190 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2d1a0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2d1b0 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2d1c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2d1d0 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
2d1e0 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
2d1f0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
2d200 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
2d210 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
2d220 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2d230 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
2d240 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
2d250 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
2d260 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
2d270 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  te3*, Table*);. 
2d280 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65    Module *sqlite
2d290 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c  3VtabCreateModul
2d2a0 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a  e(.     sqlite3*
2d2b0 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ,.     const cha
2d2c0 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73  r*,.     const s
2d2d0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a  qlite3_module*,.
2d2e0 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20       void*,.    
2d2f0 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a   void(*)(void*).
2d300 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20     );.#  define 
2d310 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
2d320 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
2d330 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
2d340 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
2d350 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
2d360 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
2d370 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
2d380 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2d390 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2d3a0 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
2d3b0 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
2d3c0 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
2d3d0 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
2d3e0 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
2d3f0 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
2d400 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2d410 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
2d420 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
2d430 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
2d440 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
2d450 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2d460 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
2d470 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2d480 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
2d490 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
2d4a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2d4b0 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
2d4c0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2d4d0 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
2d4e0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
2d4f0 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
2d500 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2d510 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2d520 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
2d530 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2d540 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2d550 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
2d560 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
2d570 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
2d580 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
2d590 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2d5a0 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
2d5b0 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
2d5c0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
2d5d0 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
2d5e0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2d5f0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
2d600 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
2d610 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
2d620 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
2d630 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
2d640 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
2d650 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
2d660 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
2d670 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
2d680 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
2d690 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
2d6a0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
2d6b0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2d6c0 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
2d6d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
2d6e0 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
2d6f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
2d700 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
2d710 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2d720 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
2d730 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
2d740 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
2d750 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
2d760 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
2d770 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
2d780 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
2d790 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
2d7a0 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
2d7b0 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
2d7c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2d7d0 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
2d7e0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2d7f0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2d800 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
2d810 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
2d820 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
2d830 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
2d840 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
2d850 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2d860 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
2d870 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
2d880 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
2d890 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2d8a0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
2d8b0 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
2d8c0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
2d8d0 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
2d8e0 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
2d8f0 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
2d900 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
2d910 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
2d920 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
2d930 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2d940 78 2c 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e  x,y).#endif.#ifn
2d950 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d960 55 50 53 45 52 54 0a 20 20 55 70 73 65 72 74 20  UPSERT.  Upsert 
2d970 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65  *sqlite3UpsertNe
2d980 77 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  w(sqlite3*,ExprL
2d990 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2d9a0 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76  ist*,Expr*);.  v
2d9b0 6f 69 64 20 73 71 6c 69 74 65 33 55 70 73 65 72  oid sqlite3Upser
2d9c0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
2d9d0 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73  ,Upsert*);.  Ups
2d9e0 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65  ert *sqlite3Upse
2d9f0 72 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55  rtDup(sqlite3*,U
2da00 70 73 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73  psert*);.  int s
2da10 71 6c 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c  qlite3UpsertAnal
2da20 79 7a 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  yzeTarget(Parse*
2da30 2c 53 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74  ,SrcList*,Upsert
2da40 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2da50 65 33 55 70 73 65 72 74 44 6f 55 70 64 61 74 65  e3UpsertDoUpdate
2da60 28 50 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c  (Parse*,Upsert*,
2da70 54 61 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e  Table*,Index*,in
2da80 74 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  t);.#else.#defin
2da90 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e  e sqlite3UpsertN
2daa0 65 77 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28  ew(v,w,x,y,z) ((
2dab0 55 70 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69  Upsert*)0).#defi
2dac0 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  ne sqlite3Upsert
2dad0 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66  Delete(x,y).#def
2dae0 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72  ine sqlite3Upser
2daf0 74 44 75 70 28 78 2c 79 29 20 20 20 20 20 20 20  tDup(x,y)       
2db00 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e  ((Upsert*)0).#en
2db10 64 69 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61  dif.../* Declara
2db20 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69  tions for functi
2db30 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41  ons in fkey.c. A
2db40 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20  ll of these are 
2db50 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e  replaced by.** n
2db60 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f  o-op macros if O
2db70 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2db80 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74  is defined. In t
2db90 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65  his case no fore
2dba0 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74  ign.** key funct
2dbb0 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69  ionality is avai
2dbc0 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54  lable. If OMIT_T
2dbd0 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65  RIGGER is define
2dbe0 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f  d but.** OMIT_FO
2dbf0 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74  REIGN_KEY is not
2dc00 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74  , only some of t
2dc10 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
2dc20 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20   no-oped. In.** 
2dc30 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67  this case foreig
2dc40 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65  n keys are parse
2dc50 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20  d, but no other 
2dc60 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
2dc70 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
2dc80 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
2dc90 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
2dca0 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
2dcb0 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
2dcc0 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2dcd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2dce0 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
2dcf0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2dd00 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
2dd10 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
2dd20 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2dd30 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2dd40 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2dd50 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
2dd60 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
2dd70 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
2dd80 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
2dd90 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
2dda0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
2ddb0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
2ddc0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
2ddd0 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
2dde0 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
2ddf0 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
2de00 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
2de10 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
2de20 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
2de30 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
2de40 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2de50 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
2de60 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
2de70 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2de80 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
2de90 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
2dea0 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
2deb0 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
2dec0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
2ded0 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
2dee0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2def0 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
2df00 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23  ,b,c,d)    0.  #
2df10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2df20 52 65 66 65 72 65 6e 63 65 73 28 61 29 20 20 20  References(a)   
2df30 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69       0.#endif.#i
2df40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2df50 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
2df60 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
2df70 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
2df80 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73  Table*);.  int s
2df90 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
2dfa0 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  dex(Parse*,Table
2dfb0 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c  *,FKey*,Index**,
2dfc0 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  int**);.#else.  
2dfd0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2dfe0 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23  kDelete(a,b).  #
2dff0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2e000 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c  LocateIndex(a,b,
2e010 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a  c,d,e).#endif...
2e020 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20  /*.** Available 
2e030 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e  fault injectors.
2e040 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62    Should be numb
2e050 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
2e060 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ith 0..*/.#defin
2e070 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2e080 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20  JECTOR_MALLOC   
2e090 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
2e0a0 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
2e0b0 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f  _COUNT      1../
2e0c0 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
2e0d0 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69  ce to the code i
2e0e0 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66  n fault.c used f
2e0f0 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22  or identifying "
2e100 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f  benign".** mallo
2e110 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73  c failures. This
2e120 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74   is only present
2e130 20 69 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53   if SQLITE_UNTES
2e140 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20  TABLE.** is not 
2e150 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
2e160 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
2e170 54 41 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c  TABLE.  void sql
2e180 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
2e190 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76  alloc(void);.  v
2e1a0 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65  oid sqlite3EndBe
2e1b0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
2e1c0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2e1d0 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  e sqlite3BeginBe
2e1e0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23  nignMalloc().  #
2e1f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e  define sqlite3En
2e200 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  dBenignMalloc().
2e210 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c  #endif../*.** Al
2e220 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
2e230 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
2e240 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f  FindInIndex().*/
2e250 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2e260 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31  X_ROWID        1
2e270 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65     /* Search the
2e280 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
2e290 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ble */.#define I
2e2a0 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
2e2b0 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72       2   /* Sear
2e2c0 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ch an ephemeral 
2e2d0 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  b-tree */.#defin
2e2e0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
2e2f0 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45  _ASC    3   /* E
2e300 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53  xisting index AS
2e310 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
2e320 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
2e330 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20  X_DESC   4   /* 
2e340 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44  Existing index D
2e350 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ESCENDING */.#de
2e360 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
2e370 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f  OP         5   /
2e380 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c  * No table avail
2e390 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72  able. Use compar
2e3a0 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41  isons */./*.** A
2e3b0 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72  llowed flags for
2e3c0 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74   the 3rd paramet
2e3d0 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e  er to sqlite3Fin
2e3e0 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23  dInIndex()..*/.#
2e3f0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2e400 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30  NOOP_OK     0x00
2e410 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74  01  /* OK to ret
2e420 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  urn IN_INDEX_NOO
2e430 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  P */.#define IN_
2e440 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50  INDEX_MEMBERSHIP
2e450 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20    0x0002  /* IN 
2e460 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f  operator used fo
2e470 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73  r membership tes
2e480 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  t */.#define IN_
2e490 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20  INDEX_LOOP      
2e4a0 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20    0x0004  /* IN 
2e4b0 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73  operator used as
2e4c0 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73   a loop */.int s
2e4d0 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2e4e0 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  x(Parse *, Expr 
2e4f0 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e  *, u32, int*, in
2e500 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65  t*);..int sqlite
2e510 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
2e520 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
2e530 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
2e540 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
2e550 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2e560 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
2e570 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20  te3_vfs *);.#if 
2e580 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2e590 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
2e5a0 54 45 29 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65  TE) \. || define
2e5b0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2e5c0 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
2e5d0 54 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  TE).  int sqlite
2e5e0 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73  3JournalCreate(s
2e5f0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
2e600 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
2e610 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65  te3JournalIsInMe
2e620 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c  mory(sqlite3_fil
2e630 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e *p);.void sqli
2e640 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
2e650 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
2e660 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2e670 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64  ExprSetHeightAnd
2e680 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61  Flags(Parse *pPa
2e690 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23  rse, Expr *p);.#
2e6a0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
2e6b0 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
2e6c0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
2e6d0 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20  prHeight(Select 
2e6e0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2e6f0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
2e700 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
2e710 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2e720 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
2e730 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64  Height(x) 0.  #d
2e740 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
2e750 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79  rCheckHeight(x,y
2e760 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71  ).#endif..u32 sq
2e770 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f  lite3Get4byte(co
2e780 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  nst u8*);.void s
2e790 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75  qlite3Put4byte(u
2e7a0 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65  8*, u32);..#ifde
2e7b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2e7c0 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
2e7d0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2e7e0 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71  ectionBlocked(sq
2e7f0 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33  lite3 *, sqlite3
2e800 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
2e810 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
2e820 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64  ocked(sqlite3 *d
2e830 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  b);.  void sqlit
2e840 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
2e850 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
2e860 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2e870 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2e880 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20  onBlocked(x,y). 
2e890 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2e8a0 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
2e8b0 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  ed(x).  #define 
2e8c0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2e8d0 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69  nClosed(x).#endi
2e8e0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2e8f0 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  _DEBUG.  void sq
2e900 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
2e910 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
2e920 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2e930 6e 65 64 28 59 59 43 4f 56 45 52 41 47 45 29 0a  ned(YYCOVERAGE).
2e940 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
2e950 73 65 72 43 6f 76 65 72 61 67 65 28 46 49 4c 45  serCoverage(FILE
2e960 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
2e970 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
2e980 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65  ENABLE IOTRACE e
2e990 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67  xists then the g
2e9a0 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a  lobal variable.*
2e9b0 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  * sqlite3IoTrace
2e9c0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2e9d0 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72   a printf-like r
2e9e0 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a  outine used to.*
2e9f0 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63  * print I/O trac
2ea00 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f  ing messages..*/
2ea10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2ea20 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
2ea30 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
2ea40 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
2ea50 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
2ea60 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
2ea70 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
2ea80 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
2ea90 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c  ;.SQLITE_API SQL
2eaa0 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20  ITE_EXTERN void 
2eab0 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73  (SQLITE_CDECL *s
2eac0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
2ead0 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
2eae0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2eaf0 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
2eb00 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
2eb10 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
2eb20 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
2eb30 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
2eb40 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
2eb50 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
2eb60 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
2eb70 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
2eb80 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
2eb90 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
2eba0 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
2ebb0 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
2ebc0 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
2ebd0 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
2ebe0 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
2ebf0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2ec00 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
2ec10 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
2ec20 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
2ec30 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
2ec40 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
2ec50 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
2ec60 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
2ec70 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
2ec80 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
2ec90 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2eca0 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
2ecb0 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
2ecc0 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
2ecd0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
2ece0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
2ecf0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
2ed00 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
2ed10 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2ed20 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
2ed30 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
2ed40 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
2ed50 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
2ed60 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
2ed70 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
2ed80 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
2ed90 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
2eda0 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
2edb0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
2edc0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
2edd0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
2ede0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
2edf0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2ee00 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
2ee10 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
2ee20 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
2ee30 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
2ee40 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
2ee50 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
2ee60 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
2ee70 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
2ee80 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
2ee90 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
2eea0 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
2eeb0 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
2eec0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
2eed0 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
2eee0 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
2eef0 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
2ef00 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
2ef10 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
2ef20 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
2ef30 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
2ef40 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
2ef50 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
2ef60 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
2ef70 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
2ef80 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
2ef90 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
2efa0 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
2efb0 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
2efc0 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
2efd0 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
2efe0 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
2eff0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
2f000 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
2f010 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a  s constraint..**
2f020 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20  .** All of this 
2f030 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70  is no-op for a p
2f040 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e  roduction build.
2f050 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20    It only comes 
2f060 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65  into.** play whe
2f070 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d  n the SQLITE_MEM
2f080 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69  DEBUG compile-ti
2f090 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  me option is use
2f0a0 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
2f0b0 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76  ITE_MEMDEBUG.  v
2f0c0 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  oid sqlite3Memde
2f0d0 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a  bugSetType(void*
2f0e0 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
2f0f0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2f100 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
2f110 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
2f120 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c  bugNoType(void*,
2f130 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  u8);.#else.# def
2f140 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2f150 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20  bugSetType(X,Y) 
2f160 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64   /* no-op */.# d
2f170 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
2f180 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59  debugHasType(X,Y
2f190 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  )  1.# define sq
2f1a0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
2f1b0 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e  ype(X,Y)   1.#en
2f1c0 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54  dif.#define MEMT
2f1d0 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30  YPE_HEAP       0
2f1e0 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20  x01  /* General 
2f1f0 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  heap allocations
2f200 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
2f210 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30  YPE_LOOKASIDE  0
2f220 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61  x02  /* Heap tha
2f230 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
2f240 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23  n lookaside */.#
2f250 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50  define MEMTYPE_P
2f260 43 41 43 48 45 20 20 20 20 20 30 78 30 34 20 20  CACHE     0x04  
2f270 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c  /* Page cache al
2f280 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a  locations */../*
2f290 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e  .** Threading in
2f2a0 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53  terface.*/.#if S
2f2b0 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
2f2c0 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73  _THREADS>0.int s
2f2d0 71 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61  qlite3ThreadCrea
2f2e0 74 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  te(SQLiteThread*
2f2f0 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a  *,void*(*)(void*
2f300 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  ),void*);.int sq
2f310 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28  lite3ThreadJoin(
2f320 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76  SQLiteThread*, v
2f330 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  oid**);.#endif..
2f340 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f350 54 45 5f 45 4e 41 42 4c 45 5f 44 42 50 41 47 45  TE_ENABLE_DBPAGE
2f360 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65  _VTAB) || define
2f370 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69  d(SQLITE_TEST).i
2f380 6e 74 20 73 71 6c 69 74 65 33 44 62 70 61 67 65  nt sqlite3Dbpage
2f390 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
2f3a0 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  *);.#endif.#if d
2f3b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
2f3c0 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42  ABLE_DBSTAT_VTAB
2f3d0 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
2f3e0 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71  ITE_TEST).int sq
2f3f0 6c 69 74 65 33 44 62 73 74 61 74 52 65 67 69 73  lite3DbstatRegis
2f400 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ter(sqlite3*);.#
2f410 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
2f420 65 33 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65  e3ExprVectorSize
2f430 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
2f440 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2f450 56 65 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78  Vector(Expr *pEx
2f460 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
2f470 65 33 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62  e3VectorFieldSub
2f480 65 78 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29  expr(Expr*, int)
2f490 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2f4a0 78 70 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c  xprForVectorFiel
2f4b0 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69  d(Parse*,Expr*,i
2f4c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2f4d0 33 56 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28  3VectorErrorMsg(
2f4e0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2f4f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f500 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
2f510 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73 74 20 63  ON_DIAGS.const c
2f520 68 61 72 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d  har **sqlite3Com
2f530 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20  pileOptions(int 
2f540 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a  *pnOpt);.#endif.
2f550 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2f560 45 49 4e 54 5f 48 20 2a 2f 0a                    EINT_H */.