/ Hex Artifact Content
Login

Artifact 2947156d68fff632397c4d4b23e716e1b420493479a1642425e7f13241951cdf:


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 62 43 6f 6e 63 75 72 72 65 6e 74 3b 20  u8 bConcurrent; 
bb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bba0: 20 43 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   Current transac
bbb0: 74 69 6f 6e 20 69 73 20 22 43 4f 4e 43 55 52 52  tion is "CONCURR
bbc0: 45 4e 54 22 20 2a 2f 0a 20 20 75 38 20 74 65 6d  ENT" */.  u8 tem
bbd0: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
bbe0: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
bbf0: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
bc00: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
bc10: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
bc20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
bc30: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
bc40: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
bc50: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e  ure */.  u8 bBen
bc60: 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  ignMalloc;      
bc70: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
bc80: 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20 69 66   require OOMs if
bc90: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 64 66   true */.  u8 df
bca0: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
bcb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
bcc0: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
bcd0: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
bce0: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
bcf0: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
bd00: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
bd10: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
bd20: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
bd30: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bd50: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
bd60: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
bd70: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
bd80: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
bd90: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
bda0: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
bdb0: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
bdc0: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
bdd0: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
bde0: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
bdf0: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
be00: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
be10: 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61   TS */.  u8 mTra
be20: 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ce;             
be30: 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f         /* zero o
be40: 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f 54 52  r more SQLITE_TR
be50: 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75  ACE flags */.  u
be60: 38 20 6e 6f 53 68 61 72 65 64 43 61 63 68 65 3b  8 noSharedCache;
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
be80: 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61 72 65  True if no share
be90: 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e 64 73  d-cache backends
bea0: 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45 78 65   */.  u8 nSqlExe
beb0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
bec0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bed0: 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45   pending OP_SqlE
bee0: 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20  xec opcodes */. 
bef0: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
bf00: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
bf10: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
bf20: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
bf30: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
bf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf50: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
bf60: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
bf70: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
bf80: 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20  int nChange;    
bf90: 20 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 63 68 61 6e 67  by sqlite3_chang
bfc0: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  es() */.  int nT
bfd0: 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20  otalChange;     
bfe0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
bff0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
c000: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
c010: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  es() */.  int aL
c020: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
c030: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
c040: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53  s */.  int nMaxS
c050: 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20  orterMmap;      
c060: 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
c070: 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20  size of regions 
c080: 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72  mapped by sorter
c090: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c   */.  struct sql
c0a0: 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20  ite3InitInfo {  
c0b0: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
c0c0: 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69  on used during i
c0d0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f  nitialization */
c0e0: 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d  .    int newTnum
c0f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c100: 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20   /* Rootpage of 
c110: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74  table being init
c120: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
c130: 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  8 iDb;          
c140: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
c150: 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62  ich db file is b
c160: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
c170: 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b   */.    u8 busy;
c180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c190: 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63      /* TRUE if c
c1a0: 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c  urrently initial
c1b0: 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e 73  izing */.    uns
c1c0: 69 67 6e 65 64 20 6f 72 70 68 61 6e 54 72 69 67  igned orphanTrig
c1d0: 67 65 72 20 3a 20 31 3b 20 2f 2a 20 4c 61 73 74  ger : 1; /* Last
c1e0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72   statement is or
c1f0: 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67  phaned TEMP trig
c200: 67 65 72 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ger */.    unsig
c210: 6e 65 64 20 69 6d 70 6f 73 74 65 72 54 61 62 6c  ned imposterTabl
c220: 65 20 3a 20 31 3b 20 2f 2a 20 42 75 69 6c 64 69  e : 1; /* Buildi
c230: 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74  ng an imposter t
c240: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  able */.    unsi
c250: 67 6e 65 64 20 72 65 6f 70 65 6e 4d 65 6d 64 62  gned reopenMemdb
c260: 20 3a 20 31 3b 20 20 20 2f 2a 20 41 54 54 41 43   : 1;   /* ATTAC
c270: 48 20 69 73 20 72 65 61 6c 6c 79 20 61 20 72 65  H is really a re
c280: 6f 70 65 6e 20 75 73 69 6e 67 20 4d 65 6d 44 42  open using MemDB
c290: 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20   */.  } init;.  
c2a0: 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b  int nVdbeActive;
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c2c0: 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73   Number of VDBEs
c2d0: 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   currently runni
c2e0: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  ng */.  int nVdb
c2f0: 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20  eRead;          
c300: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c310: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
c320: 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69  that read or wri
c330: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
c340: 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20  eWrite;         
c350: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c360: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
c370: 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72  that read and wr
c380: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
c390: 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20  beExec;         
c3a0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c3b0: 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
c3c0: 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a   to VdbeExec() *
c3d0: 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f  /.  int nVDestro
c3e0: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
c3f0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c400: 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f  ctive OP_VDestro
c410: 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a  y operations */.
c420: 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e    int nExtension
c430: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c440: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61  /* Number of loa
c450: 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a  ded extensions *
c460: 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65  /.  void **aExte
c470: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
c480: 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68    /* Array of sh
c490: 61 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e  ared library han
c4a0: 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  dles */.  int (*
c4b0: 78 54 72 61 63 65 29 28 75 33 32 2c 76 6f 69 64  xTrace)(u32,void
c4c0: 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20  *,void*,void*); 
c4d0: 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e      /* Trace fun
c4e0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
c4f0: 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20  *pTraceArg;     
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c510: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c520: 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75   to the trace fu
c530: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
c540: 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69   (*xProfile)(voi
c550: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  d*,const char*,u
c560: 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69  64);  /* Profili
c570: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ng function */. 
c580: 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41   void *pProfileA
c590: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c5a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c5b0: 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c  gument to profil
c5c0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
c5d0: 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67  void *pCommitArg
c5e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c5f0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c600: 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b   xCommitCallback
c610: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
c620: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
c630: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
c640: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
c650: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
c660: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c680: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
c690: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
c6a0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c  */.  void (*xRol
c6b0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
c6c0: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
c6d0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
c6e0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
c6f0: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
c700: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
c710: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
c720: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
c730: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
c740: 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  t64);.#ifdef SQL
c750: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
c760: 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64  DATE_HOOK.  void
c770: 20 2a 70 50 72 65 55 70 64 61 74 65 41 72 67 3b   *pPreUpdateArg;
c780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
c790: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
c7a0: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
c7b0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  k */.  void (*xP
c7c0: 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
c7d0: 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  )(   /* Register
c7e0: 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
c7f0: 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28  _preupdate_hook(
c800: 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73  ) */.    void*,s
c810: 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72  qlite3*,int,char
c820: 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e   const*,char con
c830: 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  st*,sqlite3_int6
c840: 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a  4,sqlite3_int64.
c850: 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65    );.  PreUpdate
c860: 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20 20   *pPreUpdate;   
c870: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
c880: 66 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d 75  for active pre-u
c890: 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a  pdate callback *
c8a0: 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  /.#endif /* SQLI
c8b0: 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
c8c0: 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e  ATE_HOOK */.#ifn
c8d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
c8e0: 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c  WAL.  int (*xWal
c8f0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a  Callback)(void *
c900: 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  , sqlite3 *, con
c910: 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
c920: 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67  .  void *pWalArg
c930: 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28  ;.#endif.  void(
c940: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f  *xCollNeeded)(vo
c950: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
c960: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
c970: 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a  char*);.  void(*
c980: 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76  xCollNeeded16)(v
c990: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
c9a0: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
c9b0: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
c9c0: 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b  *pCollNeededArg;
c9d0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
c9e0: 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20   *pErr;         
c9f0: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
ca00: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
ca10: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76  .  union {.    v
ca20: 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e  olatile int isIn
ca30: 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72  terrupted; /* Tr
ca40: 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e  ue if sqlite3_in
ca50: 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e  terrupt has been
ca60: 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64   called */.    d
ca70: 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20  ouble notUsed1; 
ca80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
ca90: 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a  acer */.  } u1;.
caa0: 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b    Lookaside look
cab0: 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
cac0: 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  /* Lookaside mal
cad0: 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  loc configuratio
cae0: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
caf0: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
cb00: 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  ZATION.  sqlite3
cb10: 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20 20 20  _xauth xAuth;   
cb20: 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73         /* Access
cb30: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66   authorization f
cb40: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
cb50: 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20  d *pAuthArg;    
cb60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
cb70: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  t argument to th
cb80: 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66 75  e access auth fu
cb90: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  nction */.#endif
cba0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
cbb0: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
cbc0: 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78  LLBACK.  int (*x
cbd0: 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a  Progress)(void *
cbe0: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72  );     /* The pr
cbf0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
cc00: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67  */.  void *pProg
cc10: 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20 20  ressArg;        
cc20: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
cc30: 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  o the progress c
cc40: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73  allback */.  uns
cc50: 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f  igned nProgressO
cc60: 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ps;        /* Nu
cc70: 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20  mber of opcodes 
cc80: 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c  for progress cal
cc90: 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a  lback */.#endif.
cca0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
ccb0: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
ccc0: 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20  .  int nVTrans; 
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cce0: 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69   /* Allocated si
ccf0: 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f  ze of aVTrans */
cd00: 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b  .  Hash aModule;
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd20: 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79   /* populated by
cd30: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
cd40: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74  module() */.  Vt
cd50: 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b  abCtx *pVtabCtx;
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
cd70: 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76  ontext for activ
cd80: 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63  e vtab connect/c
cd90: 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c  reate */.  VTabl
cda0: 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20  e **aVTrans;    
cdb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74           /* Virt
cdc0: 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20  ual tables with 
cdd0: 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
cde0: 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  s */.  VTable *p
cdf0: 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20  Disconnect;     
ce00: 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65       /* Disconne
ce10: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
ce20: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
ce30: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48  () */.#endif.  H
ce40: 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20  ash aFunc;      
ce50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ce60: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
ce70: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
ce80: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
ce90: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
cea0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
ceb0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
cec0: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
ced0: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
cee0: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
cef0: 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62  back */.  Db aDb
cf00: 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20  Static[2];      
cf10: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69          /* Stati
cf20: 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20  c space for the 
cf30: 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e  2 default backen
cf40: 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  ds */.  Savepoin
cf50: 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20  t *pSavepoint;  
cf60: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
cf70: 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e   active savepoin
cf80: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79  ts */.  int busy
cf90: 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20  Timeout;        
cfa0: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61        /* Busy ha
cfb0: 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69  ndler timeout, i
cfc0: 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20  n msec */.  int 
cfd0: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
cfe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
cff0: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
d000: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
d010: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
d020: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
d030: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d040: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
d050: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
d060: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
d070: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
d080: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
d090: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
d0a0: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
d0b0: 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  . */.  i64 nDefe
d0c0: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
d0d0: 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65       /* Net defe
d0e0: 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63  rred immediate c
d0f0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
d100: 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65  int *pnBytesFree
d110: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
d120: 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e   If not NULL, in
d130: 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20  crement this in 
d140: 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64  DbFree() */.#ifd
d150: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
d160: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
d170: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
d180: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
d190: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
d1a0: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
d1b0: 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  ER.  ** mutex, n
d1c0: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
d1d0: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
d1e0: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
d1f0: 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a  tify.c..  **.  *
d200: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
d210: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
d220: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
d230: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
d240: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
d250: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
d260: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
d270: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
d280: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
d290: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
d2a0: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
d2b0: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
d2c0: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
d2d0: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
d2e0: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
d2f0: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
d300: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
d310: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
d320: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
d330: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
d340: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
d350: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
d360: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
d370: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
d380: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
d390: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
d3a0: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
d3b0: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
d3c0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
d3d0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
d3e0: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
d3f0: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
d400: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
d410: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
d420: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
d430: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
d440: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
d450: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
d460: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
d470: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
d480: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
d490: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
d4a0: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
d4b0: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73  ION.  sqlite3_us
d4c0: 65 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20  erauth auth;    
d4d0: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
d4e0: 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72  entication infor
d4f0: 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  mation */.#endif
d500: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  .};../*.** A mac
d510: 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74  ro to discover t
d520: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  he encoding of a
d530: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
d540: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43  efine SCHEMA_ENC
d550: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
d560: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
d570: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
d580: 20 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65          ((db)->e
d590: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
d5a0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
d5b0: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
d5c0: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
d5d0: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
d5e0: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
d5f0: 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  ):.**      SQLIT
d600: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
d610: 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59  == PAGER_FULLFSY
d620: 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  NC.**      SQLIT
d630: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
d640: 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55  == PAGER_CKPT_FU
d650: 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20  LLFSYNC.**      
d660: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
d670: 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41  l    == PAGER_CA
d680: 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65  CHE_SPILL.*/.#de
d690: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
d6a0: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
d6b0: 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  00001  /* OK to 
d6c0: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
d6d0: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
d6e0: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
d6f0: 65 46 6d 74 20 20 30 78 30 30 30 30 30 30 30 32  eFmt  0x00000002
d700: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
d710: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
d720: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
d730: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
d740: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30  ames   0x0000000
d750: 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  4  /* Show full 
d760: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
d770: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
d780: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
d790: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
d7a0: 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  08  /* Use full 
d7b0: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
d7c0: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
d7d0: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
d7e0: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 31 30  Sync  0x00000010
d7f0: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
d800: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
d810: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
d820: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
d830: 20 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20      0x00000020  
d840: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
d850: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
d860: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
d870: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
d880: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
d890: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
d8a0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
d8b0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
d8c0: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
d8d0: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
d8e0: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
d8f0: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
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 2f                 /
d920: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
d930: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
d940: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
d950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d970: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
d980: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
d990: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d9a0: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
d9b0: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
d9c0: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
d9d0: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
d9e0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
da10: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
da20: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
da30: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
da40: 63 6b 73 20 20 20 30 78 30 30 30 30 30 32 30 30  cks   0x00000200
da50: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
da60: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
da70: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
da80: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
da90: 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30 34 30  mmit   0x0000040
daa0: 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d  0  /* READ UNCOM
dab0: 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72 65 64  MITTED in shared
dac0: 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e  -cache */.#defin
dad0: 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f  e SQLITE_NoCkptO
dae0: 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30 30 38  nClose  0x000008
daf0: 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70  00  /* No checkp
db00: 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f  oint on close()/
db10: 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e  DETACH */.#defin
db20: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
db30: 4f 72 64 65 72 20 20 20 30 78 30 30 30 30 31 30  Order   0x000010
db40: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
db50: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
db60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
db70: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
db80: 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a    0x00002000  /*
db90: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
dba0: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
dbb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
dbc0: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
dbd0: 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  004000  /* Enfor
dbe0: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
dbf0: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
dc00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
dc10: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
dc20: 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e 61 62  0008000  /* Enab
dc30: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
dc40: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
dc50: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
dc60: 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30 30 30  sion  0x00010000
dc70: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
dc80: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
dc90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
dca0: 64 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30  dExtFunc    0x00
dcb0: 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  020000  /* Enabl
dcc0: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
dcd0: 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23  () SQL func */.#
dce0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
dcf0: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
dd00: 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0040000  /* True
dd10: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
dd20: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
dd30: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
dd40: 20 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20       0x00080000 
dd50: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
dd60: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
dd70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
dd80: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
dd90: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44 69 73  00100000  /* Dis
dda0: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
ddb0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
ddc0: 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
ddd0: 43 6b 20 20 20 20 20 30 78 30 30 32 30 30 30 30  Ck     0x0020000
dde0: 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65  0  /* Check btre
ddf0: 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20  e cell sizes on 
de00: 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  load */.#define 
de10: 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e  SQLITE_Fts3Token
de20: 69 7a 65 72 20 20 30 78 30 30 34 30 30 30 30 30  izer  0x00400000
de30: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33    /* Enable fts3
de40: 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f  _tokenizer(2) */
de50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de60: 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20 20 30  EnableQPSG     0
de70: 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 51 75  x00800000  /* Qu
de80: 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74 61 62  ery Planner Stab
de90: 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65 65 2a  ility Guarantee*
dea0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
deb0: 5f 54 72 69 67 67 65 72 45 51 50 20 20 20 20 20  _TriggerEQP     
dec0: 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 53  0x01000000  /* S
ded0: 68 6f 77 20 74 72 69 67 67 65 72 20 45 58 50 4c  how trigger EXPL
dee0: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
def0: 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20 75 73 65 64  /../* Flags used
df00: 20 6f 6e 6c 79 20 69 66 20 64 65 62 75 67 67 69   only if debuggi
df10: 6e 67 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ng */.#ifdef SQL
df20: 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69 6e  ITE_DEBUG.#defin
df30: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
df40: 65 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30  e       0x080000
df50: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
df60: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
df70: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
df80: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
df90: 69 6e 67 20 20 20 20 30 78 31 30 30 30 30 30 30  ing    0x1000000
dfa0: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
dfb0: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
dfc0: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
dfd0: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
dfe0: 65 20 20 20 20 20 20 30 78 32 30 30 30 30 30 30  e      0x2000000
dff0: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  0  /* True to tr
e000: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
e010: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e020: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
e030: 61 63 65 20 30 78 34 30 30 30 30 30 30 30 20 20  ace 0x40000000  
e040: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
e050: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
e060: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e070: 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20  ITE_VdbeEQP     
e080: 20 20 20 30 78 38 30 30 30 30 30 30 30 20 20 2f     0x80000000  /
e090: 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20  * Debug EXPLAIN 
e0a0: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 65  QUERY PLAN */.#e
e0b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
e0c0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
e0d0: 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a  qlite3.mDbFlags.
e0e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e0f0: 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 20 20  G_SchemaChange  
e100: 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f   0x0001  /* Unco
e110: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
e120: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
e130: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50 72 65  efine DBFLAG_Pre
e140: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
e150: 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  02  /* Preferenc
e160: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
e170: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ncs */.#define D
e180: 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20 20 20  BFLAG_Vacuum    
e190: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
e1a0: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
e1b0: 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65  ACUUM */.#define
e1c0: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e   DBFLAG_SchemaKn
e1d0: 6f 77 6e 4f 6b 20 20 30 78 30 30 30 38 20 20 2f  ownOk  0x0008  /
e1e0: 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e 6f 77  * Schema is know
e1f0: 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20 2a 2f  n to be valid */
e200: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
e210: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
e220: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
e230: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
e240: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
e250: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
e260: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
e270: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
e280: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
e290: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
e2a0: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
e2b0: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
e2c0: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
e2d0: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
e2e0: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
e2f0: 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ening */.#define
e300: 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61   SQLITE_ColumnCa
e310: 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20  che    0x0002   
e320: 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20  /* Column cache 
e330: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e340: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
e350: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
e360: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
e370: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
e380: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
e390: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
e3a0: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
e3b0: 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  oring */.#define
e3c0: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
e3d0: 4f 70 74 20 20 20 20 30 78 30 30 31 30 20 20 20  Opt    0x0010   
e3e0: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
e3f0: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
e400: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
e410: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 32  rIdxScan   0x002
e420: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
e430: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
e440: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
e450: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
e460: 30 34 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  040   /* ORDER B
e470: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
e480: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
e490: 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76  SQLITE_Transitiv
e4a0: 65 20 20 20 20 20 30 78 30 30 38 30 20 20 20 2f  e     0x0080   /
e4b0: 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e  * Transitive con
e4c0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
e4d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e  ine SQLITE_OmitN
e4e0: 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 31 30 30  oopJoin   0x0100
e4f0: 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65     /* Omit unuse
e500: 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e  d tables in join
e510: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e520: 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77 20  ITE_CountOfView 
e530: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
e540: 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65 77  he count-of-view
e550: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
e560: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e570: 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30  CursorHints    0
e580: 78 30 34 30 30 20 20 20 2f 2a 20 41 64 64 20 4f  x0400   /* Add O
e590: 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63  P_CursorHint opc
e5a0: 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  odes */.#define 
e5b0: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
e5c0: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
e5d0: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
e5e0: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 20 20 20  TAT4 data */.   
e5f0: 2f 2a 20 54 48 33 20 65 78 70 65 63 74 73 20 74  /* TH3 expects t
e600: 68 65 20 53 74 61 74 33 34 20 20 5e 5e 5e 5e 5e  he Stat34  ^^^^^
e610: 5e 20 76 61 6c 75 65 20 74 6f 20 62 65 20 30 78  ^ value to be 0x
e620: 30 38 30 30 2e 20 20 44 6f 6e 27 74 20 63 68 61  0800.  Don't cha
e630: 6e 67 65 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e  nge it */.#defin
e640: 65 20 53 51 4c 49 54 45 5f 50 75 73 68 44 6f 77  e SQLITE_PushDow
e650: 6e 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20  n       0x1000  
e660: 20 2f 2a 20 54 68 65 20 70 75 73 68 2d 64 6f 77   /* The push-dow
e670: 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  n optimization *
e680: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e690: 5f 53 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20  _SimplifyJoin   
e6a0: 30 78 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76  0x2000   /* Conv
e6b0: 65 72 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f  ert LEFT JOIN to
e6c0: 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65   JOIN */.#define
e6d0: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
e6e0: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
e6f0: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
e700: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
e710: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
e720: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
e730: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
e740: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
e750: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69  sabled..*/.#defi
e760: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
e770: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
e780: 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74  )  (((db)->dbOpt
e790: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30  Flags&(mask))!=0
e7a0: 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  ).#define Optimi
e7b0: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
e7c0: 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29  , mask)   (((db)
e7d0: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
e7e0: 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  sk))==0)../*.** 
e7f0: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
e800: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
e810: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
e820: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
e830: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
e840: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
e850: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
e860: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
e870: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
e880: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
e890: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
e8a0: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
e8b0: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
e8c0: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
e8d0: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
e8e0: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
e8f0: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
e900: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
e910: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
e920: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
e930: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
e940: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
e950: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
e960: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
e970: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
e980: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
e990: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
e9a0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
e9b0: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
e9c0: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
e9d0: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
e9e0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
e9f0: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
ea00: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
ea10: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
ea20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea30: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
ea40: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
ea50: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
ea60: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
ea70: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
ea80: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
ea90: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
eaa0: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
eab0: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
eac0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
ead0: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
eae0: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
eaf0: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
eb00: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
eb10: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
eb20: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
eb30: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
eb40: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
eb50: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  ** structure.  F
eb60: 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  or global built-
eb70: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78  in functions (ex
eb80: 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28  : substr(), max(
eb90: 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61  ), count()).** a
eba0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
ebb0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
ebc0: 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ld in the sqlite
ebd0: 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
ebe0: 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72  s object..** For
ebf0: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
ec00: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
ec10: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61  ned functions, a
ec20: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
ec30: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73  .** structure is
ec40: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d   held in the db-
ec50: 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c  >aHash hash tabl
ec60: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70  e..**.** The u.p
ec70: 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73  Hash field is us
ec80: 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c  ed by the global
ec90: 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65   built-ins.  The
eca0: 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a   u.pDestructor.*
ecb0: 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  * field is used 
ecc0: 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  by per-connectio
ecd0: 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69  n app-def functi
ece0: 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ons..*/.struct F
ecf0: 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41  uncDef {.  i8 nA
ed00: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
ed10: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
ed20: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
ed30: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
ed40: 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20   u16 funcFlags; 
ed50: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
ed60: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
ed70: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
ed80: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
ed90: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
eda0: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
edb0: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
edc0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
edd0: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
ede0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
edf0: 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65  (*xSFunc)(sqlite
ee00: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
ee10: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
ee20: 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d   /* func or agg-
ee30: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
ee40: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
ee50: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee70: 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72  /* Agg finalizer
ee80: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
ee90: 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51   *zName;   /* SQ
eea0: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
eeb0: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69  nction. */.  uni
eec0: 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66  on {.    FuncDef
eed0: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
eee0: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
eef0: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
ef00: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
ef10: 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63  .    FuncDestruc
ef20: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
ef30: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
ef40: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
ef50: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
ef60: 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } u;.};../*.**
ef70: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
ef80: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
ef90: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
efa0: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
efb0: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
efc0: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
efd0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
efe0: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
eff0: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
f000: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f010: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
f020: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
f030: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
f040: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
f050: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
f060: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
f070: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
f080: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
f090: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
f0a0: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
f0b0: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
f0c0: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
f0d0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
f0e0: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
f0f0: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
f100: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
f110: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
f120: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
f130: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
f140: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
f150: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
f160: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
f170: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
f180: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
f190: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
f1a0: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
f1b0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
f1c0: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
f1d0: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
f1e0: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
f1f0: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
f200: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
f210: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
f220: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
f230: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
f240: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
f250: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
f260: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
f270: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
f280: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
f290: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
f2a0: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
f2b0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
f2c0: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
f2d0: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
f2e0: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
f2f0: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
f300: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
f310: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
f320: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
f330: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
f340: 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f    And.** SQLITE_
f350: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75  FUNC_CONSTANT mu
f360: 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
f370: 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49  s SQLITE_DETERMI
f380: 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a  NISTIC.  There.*
f390: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
f3a0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
f3b0: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
f3c0: 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  this..**.** Valu
f3d0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
f3e0: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
f3f0: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51  rt()):.**     SQ
f400: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
f410: 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61      ==  NC_MinMa
f420: 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f  xAgg      == SF_
f430: 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20  MinMaxAgg.**    
f440: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
f450: 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41  GTH    ==  OPFLA
f460: 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20  G_LENGTHARG.**  
f470: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54     SQLITE_FUNC_T
f480: 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46  YPEOF    ==  OPF
f490: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a  LAG_TYPEOFARG.**
f4a0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f4b0: 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53  _CONSTANT  ==  S
f4c0: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
f4d0: 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49  TIC from the API
f4e0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
f4f0: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65  UNC_ENCMASK   de
f500: 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f  pends on SQLITE_
f510: 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74  UTF* macros in t
f520: 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e  he API.*/.#defin
f530: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
f540: 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a  CMASK  0x0003 /*
f550: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
f560: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
f570: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
f580: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
f590: 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f  IKE     0x0004 /
f5a0: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
f5b0: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
f5c0: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
f5d0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
f5e0: 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  E     0x0008 /* 
f5f0: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
f600: 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
f610: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f620: 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
f630: 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65    0x0010 /* Ephe
f640: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
f650: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
f660: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f670: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20  NEEDCOLL 0x0020 
f680: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
f690: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
f6a0: 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65   be called*/.#de
f6b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f6c0: 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30  _LENGTH   0x0040
f6d0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
f6e0: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
f6f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f700: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
f710: 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0080 /* Built-i
f720: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
f730: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
f740: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
f750: 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75      0x0100 /* Bu
f760: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
f770: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
f780: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f790: 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30  _COALESCE 0x0200
f7a0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
f7b0: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
f7c0: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
f7d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
f7e0: 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75  ELY 0x0400 /* Bu
f7f0: 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
f800: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
f810: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f820: 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30  C_CONSTANT 0x080
f830: 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
f840: 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
f850: 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23  tant output */.#
f860: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f870: 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30  NC_MINMAX   0x10
f880: 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d  00 /* True for m
f890: 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61  in() and max() a
f8a0: 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65  ggregates */.#de
f8b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f8c0: 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30  _SLOCHNG  0x2000
f8d0: 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65   /* "Slow Change
f8e0: 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e  ". Value constan
f8f0: 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20  t during a.     
f900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
f920: 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d  * single query -
f930: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76   might change ov
f940: 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69  er time */.#defi
f950: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41  ne SQLITE_FUNC_A
f960: 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f  FFINITY 0x4000 /
f970: 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e  * Built-in affin
f980: 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ity() function *
f990: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f9a0: 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20 30  _FUNC_OFFSET   0
f9b0: 78 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x8000 /* Built-i
f9c0: 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28  n sqlite_offset(
f9d0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f  ) function */../
f9e0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
f9f0: 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
fa00: 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
fa10: 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
fa20: 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
fa30: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
fa40: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
fa50: 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
fa60: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
fa70: 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
fa80: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
fa90: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
faa0: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
fab0: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
fac0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
fad0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
fae0: 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65  e.**     impleme
faf0: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
fb00: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
fb10: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
fb20: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
fb30: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
fb40: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
fb50: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
fb60: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
fb70: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
fb80: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
fb90: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
fba0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
fbb0: 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
fbc0: 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
fbd0: 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  en the SQLITE_FU
fbe0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67  NC_NEEDCOLL flag
fbf0: 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20   is set..**.**  
fc00: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
fc10: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
fc20: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
fc30: 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
fc40: 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
fc50: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
fc60: 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a  ONSTANT flag..**
fc70: 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28  .**   DFUNCTION(
fc80: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
fc90: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
fca0: 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
fcb0: 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
fcc0: 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
fcd0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
fce0: 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64  g and.**     add
fcf0: 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
fd00: 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20  C_SLOCHNG flag. 
fd10: 20 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26   Used for date &
fd20: 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a   time functions.
fd30: 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74  **     and funct
fd40: 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65  ions like sqlite
fd50: 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20  _version() that 
fd60: 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20  can change, but 
fd70: 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20  not during.**   
fd80: 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79    a single query
fd90: 2e 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69  .  The iArg is i
fda0: 67 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65  gnored.  The use
fdb0: 72 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73  r-data is always
fdc0: 20 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61   set.**     to a
fdd0: 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20   NULL pointer.  
fde0: 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65  The bNC paramete
fdf0: 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  r is not used..*
fe00: 2a 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45  *.**   PURE_DATE
fe10: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
fe20: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
fe30: 2a 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20  **     Used for 
fe40: 22 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65  "pure" date/time
fe50: 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73   functions, this
fe60: 20 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44   macro is like D
fe70: 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20  FUNCTION.**     
fe80: 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64  except that it d
fe90: 6f 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49  oes set the SQLI
fea0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
feb0: 20 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73   flags.  iArg is
fec0: 0a 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20  .**     ignored 
fed0: 61 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74  and the user-dat
fee0: 61 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63  a for these func
fef0: 74 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20  tions is set to 
ff00: 61 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74  an .**     arbit
ff10: 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f  rary non-NULL po
ff20: 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20  inter.  The bNC 
ff30: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
ff40: 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41   used..**.**   A
ff50: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
ff60: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
ff70: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a   xStep, xFinal).
ff80: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
ff90: 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
ffa0: 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
ffb0: 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
ffc0: 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
ffd0: 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
ffe0: 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
fff0: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
10000 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
10010 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
10020 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
10030 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
10040 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
10050 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
10060 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43  **.**   LIKEFUNC
10070 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
10080 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20  rg, flags).**   
10090 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
100a0 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
100b0 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
100c0 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
100d0 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63  e.**     that ac
100e0 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
100f0 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c  ents and is impl
10100 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c  emented by a cal
10110 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75  l to C.**     fu
10120 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e  nction likeFunc.
10130 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69   Argument pArg i
10140 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
10150 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a  d *) and made.**
10160 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61       available a
10170 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75  s the function u
10180 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
10190 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20  3_user_data()). 
101a0 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44  The.**     FuncD
101b0 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c  ef.flags variabl
101c0 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
101d0 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
101e0 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20  the flags.**    
101f0 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23   parameter..*/.#
10200 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28  define FUNCTION(
10210 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10220 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
10230 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10240 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10250 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10260 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10270 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10280 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
10290 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
102a0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
102b0 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f  #define VFUNCTIO
102c0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
102d0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
102e0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
102f0 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10300 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10310 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
10320 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10330 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
10340 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10350 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a  fine DFUNCTION(z
10360 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10370 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10380 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10390 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
103a0 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20 30  ITE_UTF8, \.   0
103b0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
103c0 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
103d0 66 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a  fine PURE_DATE(z
103e0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
103f0 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
10400 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10410 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
10420 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f  ITE_UTF8|SQLITE_
10430 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c  FUNC_CONSTANT, \
10440 0a 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69  .   (void*)&sqli
10450 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46  te3Config, 0, xF
10460 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
10470 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55  {0} }.#define FU
10480 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e  NCTION2(zName, n
10490 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
104a0 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67  xFunc, extraFlag
104b0 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c  s) \.  {nArg,SQL
104c0 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
104d0 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
104e0 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
104f0 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
10500 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f  ags,\.   SQLITE_
10510 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10520 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
10530 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
10540 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
10550 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
10560 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
10570 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
10580 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
10590 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
105a0 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
105b0 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
105c0 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
105d0 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e  #zName, }.#defin
105e0 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65  e LIKEFUNC(zName
105f0 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61  , nArg, arg, fla
10600 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
10610 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10620 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
10630 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69  flags, \.   (voi
10640 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65  d *)arg, 0, like
10650 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
10660 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41   {0} }.#define A
10670 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
10680 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
10690 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a  Step, xFinal) \.
106a0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
106b0 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
106c0 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
106d0 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
106e0 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
106f0 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
10700 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
10710 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
10720 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
10730 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
10740 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
10750 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10760 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
10770 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10780 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
10790 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
107a0 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
107b0 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20  ,xFinal,#zName, 
107c0 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20  {0}}../*.** All 
107d0 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e  current savepoin
107e0 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
107f0 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73   a linked list s
10800 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71  tarting at.** sq
10810 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
10820 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
10830 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ent in the list 
10840 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  is the most rece
10850 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73  ntly.** opened s
10860 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f  avepoint. Savepo
10870 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74  ints are added t
10880 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68  o the list by th
10890 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76  e vdbe.** OP_Sav
108a0 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
108b0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61  on..*/.struct Sa
108c0 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72  vepoint {.  char
108d0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
108e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108f0 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d  /* Savepoint nam
10900 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  e (nul-terminate
10910 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  d) */.  i64 nDef
10920 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
10930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
10940 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
10950 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20  d fk violations 
10960 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
10970 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
10980 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10990 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69  er of deferred i
109a0 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65  mm fk. */.  Save
109b0 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
109c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109d0 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
109e0 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
109f0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
10a00 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
10a10 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
10a20 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
10a30 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
10a40 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
10a50 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
10a60 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
10a70 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
10a80 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
10a90 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
10aa0 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
10ab0 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
10ac0 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
10ad0 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
10ae0 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
10af0 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
10b00 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
10b10 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
10b20 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
10b30 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
10b40 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
10b50 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
10b60 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
10b70 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
10b80 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
10b90 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
10ba0 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
10bb0 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
10bc0 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
10bd0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
10be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bf0 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
10c00 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
10c10 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
10c20 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
10c30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
10c40 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
10c50 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
10c60 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
10c70 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
10c80 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
10c90 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
10ca0 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  ction */.  Table
10cb0 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20   *pEpoTab;      
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cd0 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62  /* Eponymous tab
10ce0 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75  le for this modu
10cf0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
10d00 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
10d10 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
10d20 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
10d30 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
10d40 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
10d50 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
10d60 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
10d70 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
10d80 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
10d90 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74   column, \000, t
10da0 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a  hen the type */.
10db0 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20    Expr *pDflt;  
10dc0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61     /* Default va
10dd0 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
10de0 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  mn */.  char *zC
10df0 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c  oll;     /* Coll
10e00 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
10e10 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68   If NULL, use th
10e20 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  e default */.  u
10e30 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20  8 notNull;      
10e40 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66  /* An OE_ code f
10e50 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f  or handling a NO
10e60 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
10e70 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  t */.  char affi
10e80 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  nity;   /* One o
10e90 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
10ea0 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20  _... values */. 
10eb0 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20   u8 szEst;      
10ec0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
10ed0 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20  ize of value in 
10ee0 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a  this column. siz
10ef0 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20  eof(INT)==1 */. 
10f00 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20   u8 colFlags;   
10f10 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f    /* Boolean pro
10f20 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f  perties.  See CO
10f30 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62  LFLAG_ defines b
10f40 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  elow */.};../* A
10f50 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
10f60 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67  r Column.colFlag
10f70 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s:.*/.#define CO
10f80 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30  LFLAG_PRIMKEY  0
10f90 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75  x0001    /* Colu
10fa0 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  mn is part of th
10fb0 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
10fc0 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
10fd0 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32  _HIDDEN   0x0002
10fe0 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20      /* A hidden 
10ff0 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74  column in a virt
11000 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ual table */.#de
11010 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53  fine COLFLAG_HAS
11020 54 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20  TYPE  0x0004    
11030 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c  /* Type name fol
11040 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  lows column name
11050 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
11060 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 30 78 30  LAG_UNIQUE   0x0
11070 30 30 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  008    /* Column
11080 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20 22 55   def contains "U
11090 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22 20 2a  NIQUE" or "PK" *
110a0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
110b0 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78 30 30  G_SORTERREF 0x00
110c0 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f 72 74  10   /* Use sort
110d0 65 72 2d 72 65 66 73 20 77 69 74 68 20 74 68 69  er-refs with thi
110e0 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a  s column */../*.
110f0 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20  ** A "Collating 
11100 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66  Sequence" is def
11110 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
11120 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
11130 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
11140 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c  e. Conceptually,
11150 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71   a collating seq
11160 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f  uence consists o
11170 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20  f a name and.** 
11180 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75  a comparison rou
11190 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65  tine that define
111a0 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  s the order of t
111b0 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a  hat sequence..**
111c0 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78  .** If CollSeq.x
111d0 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20  Cmp is NULL, it 
111e0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  means that the.*
111f0 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
11200 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65  ence is undefine
11210 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c  d.  Indices buil
11220 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65  t on an undefine
11230 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  d.** collating s
11240 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20  equence may not 
11250 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74  be read or writt
11260 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  en..*/.struct Co
11270 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a  llSeq {.  char *
11280 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
11290 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
112a0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
112b0 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64  e, UTF-8 encoded
112c0 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
112d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
112e0 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e  ext encoding han
112f0 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a  dled by xCmp() *
11300 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b  /.  void *pUser;
11310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
11320 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
11330 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  Cmp() */.  int (
11340 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74  *xCmp)(void*,int
11350 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
11360 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29  nt, const void*)
11370 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  ;.  void (*xDel)
11380 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73  (void*);  /* Des
11390 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65  tructor for pUse
113a0 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
113b0 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20   sort order can 
113c0 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72  be either ASC or
113d0 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e   DESC..*/.#defin
113e0 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20  e SQLITE_SO_ASC 
113f0 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74        0  /* Sort
11400 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
11410 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
11420 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20  QLITE_SO_DESC   
11430 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e     1  /* Sort in
11440 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
11450 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
11460 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20  TE_SO_UNDEFINED 
11470 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72  -1 /* No sort or
11480 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f  der specified */
11490 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
114a0 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
114b0 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
114c0 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
114d0 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
114e0 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
114f0 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
11500 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
11510 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
11520 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
11530 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
11540 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
11550 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
11560 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
11570 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a  consecutively..*
11580 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
11590 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
115a0 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
115b0 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61 74   with 'A'.  That
115c0 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
115d0 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
115e0 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
115f0 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
11600 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
11610 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
11620 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
11630 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
11640 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
11650 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
11660 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
11670 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
11680 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
11690 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
116a0 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
116b0 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74  mparison.  And t
116c0 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20  he BLOB type is 
116d0 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  first..*/.#defin
116e0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f  e SQLITE_AFF_BLO
116f0 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e  B     'A'.#defin
11700 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
11710 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e  T     'B'.#defin
11720 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  e SQLITE_AFF_NUM
11730 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e  ERIC  'C'.#defin
11740 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  e SQLITE_AFF_INT
11750 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e  EGER  'D'.#defin
11760 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  e SQLITE_AFF_REA
11770 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69  L     'E'..#defi
11780 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
11790 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
117a0 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
117b0 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
117c0 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
117d0 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
117e0 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
117f0 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
11800 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
11810 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ue..*/.#define S
11820 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20  QLITE_AFF_MASK  
11830 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41     0x47../*.** A
11840 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61  dditional bit va
11850 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  lues that can be
11860 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66   ORed with an af
11870 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a  finity without.*
11880 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61  * changing the a
11890 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54  ffinity..**.** T
118a0 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  he SQLITE_NOTNUL
118b0 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62  L flag is a comb
118c0 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45  ination of NULLE
118d0 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c  Q and JUMPIFNULL
118e0 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61  ..** It causes a
118f0 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69  n assert() to fi
11900 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  re if either ope
11910 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72  rand to a compar
11920 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72  ison.** operator
11930 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73   is NULL.  It is
11940 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69   added to certai
11950 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  n comparison ope
11960 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f  rators to.** pro
11970 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ve that the oper
11980 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20  ands are always 
11990 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65  NOT NULL..*/.#de
119a0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50  fine SQLITE_KEEP
119b0 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f  NULL     0x08  /
119c0 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f 72  * Used by vector
119d0 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65   == or <> */.#de
119e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
119f0 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f  IFNULL   0x10  /
11a00 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
11a10 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
11a20 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
11a30 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
11a40 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x20  /* Store 
11a50 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
11a60 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
11a70 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
11a80 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
11a90 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
11aa0 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
11ab0 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20  SQLITE_NOTNULL  
11ac0 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73      0x90  /* Ass
11ad0 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64  ert that operand
11ae0 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c  s are never NULL
11af0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
11b00 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
11b10 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
11b20 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
11b30 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
11b40 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
11b50 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  chema..**.** If 
11b60 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
11b70 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74  ema is shared, t
11b80 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65  hen there is one
11b90 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
11ba0 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66  s.** structure f
11bb0 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
11bc0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c   connection (sql
11bd0 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73  ite3*) that uses
11be0 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73   the shared.** s
11bf0 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62  chema. This is b
11c00 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61  ecause each data
11c10 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
11c20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e  requires its own
11c30 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61   unique.** insta
11c40 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  nce of the sqlit
11c50 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
11c60 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
11c70 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
11c80 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
11c90 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62  on. sqlite3_vtab
11ca0 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f  * handles can no
11cb0 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77  t be shared betw
11cc0 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  een.** database 
11cd0 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
11ce0 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
11cf0 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
11d00 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68   database.** sch
11d10 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
11d20 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
11d30 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
11d40 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
11d50 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
11d60 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
11d70 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
11d80 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
11d90 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
11da0 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
11db0 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
11dc0 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
11dd0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
11de0 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
11df0 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
11e00 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
11e10 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
11e20 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69  eal tables.** wi
11e30 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
11e40 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
11e50 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
11e60 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a  f the callers.**
11e70 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
11e80 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
11e90 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
11ea0 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
11eb0 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
11ec0 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f   as that used to
11ed0 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65   execute SQL ope
11ee0 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76  rations on the v
11ef0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
11f00 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f  .** All VTable o
11f10 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72  bjects that corr
11f20 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67  espond to a sing
11f30 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68  le table in a sh
11f40 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ared.** database
11f50 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74   schema are init
11f60 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ially stored in 
11f70 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f  a linked-list po
11f80 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74  inted to by.** t
11f90 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
11fa0 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
11fb0 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
11fc0 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65  nding Table obje
11fd0 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73  ct..** When an s
11fe0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
11ff0 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65   operation is re
12000 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73  quired to access
12010 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
12020 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68  table, it search
12030 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20  es the list for 
12040 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20  the VTable that 
12050 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
12060 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  he.** database c
12070 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20  onnection doing 
12080 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f  the preparing so
12090 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63   as to use the c
120a0 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65  orrect.** sqlite
120b0 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69  3_vtab* handle i
120c0 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  n the compiled q
120d0 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  uery..**.** When
120e0 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61   an in-memory Ta
120f0 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65  ble object is de
12100 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70  leted (for examp
12110 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73  le when the.** s
12120 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72  chema is being r
12130 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65  eloaded for some
12140 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54   reason), the VT
12150 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65  able objects are
12160 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20   not.** deleted 
12170 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
12180 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
12190 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
121a0 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61  t()ed.** immedia
121b0 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
121c0 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
121d0 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
121e0 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
121f0 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
12200 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
12210 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
12220 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
12230 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
12240 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
12250 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
12260 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
12270 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e  isconnected.** n
12280 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65  ext time a state
12290 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64  ment is prepared
122a0 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69   using said sqli
122b0 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f  te3*. This is do
122c0 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64  ne.** to avoid d
122d0 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69  eadlock issues i
122e0 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
122f0 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  e sqlite3.mutex 
12300 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65  mutexes..** Refe
12310 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62  r to comments ab
12320 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c  ove function sql
12330 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
12340 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  st() for an.** e
12350 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f  xplanation as to
12360 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20   why it is safe 
12370 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20  to add an entry 
12380 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44  to an sqlite3.pD
12390 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73  isconnect.** lis
123a0 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e  t without holdin
123b0 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
123c0 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ing sqlite3.mute
123d0 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  x mutex..**.** T
123e0 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62  he memory for ob
123f0 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79  jects of this ty
12400 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c  pe is always all
12410 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c  ocated by.** sql
12420 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20  ite3DbMalloc(), 
12430 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  using the connec
12440 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72  tion handle stor
12450 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20  ed in VTable.db 
12460 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  as.** the first 
12470 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
12480 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
12490 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
124a0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
124b0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
124c0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
124d0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
124e0 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
124f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
12500 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
12510 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
12520 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
12530 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
12540 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
12550 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
12560 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
12570 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12580 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
12590 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
125a0 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
125b0 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
125c0 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
125d0 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
125e0 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
125f0 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
12600 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
12610 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
12620 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
12630 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
12640 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
12650 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
12660 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
12670 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  * The schema for
12680 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   each SQL table 
12690 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72  and view is repr
126a0 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
126b0 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61  y.** by an insta
126c0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
126d0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
126e0 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
126f0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
12700 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
12710 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
12720 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
12730 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
12740 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
12750 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
12760 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
12770 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
12780 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
12790 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
127a0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
127b0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
127c0 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
127d0 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
127e0 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
127f0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
12800 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
12810 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
12820 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
12830 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
12840 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
12850 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
12860 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
12870 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
12880 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  umn */.  ExprLis
12890 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
128a0 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
128b0 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20  raints */.      
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75   /*   ... also u
128e0 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61  sed as column na
128f0 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45  me list in a VIE
12900 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  W */.  int tnum;
12910 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
12920 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66  oot BTree page f
12930 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  or this table */
12940 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20  .  u32 nTabRef; 
12950 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12960 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
12970 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
12980 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20   u32 tabFlags;  
12990 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
129a0 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
129b0 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
129c0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
129d0 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
129e0 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
129f0 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36  e rowid */.  i16
12a00 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
12a10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12a20 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
12a30 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
12a40 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f   nRowLogEst;   /
12a50 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
12a60 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
12a70 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
12a80 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
12a90 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a  szTabRow;     /*
12aa0 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
12ab0 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  of each table ro
12ac0 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69  w in bytes */.#i
12ad0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
12ae0 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f  LE_COSTMULT.  Lo
12af0 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20  gEst costMult;  
12b00 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69     /* Cost multi
12b10 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20  plier for using 
12b20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65  this table */.#e
12b30 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e  ndif.  u8 keyCon
12b40 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  f;          /* W
12b50 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73  hat to do in cas
12b60 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20  e of uniqueness 
12b70 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65  conflict on iPKe
12b80 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
12b90 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
12ba0 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c  BLE.  int addCol
12bb0 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66  Offset;    /* Of
12bc0 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54  fset in CREATE T
12bd0 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64  ABLE stmt to add
12be0 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f   a new column */
12bf0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
12c00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
12c10 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
12c20 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20  ModuleArg;      
12c30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
12c40 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
12c50 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  dule */.  char *
12c60 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f  *azModuleArg;  /
12c70 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73  * 0: module 1: s
12c80 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61  chema 2: vtab na
12c90 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f  me 3...: args */
12ca0 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
12cb0 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  le;     /* List 
12cc0 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  of VTable object
12cd0 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  s. */.#endif.  T
12ce0 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
12cf0 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74  ;   /* List of t
12d00 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69  riggers stored i
12d10 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53  n pSchema */.  S
12d20 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
12d30 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68      /* Schema th
12d40 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73  at contains this
12d50 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c   table */.  Tabl
12d60 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20  e *pNextZombie; 
12d70 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20   /* Next on the 
12d80 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62  Parse.pZombieTab
12d90 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
12da0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
12db0 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46  s for Table.tabF
12dc0 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f  lags..**.** TF_O
12dd0 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73  OOHidden applies
12de0 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69   to tables or vi
12df0 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69 64  ew that have hid
12e00 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  den columns that
12e10 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64   are.** followed
12e20 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63   by non-hidden c
12e30 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65  olumns.  Example
12e40 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55  :  "CREATE VIRTU
12e50 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47  AL TABLE x USING
12e60 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44  .** vtab1(a HIDD
12e70 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65  EN, b);".  Since
12e80 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69   "b" is a non-hi
12e90 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20  dden column but 
12ea0 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a  "a" is hidden,.*
12eb0 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64  * the TF_OOOHidd
12ec0 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75  en attribute wou
12ed0 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73  ld apply in this
12ee0 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62   case.  Such tab
12ef0 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73  les require.** s
12f00 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
12f10 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72  during INSERT pr
12f20 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65  ocessing..*/.#de
12f30 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
12f40 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
12f50 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73    /* Read-only s
12f60 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23  ystem table */.#
12f70 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65  define TF_Epheme
12f80 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30 32  ral       0x0002
12f90 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65      /* An epheme
12fa0 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ral table */.#de
12fb0 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61  fine TF_HasPrima
12fc0 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20 20  ryKey   0x0004  
12fd0 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
12fe0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
12ff0 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
13000 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30  ncrement   0x000
13010 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20  8    /* Integer 
13020 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
13030 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  utoincrement */.
13040 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74  #define TF_HasSt
13050 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30 31  at1        0x001
13060 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45  0    /* nRowLogE
13070 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69  st set from sqli
13080 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66  te_stat1 */.#def
13090 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  ine TF_WithoutRo
130a0 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20 20  wid    0x0020   
130b0 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50   /* No rowid.  P
130c0 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
130d0 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  e key */.#define
130e0 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
130f0 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a  id  0x0040    /*
13100 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65   No user-visible
13110 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20   "rowid" column 
13120 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f  */.#define TF_OO
13130 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78  OHidden       0x
13140 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f  0080    /* Out-o
13150 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63  f-Order hidden c
13160 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  olumns */.#defin
13170 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20 20  e TF_StatsUsed  
13180 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20 2f       0x0100    /
13190 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  * Query planner 
131a0 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74  decisions affect
131b0 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20 20  ed by.          
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e             ** In
131e0 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b  dex.aiRowLogEst[
131f0 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66  ] values */.#def
13200 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c  ine TF_HasNotNul
13210 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20 20  l      0x0200   
13220 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54   /* Contains NOT
13230 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
13240 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  s */../*.** Test
13250 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20   to see whether 
13260 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69  or not a table i
13270 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
13280 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64  e.  This is.** d
13290 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73  one as a macro s
132a0 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62  o that it will b
132b0 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20  e optimized out 
132c0 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20  when virtual.** 
132d0 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73  table support is
132e0 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
132f0 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e  e build..*/.#ifn
13300 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13310 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
13320 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
13330 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6e  (X)      ((X)->n
13340 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73 65  ModuleArg).#else
13350 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
13360 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23  tual(X)      0.#
13370 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
13380 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
13390 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   if a column is 
133a0 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e  hidden.  IsOrdin
133b0 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
133c0 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ).** only works 
133d0 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20  for non-virtual 
133e0 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79  tables (ordinary
133f0 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77   tables and view
13400 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77  s) and is.** alw
13410 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73  ays false unless
13420 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
13430 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73  IDDEN_COLUMNS is
13440 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a   defined.  The.*
13450 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  * IsHiddenColumn
13460 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65  () macro is gene
13470 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a  ral purpose..*/.
13480 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
13490 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
134a0 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66  _COLUMNS).#  def
134b0 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
134c0 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28  mn(X)         ((
134d0 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
134e0 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
134f0 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
13500 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
13510 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63  lumn(X) (((X)->c
13520 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
13530 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65  G_HIDDEN)!=0).#e
13540 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  lif !defined(SQL
13550 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
13560 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65  TABLE).#  define
13570 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
13580 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
13590 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
135a0 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
135b0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
135c0 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
135d0 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20  n(X) 0.#else.#  
135e0 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
135f0 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
13600 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f   0.#  define IsO
13610 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
13620 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  umn(X) 0.#endif.
13630 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61  ../* Does the ta
13640 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64  ble have a rowid
13650 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52   */.#define HasR
13660 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58  owid(X)     (((X
13670 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
13680 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d  _WithoutRowid)==
13690 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62  0).#define Visib
136a0 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29  leRowid(X) (((X)
136b0 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
136c0 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d  NoVisibleRowid)=
136d0 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  =0)../*.** Each 
136e0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
136f0 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73  traint is an ins
13700 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
13710 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
13720 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67  ..**.** A foreig
13730 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61  n key is associa
13740 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62  ted with two tab
13750 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22  les.  The "from"
13760 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65   table is.** the
13770 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
13780 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e  ains the REFEREN
13790 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20  CES clause that 
137a0 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65  creates the fore
137b0 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65  ign.** key.  The
137c0 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74   "to" table is t
137d0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
137e0 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45   named in the RE
137f0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e  FERENCES clause.
13800 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69  .** Consider thi
13810 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a  s example:.**.**
13820 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
13830 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20  E ex1(.**       
13840 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
13850 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20  Y KEY,.**       
13860 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52  b INTEGER CONSTR
13870 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e  AINT fk1 REFEREN
13880 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20  CES ex2(x).**   
13890 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66    );.**.** For f
138a0 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22  oreign key "fk1"
138b0 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  , the from-table
138c0 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68   is "ex1" and th
138d0 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65  e to-table is "e
138e0 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65  x2"..** Equivale
138f0 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20  nt names:.**.** 
13900 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d      from-table =
13910 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a  = child-table.**
13920 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20         to-table 
13930 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a  == parent-table.
13940 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52  **.** Each REFER
13950 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e  ENCES clause gen
13960 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e  erates an instan
13970 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
13980 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
13990 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68   which is attach
139a0 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74  ed to the from-t
139b0 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61  able.  The to-ta
139c0 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69  ble need not exi
139d0 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66  st when.** the f
139e0 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65  rom-table is cre
139f0 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74  ated.  The exist
13a00 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74  ence of the to-t
13a10 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63  able is not chec
13a20 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c  ked..**.** The l
13a30 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e  ist of all paren
13a40 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62  ts for child Tab
13a50 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20  le X is held at 
13a60 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41  X.pFKey..**.** A
13a70 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69   list of all chi
13a80 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c  ldren for a tabl
13a90 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68  e named Z (which
13aa0 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20   might not even 
13ab0 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c  exist).** is hel
13ac0 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79  d in Schema.fkey
13ad0 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68  Hash with a hash
13ae0 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74   key of Z..*/.st
13af0 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61  ruct FKey {.  Ta
13b00 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20  ble *pFrom;     
13b10 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e  /* Table contain
13b20 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43  ing the REFERENC
13b30 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20  ES clause (aka: 
13b40 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79  Child) */.  FKey
13b50 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a   *pNextFrom;  /*
13b60 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20   Next FKey with 
13b70 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f  the same in pFro
13b80 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f  m. Next parent o
13b90 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61  f pFrom */.  cha
13ba0 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f  r *zTo;        /
13bb0 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20  * Name of table 
13bc0 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69  that the key poi
13bd0 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72  nts to (aka: Par
13be0 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ent) */.  FKey *
13bf0 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e  pNextTo;    /* N
13c00 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d  ext with the sam
13c10 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c  e zTo. Next chil
13c20 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46  d of zTo. */.  F
13c30 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20  Key *pPrevTo;   
13c40 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74   /* Previous wit
13c50 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a  h the same zTo *
13c60 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
13c70 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13c80 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
13c90 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
13ca0 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
13cb0 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
13cc0 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  red;       /* Tr
13cd0 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
13ce0 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66   checking is def
13cf0 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49  erred till COMMI
13d00 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f  T */.  u8 aActio
13d10 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  n[2];        /* 
13d20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e  ON DELETE and ON
13d30 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c   UPDATE actions,
13d40 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f   respectively */
13d50 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72  .  Trigger *apTr
13d60 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67  igger[2];/* Trig
13d70 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e  gers for aAction
13d80 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  [] actions */.  
13d90 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b  struct sColMap {
13da0 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
13db0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70   of columns in p
13dc0 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  From to columns 
13dd0 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e  in zTo */.    in
13de0 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  t iFrom;        
13df0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
13e00 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20  column in pFrom 
13e10 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f  */.    char *zCo
13e20 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
13e30 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  Name of column i
13e40 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20  n zTo.  If NULL 
13e50 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  use PRIMARY KEY 
13e60 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20  */.  } aCol[1]; 
13e70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
13e80 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
13e90 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73   of nCol columns
13ea0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51   */.};../*.** SQ
13eb0 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61  Lite supports ma
13ec0 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79  ny different way
13ed0 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63  s to resolve a c
13ee0 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
13ef0 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72  or.  ROLLBACK pr
13f00 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
13f10 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hat a constraint
13f20 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61   violation.** ca
13f30 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69  uses the operati
13f40 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f  on in process to
13f50 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68   fail and for th
13f60 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
13f70 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72  ction.** to be r
13f80 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f  olled back.  ABO
13f90 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  RT processing me
13fa0 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ans the operatio
13fb0 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20  n in process.** 
13fc0 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72  fails and any pr
13fd0 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ior changes from
13fe0 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74   that one operat
13ff0 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f  ion are backed o
14000 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74  ut,.** but the t
14010 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
14020 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  t rolled back.  
14030 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20  FAIL processing 
14040 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68  means that.** th
14050 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
14060 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e  rogress stops an
14070 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  d returns an err
14080 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72  or code.  But pr
14090 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64  ior.** changes d
140a0 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f  ue to the same o
140b0 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74  peration are not
140c0 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20   backed out and 
140d0 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f  no rollback.** o
140e0 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d  ccurs.  IGNORE m
140f0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61  eans that the pa
14100 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61  rticular row tha
14110 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e  t caused the con
14120 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
14130 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64   is not inserted
14140 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72   or updated.  Pr
14150 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
14160 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a  es and no error.
14170 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  ** is returned. 
14180 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74   REPLACE means t
14190 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  hat preexisting 
141a0 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68  database rows th
141b0 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55  at caused.** a U
141c0 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
141d0 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72   violation are r
141e0 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74  emoved so that t
141f0 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72  he new insert or
14200 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70  .** update can p
14210 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73  roceed.  Process
14220 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
14230 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65  d no error is re
14240 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45  ported..**.** RE
14250 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c  STRICT, SETNULL,
14260 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74   and CASCADE act
14270 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20  ions apply only 
14280 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e  to foreign keys.
14290 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20  .** RESTRICT is 
142a0 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52  the same as ABOR
142b0 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20  T for IMMEDIATE 
142c0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64  foreign keys and
142d0 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20   the.** same as 
142e0 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46  ROLLBACK for DEF
142f0 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54  ERRED keys.  SET
14300 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20  NULL means that 
14310 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
14320 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ey is set to NUL
14330 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e  L.  CASCADE mean
14340 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20  s that a DELETE 
14350 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65  or UPDATE of the
14360 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74  .** referenced t
14370 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70  able row is prop
14380 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20  agated into the 
14390 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74  row that holds t
143a0 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65  he.** foreign ke
143b0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  y..**.** The fol
143c0 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20  lowing symbolic 
143d0 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20  values are used 
143e0 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20  to record which 
143f0 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f  type.** of actio
14400 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64  n to take..*/.#d
14410 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20  efine OE_None   
14420 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69    0   /* There i
14430 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20  s no constraint 
14440 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66  to check */.#def
14450 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  ine OE_Rollback 
14460 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20  1   /* Fail the 
14470 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f  operation and ro
14480 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
14490 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
144a0 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20  e OE_Abort    2 
144b0 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68    /* Back out ch
144c0 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20  anges but do no 
144d0 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63  rollback transac
144e0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
144f0 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20  OE_Fail     3   
14500 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72  /* Stop the oper
14510 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20  ation but leave 
14520 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65  all prior change
14530 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
14540 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20  Ignore   4   /* 
14550 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72  Ignore the error
14560 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20  . Do not do the 
14570 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
14580 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
14590 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44  eplace  5   /* D
145a0 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72  elete existing r
145b0 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49  ecord, then do I
145c0 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
145d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 55 70  */.#define OE_Up
145e0 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20 50 72  date   6   /* Pr
145f0 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20 55 50  ocess as a DO UP
14600 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73 65 72  DATE in an upser
14610 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
14620 52 65 73 74 72 69 63 74 20 37 20 20 20 2f 2a 20  Restrict 7   /* 
14630 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d  OE_Abort for IMM
14640 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62  EDIATE, OE_Rollb
14650 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ack for DEFERRED
14660 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
14670 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a 20 53  etNull  8   /* S
14680 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
14690 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  ey value to NULL
146a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
146b0 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a 20 53  etDflt  9   /* S
146c0 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
146d0 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  ey value to its 
146e0 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69  default */.#defi
146f0 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 31  ne OE_Cascade  1
14700 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68  0  /* Cascade th
14710 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
14720 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20  fine OE_Default 
14730 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61 74 65   11  /* Do whate
14740 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  ver the default 
14750 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f  action is */.../
14760 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
14770 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
14780 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  g structure is p
14790 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72  assed as the fir
147a0 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74  st.** argument t
147b0 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79  o sqlite3VdbeKey
147c0 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75  Compare and is u
147d0 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74  sed to control t
147e0 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
147f0 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65   of the two inde
14800 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  x keys..**.** No
14810 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64  te that aSortOrd
14820 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d  er[] and aColl[]
14830 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73   have nField+1 s
14840 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20  lots.  There.** 
14850 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73  are nField slots
14860 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73   for the columns
14870 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65   of an index the
14880 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74  n one extra slot
14890 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69  .** for the rowi
148a0 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  d at the end..*/
148b0 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20  .struct KeyInfo 
148c0 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20  {.  u32 nRef;   
148d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
148e0 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20  r of references 
148f0 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20  to this KeyInfo 
14900 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65  object */.  u8 e
14910 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
14920 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
14930 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51   - one of the SQ
14940 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73  LITE_UTF* values
14950 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46 69   */.  u16 nKeyFi
14960 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  eld;      /* Num
14970 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d  ber of key colum
14980 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ns in the index 
14990 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69 65  */.  u16 nAllFie
149a0 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74 61  ld;      /* Tota
149b0 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75  l columns, inclu
149c0 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f 74  ding key plus ot
149d0 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  hers */.  sqlite
149e0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
149f0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
14a00 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  nnection */.  u8
14a10 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
14a20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20    /* Sort order 
14a30 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  for each column.
14a40 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61   */.  CollSeq *a
14a50 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c  Coll[1];  /* Col
14a60 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
14a70 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66  for each term of
14a80 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a   the key */.};..
14a90 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63  /*.** This objec
14aa0 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64  t holds a record
14ab0 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20   which has been 
14ac0 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
14ad0 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69  individual.** fi
14ae0 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75  elds, for the pu
14af0 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20  rposes of doing 
14b00 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a  a comparison..**
14b10 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
14b20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
14b30 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
14b40 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
14b50 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
14b60 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
14b70 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
14b80 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
14b90 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
14ba0 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
14bb0 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
14bc0 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
14bd0 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
14be0 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
14bf0 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
14c00 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
14c10 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a  sembled by the.*
14c20 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  * OP_Column opco
14c30 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73  de..**.** An ins
14c40 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
14c50 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61  ject serves as a
14c60 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67   "key" for doing
14c70 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20   a search on.** 
14c80 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e  an index b+tree.
14c90 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65   The goal of the
14ca0 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69   search is to fi
14cb0 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  nd the entry tha
14cc0 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74  t.** is closed t
14cd0 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69  o the key descri
14ce0 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65  bed by this obje
14cf0 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74  ct.  This object
14d00 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a   might hold.** j
14d10 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  ust a prefix of 
14d20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75  the key.  The nu
14d30 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
14d40 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b  s given by.** pK
14d50 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a  eyInfo->nField..
14d60 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
14d70 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74   r2 fields are t
14d80 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74  he values to ret
14d90 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20  urn if this key 
14da0 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  is less than.** 
14db0 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
14dc0 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72  a key in the btr
14dd0 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ee, respectively
14de0 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72  .  These are nor
14df0 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20  mally.** -1 and 
14e00 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  +1 respectively,
14e10 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e   but might be in
14e20 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64  verted to +1 and
14e30 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65   -1 if the b-tre
14e40 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20  e.** is in DESC 
14e50 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  order..**.** The
14e60 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20   key comparison 
14e70 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c  functions actual
14e80 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  ly return defaul
14e90 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66  t_rc when they f
14ea0 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73  ind.** an equals
14eb0 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65   comparison.  de
14ec0 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
14ed0 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49  -1, 0, or +1.  I
14ee0 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d  f there are.** m
14ef0 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20  ultiple entries 
14f00 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69  in the b-tree wi
14f10 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20  th the same key 
14f20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69  (when only looki
14f30 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72  ng.** at the fir
14f40 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  st pKeyInfo->nFi
14f50 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61  elds,) then defa
14f60 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65  ult_rc can be se
14f70 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61  t to -1 to.** ca
14f80 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74  use the search t
14f90 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20  o find the last 
14fa0 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20  match, or +1 to 
14fb0 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
14fc0 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20   to.** find the 
14fd0 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a  first match..**.
14fe0 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61  ** The key compa
14ff0 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  rison functions 
15000 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20  will set eqSeen 
15010 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20  to true if they 
15020 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20  ever.** get and 
15030 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68  equal results wh
15040 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69  en comparing thi
15050 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61  s structure to a
15060 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a   b-tree record..
15070 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f  ** When default_
15080 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63  rc!=0, the searc
15090 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f  h might end up o
150a0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d  n the record imm
150b0 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f  ediately.** befo
150c0 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74  re the first mat
150d0 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c  ch or immediatel
150e0 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74  y after the last
150f0 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20   match.  The.** 
15100 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c  eqSeen field wil
15110 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68  l indicate wheth
15120 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61  er or not an exa
15130 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20  ct match exists 
15140 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65  in the.** b-tree
15150 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
15160 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
15170 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
15180 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
15190 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
151a0 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
151b0 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20  Mem *aMem;      
151c0 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f      /* Values */
151d0 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
151e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
151f0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
15200 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64  pMem[] */.  i8 d
15210 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20  efault_rc;      
15220 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
15230 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65  sult if keys are
15240 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65   equal */.  u8 e
15250 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
15260 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65  /* Error detecte
15270 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70  d by xRecordComp
15280 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20  are (CORRUPT or 
15290 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72  NOMEM) */.  i8 r
152a0 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1;              
152b0 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
152c0 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68 73  rn if (lhs < rhs
152d0 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20  ) */.  i8 r2;   
152e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
152f0 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
15300 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a   (lhs > rhs) */.
15310 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20    u8 eqSeen;    
15320 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
15330 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d   an equality com
15340 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e  parison has been
15350 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a   seen */.};.../*
15360 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64  .** Each SQL ind
15370 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ex is represente
15380 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61  d in memory by a
15390 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
153a0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
153b0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
153c0 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  The columns of t
153d0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72  he table that ar
153e0 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  e to be indexed 
153f0 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a  are described.**
15400 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e   by the aiColumn
15410 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73  [] field of this
15420 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
15430 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73   example, suppos
15440 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65  e.** we have the
15450 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65   following table
15460 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a   and index:.**.*
15470 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
15480 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63  LE Ex1(c1 int, c
15490 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b  2 int, c3 text);
154a0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49  .**     CREATE I
154b0 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28  NDEX Ex2 ON Ex1(
154c0 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e  c3,c1);.**.** In
154d0 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63   the Table struc
154e0 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20  ture describing 
154f0 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63  Ex1, nCol==3 bec
15500 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a  ause there are.*
15510 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20  * three columns 
15520 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
15530 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75  n the Index stru
15540 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
15550 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e  .** Ex2, nColumn
15560 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74  ==2 since 2 of t
15570 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  he 3 columns of 
15580 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e  Ex1 are indexed.
15590 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
155a0 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c   aiColumn is {2,
155b0 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30   0}.  aiColumn[0
155c0 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65  ]==2 because the
155d0 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  .** first column
155e0 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
155f0 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c3) has an index
15600 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f   of 2 in Ex1.aCo
15610 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f  l[]..** The seco
15620 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  nd column to be 
15630 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73  indexed (c1) has
15640 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69   an index of 0 i
15650 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c  n.** Ex1.aCol[],
15660 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c   hence Ex2.aiCol
15670 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a  umn[1]==0..**.**
15680 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72   The Index.onErr
15690 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69  or field determi
156a0 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
156b0 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63  ot the indexed c
156c0 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62  olumns.** must b
156d0 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61  e unique and wha
156e0 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20  t to do if they 
156f0 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49  are not.  When I
15700 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f  ndex.onError=OE_
15710 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e  None,.** it mean
15720 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20  s this is not a 
15730 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f  unique index.  O
15740 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61  therwise it is a
15750 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a   unique index.**
15760 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f   and the value o
15770 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  f Index.onError 
15780 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69  indicate the whi
15790 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ch conflict reso
157a0 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69  lution.** algori
157b0 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68  thm to employ wh
157c0 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70  enever an attemp
157d0 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73  t is made to ins
157e0 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65  ert a non-unique
157f0 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a  .** element..**.
15800 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67  ** While parsing
15810 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
15820 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  or CREATE INDEX 
15830 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64  statement in ord
15840 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74  er to.** generat
15850 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20  e VDBE code (as 
15860 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69  opposed to parsi
15870 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d  ng one read from
15880 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   an sqlite_maste
15890 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61  r.** table as pa
158a0 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e  rt of parsing an
158b0 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
158c0 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e  se schema), tran
158d0 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a  sient instances.
158e0 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
158f0 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61  ture may be crea
15900 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ted. In this cas
15910 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d  e the Index.tnum
15920 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20   variable is.** 
15930 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
15940 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56  e address of a V
15950 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  DBE instruction,
15960 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20   not a database 
15970 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28  page.** number (
15980 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20  it cannot - the 
15990 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73  database page is
159a0 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75   not allocated u
159b0 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a  ntil the VDBE.**
159c0 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63   program is exec
159d0 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65  uted). See conve
159e0 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64  rtToWithoutRowid
159f0 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61  Table() for deta
15a00 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ils..*/.struct I
15a10 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
15a20 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
15a30 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
15a40 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36  s index */.  i16
15a50 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20   *aiColumn;     
15a60 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63        /* Which c
15a70 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
15a80 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
15a90 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f  1st is 0 */.  Lo
15aa0 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73  gEst *aiRowLogEs
15ab0 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41  t;     /* From A
15ac0 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
15ad0 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
15ae0 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
15af0 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
15b00 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
15b10 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
15b20 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72  ndexed */.  char
15b30 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
15b40 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
15b50 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
15b60 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
15b70 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
15b80 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
15b90 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
15ba0 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
15bb0 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
15bc0 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
15bd0 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
15be0 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
15bf0 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  ining this index
15c00 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
15c10 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
15c20 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * for each colum
15c30 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46  n: True==DESC, F
15c40 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63  alse==ASC */.  c
15c50 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f  onst char **azCo
15c60 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ll;     /* Array
15c70 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
15c80 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
15c90 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
15ca0 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b   *pPartIdxWhere;
15cb0 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
15cc0 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
15cd0 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78   indices */.  Ex
15ce0 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72  prList *aColExpr
15cf0 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  ;      /* Column
15d00 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
15d10 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
15d20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42             /* DB
15d30 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
15d40 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
15d50 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  dex */.  LogEst 
15d60 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20  szIdxRow;       
15d70 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61    /* Estimated a
15d80 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20  verage row size 
15d90 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31  in bytes */.  u1
15da0 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20  6 nKeyCol;      
15db0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15dc0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d   of columns form
15dd0 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20  ing the key */. 
15de0 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   u16 nColumn;   
15df0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15e00 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ber of columns s
15e10 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64  tored in the ind
15e20 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72  ex */.  u8 onErr
15e30 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  or;             
15e40 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45   /* OE_Abort, OE
15e50 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c  _Ignore, OE_Repl
15e60 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20  ace, or OE_None 
15e70 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64  */.  unsigned id
15e80 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a  xType:2;      /*
15e90 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50   1==UNIQUE, 2==P
15ea0 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43  RIMARY KEY, 0==C
15eb0 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20  REATE INDEX */. 
15ec0 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64   unsigned bUnord
15ed0 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65  ered:1;   /* Use
15ee0 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20   this index for 
15ef0 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73  == or IN queries
15f00 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67   only */.  unsig
15f10 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a  ned uniqNotNull:
15f20 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55  1;  /* True if U
15f30 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
15f40 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d  LL for all colum
15f50 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ns */.  unsigned
15f60 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20   isResized:1;   
15f70 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69   /* True if resi
15f80 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20  zeIndexObject() 
15f90 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
15fa0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
15fb0 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a  Covering:1;   /*
15fc0 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73   True if this is
15fd0 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65   a covering inde
15fe0 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  x */.  unsigned 
15ff0 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20  noSkipScan:1;   
16000 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f  /* Do not try to
16010 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69   use skip-scan i
16020 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69  f true */.  unsi
16030 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b  gned hasStat1:1;
16040 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67       /* aiRowLog
16050 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20  Est values come 
16060 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
16070 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  1 */.  unsigned 
16080 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20 20  bNoQuery:1;     
16090 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74 68  /* Do not use th
160a0 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74 69  is index to opti
160b0 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f 0a  mize queries */.
160c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
160d0 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
160e0 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c  AT4.  int nSampl
160f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
16100 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  * Number of elem
16110 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b  ents in aSample[
16120 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70  ] */.  int nSamp
16130 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  leCol;          
16140 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78  /* Size of Index
16150 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e  Sample.anEq[] an
16160 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f  d so on */.  tRo
16170 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20  wcnt *aAvgEq;   
16180 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65        /* Average
16190 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20   nEq values for 
161a0 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d  keys not in aSam
161b0 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61  ple */.  IndexSa
161c0 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20  mple *aSample;  
161d0 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20    /* Samples of 
161e0 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65  the left-most ke
161f0 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  y */.  tRowcnt *
16200 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20  aiRowEst;       
16210 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
16220 69 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f  ic stat1 data fo
16230 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  r this index */.
16240 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73    tRowcnt nRowEs
16250 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f  t0;        /* No
16260 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75  n-logarithmic nu
16270 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
16280 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e  the index */.#en
16290 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c  dif.};../*.** Al
162a0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
162b0 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a   Index.idxType.*
162c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
162d0 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20  _IDXTYPE_APPDEF 
162e0 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61       0   /* Crea
162f0 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
16300 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
16310 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
16320 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20  _UNIQUE      1  
16330 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61   /* Implements a
16340 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
16350 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
16360 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
16370 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20  MARYKEY  2   /* 
16380 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  Is the PRIMARY K
16390 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
163a0 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74   */../* Return t
163b0 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
163c0 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  s a PRIMARY KEY 
163d0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
163e0 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64   IsPrimaryKeyInd
163f0 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78  ex(X)  ((X)->idx
16400 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58  Type==SQLITE_IDX
16410 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29  TYPE_PRIMARYKEY)
16420 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
16430 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
16440 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f   UNIQUE index */
16450 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75  .#define IsUniqu
16460 65 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28  eIndex(X)      (
16470 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45  (X)->onError!=OE
16480 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49  _None)../* The I
16490 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20  ndex.aiColumn[] 
164a0 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61  values are norma
164b0 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74  lly positive int
164c0 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68  eger.  But.** th
164d0 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67  ere are some neg
164e0 61 74 69 76 65 20 76 61 6c 75 65 73 20 74 68 61  ative values tha
164f0 74 20 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d  t have special m
16500 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69  eaning:.*/.#defi
16510 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20  ne XN_ROWID     
16520 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65  (-1)     /* Inde
16530 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68  xed column is th
16540 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  e rowid */.#defi
16550 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20  ne XN_EXPR      
16560 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65  (-2)     /* Inde
16570 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  xed column is an
16580 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a   expression */..
16590 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c  /*.** Each sampl
165a0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
165b0 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
165c0 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  le is represente
165d0 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75  d in memory.** u
165e0 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65  sing a structure
165f0 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20   of this type.  
16600 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
16610 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  n at the top of 
16620 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63  the.** analyze.c
16630 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72   source file for
16640 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
16650 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
16660 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
16670 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20  .  void *p;     
16680 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
16690 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72  to sampled recor
166a0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  d */.  int n;   
166b0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
166c0 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79   of record in by
166d0 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  tes */.  tRowcnt
166e0 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73   *anEq;    /* Es
166f0 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
16700 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20  s where the key 
16710 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70  equals this samp
16720 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
16730 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74  *anLt;    /* Est
16740 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
16750 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65   where key is le
16760 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
16770 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
16780 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73   *anDLt;   /* Es
16790 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  t. number of dis
167a0 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20  tinct keys less 
167b0 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
167c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
167d0 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20  ch token coming 
167e0 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72  out of the lexer
167f0 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
16800 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63  of.** this struc
16810 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72  ture.  Tokens ar
16820 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70  e also used as p
16830 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
16840 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  sion..**.** Note
16850 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74   if Token.z==0 t
16860 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e  hen Token.dyn an
16870 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e  d Token.n are un
16880 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d  defined and.** m
16890 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f  ay contain rando
168a0 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f  m values.  Do no
168b0 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d  t make any assum
168c0 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b  ptions about Tok
168d0 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f  en.dyn.** and To
168e0 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e  ken.n when Token
168f0 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74  .z==0..*/.struct
16900 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
16910 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a   char *z;     /*
16920 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
16930 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
16940 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
16950 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20  nsigned int n;  
16960 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
16970 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
16980 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
16990 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
169a0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
169b0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
169c0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
169d0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
169e0 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
169f0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
16a00 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16a10 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
16a20 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
16a30 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
16a40 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
16a50 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
16a60 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
16a70 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
16a80 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
16a90 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
16aa0 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
16ab0 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
16ac0 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
16ad0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
16ae0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
16af0 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
16b00 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
16b10 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
16b20 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
16b30 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
16b40 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
16b50 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
16b60 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
16b70 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
16b80 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
16b90 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
16ba0 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
16bb0 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
16bc0 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
16bd0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
16be0 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
16bf0 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
16c00 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
16c10 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
16c20 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
16c30 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
16c60 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
16c70 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
16c80 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
16c90 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
16ca0 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
16cb0 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
16cc0 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
16cd0 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
16ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16cf0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
16d00 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
16d10 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
16d20 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
16d30 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
16d40 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
16d50 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
16d60 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20  sortingIdxPTab; 
16d70 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
16d80 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74  mber of pseudo-t
16d90 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  able */.  int nS
16da0 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
16db0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
16dc0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
16dd0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
16de0 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65   int mnReg, mxRe
16df0 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67  g;       /* Rang
16e00 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  e of registers a
16e10 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
16e20 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20  l and aFunc */. 
16e30 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
16e40 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
16e50 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
16e60 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
16e70 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
16e80 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
16e90 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
16ea0 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
16eb0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
16ec0 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
16ed0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
16ee0 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
16ef0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
16f00 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
16f10 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
16f20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
16f30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
16f40 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
16f50 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
16f60 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
16f70 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
16f80 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
16f90 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
16fa0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
16fb0 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
16fc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
16fd0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
16fe0 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
16ff0 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
17000 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
17010 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
17020 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
17030 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
17040 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
17050 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17060 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
17070 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
17080 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74    int nAccumulat
17090 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  or;       /* Num
170a0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ber of columns t
170b0 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68  hat show through
170c0 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   to the output..
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170e0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64            ** Add
170f0 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20  itional columns 
17100 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73  are used only as
17110 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20   parameters to. 
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72           ** aggr
17140 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
17150 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
17160 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20  nfo_func {   /* 
17170 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61  For each aggrega
17180 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  te function */. 
17190 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
171a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
171b0 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69  xpression encodi
171c0 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ng the function 
171d0 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  */.    FuncDef *
171e0 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  pFunc;          
171f0 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65  /* The aggregate
17200 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
17210 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  entation */.    
17220 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
17230 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
17240 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
17250 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
17260 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ator */.    int 
17270 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  iDistinct;      
17280 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61       /* Ephemera
17290 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20  l table used to 
172a0 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54  enforce DISTINCT
172b0 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a   */.  } *aFunc;.
172c0 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20    int nFunc;    
172d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
172e0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
172f0 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a  n aFunc[] */.};.
17300 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
17310 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73  ype ynVar is a s
17320 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65  igned integer, e
17330 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20  ither 16-bit or 
17340 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c  32-bit..** Usual
17350 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73  ly it is 16-bits
17360 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45  .  But if SQLITE
17370 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
17380 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a  MBER is greater.
17390 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65  ** than 32767 we
173a0 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74   have to make it
173b0 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74   32-bit.  16-bit
173c0 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65   is preferred be
173d0 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73  cause.** it uses
173e0 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20   less memory in 
173f0 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c  the Expr object,
17400 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20   which is a big 
17410 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69  memory user.** i
17420 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c  n systems with l
17430 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20  ots of prepared 
17440 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64  statements.  And
17450 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   few application
17460 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74  s.** need more t
17470 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20  han about 10 or 
17480 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42  20 variables.  B
17490 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20  ut some extreme 
174a0 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f  users want.** to
174b0 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73   have prepared s
174c0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f  tatements with o
174d0 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62  ver 32767 variab
174e0 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65  les, and for the
174f0 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20  m.** the option 
17500 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74  is available (at
17510 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a   compile-time)..
17520 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
17530 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
17540 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66  R<=32767.typedef
17550 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73   i16 ynVar;.#els
17560 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e  e.typedef int yn
17570 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Var;.#endif../*.
17580 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
17590 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
175a0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
175b0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
175c0 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
175d0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
175e0 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
175f0 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61  . The integer pa
17600 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73  rser token codes
17610 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61   are reused.** a
17620 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20  s opcodes here. 
17630 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
17640 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20   parser defines 
17650 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69  TK_GE to be an i
17660 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72  nteger.** code r
17670 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
17680 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54  ">=" operator. T
17690 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72  his same integer
176a0 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a   code is reused.
176b0 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ** to represent 
176c0 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e  the greater-than
176d0 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65  -or-equal-to ope
176e0 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70  rator in the exp
176f0 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e  ression.** tree.
17700 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
17710 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
17720 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49  QL literal (TK_I
17730 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54  NTEGER, TK_FLOAT
17740 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72  , TK_BLOB,.** or
17750 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
17760 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
17770 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
17780 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
17790 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
177a0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
177b0 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
177c0 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
177d0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
177e0 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61  e.** variable na
177f0 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  me. Finally, if 
17800 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
17810 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
17820 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c  n (TK_FUNCTION),
17830 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  .** then Expr.to
17840 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
17850 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
17860 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  ction..**.** Exp
17870 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70  r.pRight and Exp
17880 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20  r.pLeft are the 
17890 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73  left and right s
178a0 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66  ubexpressions of
178b0 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65   a.** binary ope
178c0 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72  rator. Either or
178d0 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c   both may be NUL
178e0 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e  L..**.** Expr.x.
178f0 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20  pList is a list 
17900 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20  of arguments if 
17910 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
17920 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
17930 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70  n,.** a CASE exp
17940 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e  ression or an IN
17950 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
17960 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
17970 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22  N (<y>, <z>...)"
17980 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c  ..** Expr.x.pSel
17990 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74  ect is used if t
179a0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
179b0 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72   a sub-select or
179c0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
179d0 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c  f.** the form "<
179e0 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20  lhs> IN (SELECT 
179f0 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50  ...)". If the EP
17a00 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69  _xIsSelect bit i
17a10 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20  s set in the.** 
17a20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
17a30 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65   then Expr.x.pSe
17a40 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f  lect is valid. O
17a50 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78  therwise, Expr.x
17a60 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c  .pList is.** val
17a70 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70  id..**.** An exp
17a80 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
17a90 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20  orm ID or ID.ID 
17aa0 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75  refers to a colu
17ab0 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a  mn in a table..*
17ac0 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65  * For such expre
17ad0 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20  ssions, Expr.op 
17ae0 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c  is set to TK_COL
17af0 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61  UMN and Expr.iTa
17b00 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e  ble is.** the in
17b10 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d  teger cursor num
17b20 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75  ber of a VDBE cu
17b30 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
17b40 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a   that table and.
17b50 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  ** Expr.iColumn 
17b60 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
17b70 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65  mber for the spe
17b80 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49  cific column.  I
17b90 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73  f the.** express
17ba0 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61  ion is used as a
17bb0 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67   result in an ag
17bc0 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20  gregate SELECT, 
17bd0 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
17be0 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64  e is also stored
17bf0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67   in the Expr.iAg
17c00 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
17c10 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61  aggregate so tha
17c20 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61  t.** it can be a
17c30 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c  ccessed after al
17c40 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65  l aggregates are
17c50 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a   computed..**.**
17c60 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
17c70 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64  on is an unbound
17c80 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72   variable marker
17c90 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72   (a question mar
17ca0 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27  k.** character '
17cb0 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ?' in the origin
17cc0 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65  al SQL) then the
17cd0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c   Expr.iTable hol
17ce0 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  ds the index.** 
17cf0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
17d00 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  variable..**.** 
17d10 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
17d20 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20  n is a subquery 
17d30 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  then Expr.iColum
17d40 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  n holds an integ
17d50 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e  er.** register n
17d60 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  umber containing
17d70 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
17d80 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66  he subquery.  If
17d90 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79   the.** subquery
17da0 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e   gives a constan
17db0 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69  t result, then i
17dc0 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66  Table is -1.  If
17dd0 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a   the subquery.**
17de0 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65   gives a differe
17df0 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66  nt answer at dif
17e00 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72  ferent times dur
17e10 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72  ing statement pr
17e20 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e  ocessing.** then
17e30 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61   iTable is the a
17e40 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72  ddress of a subr
17e50 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70  outine that comp
17e60 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72  utes the subquer
17e70 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  y..**.** If the 
17e80 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20  Expr is of type 
17e90 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  OP_Column, and t
17ea0 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73  he table it is s
17eb0 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a  electing from.**
17ec0 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65   is a disk table
17ed0 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20   or the "old.*" 
17ee0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68  pseudo-table, th
17ef0 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74  en pTab points t
17f00 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  o the.** corresp
17f10 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66  onding table def
17f20 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  inition..**.** A
17f30 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a  LLOCATION NOTES:
17f40 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65  .**.** Expr obje
17f50 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f  cts can use a lo
17f60 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  t of memory spac
17f70 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63  e in database sc
17f80 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c  hema.  To.** hel
17f90 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20  p reduce memory 
17fa0 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f  requirements, so
17fb0 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20  metimes an Expr 
17fc0 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a  object will be.*
17fd0 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e  * truncated.  An
17fe0 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
17ff0 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
18000 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f   allocations, so
18010 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f  metimes.** two o
18020 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65  r more Expr obje
18030 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  cts will be stor
18040 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d  ed in a single m
18050 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
18060 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69  ,.** together wi
18070 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73  th Expr.zToken s
18080 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  trings..**.** If
18090 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
180a0 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  and EP_TokenOnly
180b0 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77   flags are set w
180c0 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f  hen.** an Expr o
180d0 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74  bject is truncat
180e0 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64  ed.  When EP_Red
180f0 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65  uced is set, the
18100 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69  n all.** the chi
18110 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ld Expr objects 
18120 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66  in the Expr.pLef
18130 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68  t and Expr.pRigh
18140 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72  t subtrees.** ar
18150 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
18160 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f  in the same memo
18170 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ry allocation.  
18180 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  Note, however, t
18190 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72  hat.** the subtr
181a0 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c  ees in Expr.x.pL
181b0 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53  ist or Expr.x.pS
181c0 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73  elect are always
181d0 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61   separately.** a
181e0 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64  llocated, regard
181f0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
18200 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65  or not EP_Reduce
18210 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72  d is set..*/.str
18220 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20  uct Expr {.  u8 
18230 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
18240 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e      /* Operation
18250 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68   performed by th
18260 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61  is node */.  cha
18270 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
18280 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
18290 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ity of the colum
182a0 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20  n or 0 if not a 
182b0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
182c0 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
182d0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c     /* Various fl
182e0 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62  ags.  EP_* See b
182f0 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  elow */.  union 
18300 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b  {.    char *zTok
18310 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  en;          /* 
18320 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72  Token value. Zer
18330 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64  o terminated and
18340 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20   dequoted */.   
18350 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20   int iValue;    
18360 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e          /* Non-n
18370 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20  egative integer 
18380 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56  value if EP_IntV
18390 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a  alue */.  } u;..
183a0 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54    /* If the EP_T
183b0 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73  okenOnly flag is
183c0 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
183d0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
183e0 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
183f0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
18400 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
18410 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
18420 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
18430 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
18440 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
18450 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
18460 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
18470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
184a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
184b0 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
184c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
184d0 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
184e0 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
184f0 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
18500 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
18510 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
18520 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
18530 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
18540 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46   SELECT, CASE, F
18550 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e  UNCTION, BETWEEN
18560 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
18570 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
18580 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64  EP_xIsSelect and
18590 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
185a0 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20  , SELECT */.  } 
185b0 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
185c0 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
185d0 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
185e0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
185f0 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
18600 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
18610 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
18620 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
18630 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
18640 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
18650 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
18660 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
18670 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
18680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
186a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
186b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
186c0 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
186d0 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
186e0 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
186f0 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
18700 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
18710 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
18720 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
18730 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
18740 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
18750 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
18760 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
18770 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
187a0 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
187b0 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
187c0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
187d0 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
187e0 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20  ew, 0 -> old.   
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18800 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69        ** EP_Unli
18810 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38  kely:  134217728
18820 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f   times likelihoo
18830 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
18840 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
18850 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67  _SELECT: 1st reg
18860 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20  ister of result 
18870 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61  vector */.  ynVa
18880 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
18890 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
188a0 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
188b0 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188d0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
188e0 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
188f0 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
18900 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20  = 1)..          
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18920 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55  * TK_SELECT_COLU
18930 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  MN: column of th
18940 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  e result vector 
18950 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20  */.  i16 iAgg;  
18960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
18970 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41  hich entry in pA
18980 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f  ggInfo->aCol[] o
18990 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20  r ->aFunc[] */. 
189a0 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54   i16 iRightJoinT
189b0 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50  able;   /* If EP
189c0 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72  _FromJoin, the r
189d0 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68  ight table of th
189e0 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f  e join */.  u8 o
189f0 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p2;             
18a00 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45     /* TK_REGISTE
18a10 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75  R: original valu
18a20 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20  e of Expr.op.   
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55        ** TK_COLU
18a50 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  MN: the value of
18a60 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d   p5 for OP_Colum
18a70 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
18a80 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
18a90 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e  _AGG_FUNCTION: n
18aa0 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a  esting depth */.
18ab0 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
18ac0 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64  nfo;     /* Used
18ad0 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d   by TK_AGG_COLUM
18ae0 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e  N and TK_AGG_FUN
18af0 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65  CTION */.  Table
18b00 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
18b10 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54    /* Table for T
18b20 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73  K_COLUMN express
18b30 69 6f 6e 73 2e 20 20 43 61 6e 20 62 65 20 4e 55  ions.  Can be NU
18b40 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  LL.             
18b50 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
18b60 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  or a column of a
18b70 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78  n index on an ex
18b80 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  pression */.};..
18b90 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
18ba0 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
18bb0 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
18bc0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
18bd0 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
18be0 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78   EP_FromJoin  0x
18bf0 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e  000001 /* Origin
18c00 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47  ates in ON/USING
18c10 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72   clause of outer
18c20 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
18c30 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78   EP_Agg       0x
18c40 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69  000002 /* Contai
18c50 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  ns one or more a
18c60 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
18c70 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ns */.#define EP
18c80 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30 30 30  _HasFunc   0x000
18c90 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  004 /* Contains 
18ca0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63  one or more func
18cb0 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e  tions of any kin
18cc0 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  d */.           
18cd0 20 20 20 20 20 20 20 2f 2a 20 30 78 30 30 30 30         /* 0x0000
18ce0 30 38 20 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20  08 // available 
18cf0 66 6f 72 20 75 73 65 20 2a 2f 0a 23 64 65 66 69  for use */.#defi
18d00 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
18d10 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72  0x000010 /* Aggr
18d20 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
18d30 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
18d40 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
18d50 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  EP_VarSelect 0x0
18d60 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74  00020 /* pSelect
18d70 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
18d80 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
18d90 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
18da0 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a  oted 0x000040 /*
18db0 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
18dc0 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
18dd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
18de0 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38  nfixFunc 0x00008
18df0 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e  0 /* True for an
18e00 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
18e10 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
18e20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
18e30 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30  ollate   0x00010
18e40 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
18e50 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
18e60 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
18e70 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20  ine EP_Generic  
18e80 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e   0x000200 /* Ign
18e90 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61  ore COLLATE or a
18ea0 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20  ffinity on this 
18eb0 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
18ec0 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30  EP_IntValue  0x0
18ed0 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72  00400 /* Integer
18ee0 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
18ef0 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a   in u.iValue */.
18f00 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65  #define EP_xIsSe
18f10 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a  lect 0x000800 /*
18f20 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61   x.pSelect is va
18f30 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78  lid (otherwise x
18f40 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64  .pList is) */.#d
18f50 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20  efine EP_Skip   
18f60 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43     0x001000 /* C
18f70 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55  OLLATE, AS, or U
18f80 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69  NLIKELY */.#defi
18f90 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20  ne EP_Reduced   
18fa0 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72  0x002000 /* Expr
18fb0 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44   struct EXPR_RED
18fc0 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
18fd0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
18fe0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30  P_TokenOnly 0x00
18ff0 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  4000 /* Expr str
19000 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  uct EXPR_TOKENON
19010 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  LYSIZE bytes onl
19020 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
19030 53 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30  Static    0x0080
19040 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  00 /* Held in me
19050 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
19060 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
19070 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65  */.#define EP_Me
19080 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30  mToken  0x010000
19090 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69   /* Need to sqli
190a0 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72  te3DbFree() Expr
190b0 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69  .zToken */.#defi
190c0 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20  ne EP_NoReduce  
190d0 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e  0x020000 /* Cann
190e0 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ot EXPRDUP_REDUC
190f0 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23  E this Expr */.#
19100 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65  define EP_Unlike
19110 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20  ly  0x040000 /* 
19120 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69  unlikely() or li
19130 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74  kelihood() funct
19140 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
19150 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38  P_ConstFunc 0x08
19160 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45  0000 /* A SQLITE
19170 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f  _FUNC_CONSTANT o
19180 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74  r _SLOCHNG funct
19190 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
191a0 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30  P_CanBeNull 0x10
191b0 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e  0000 /* Can be n
191c0 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20  ull despite NOT 
191d0 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
191e0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75  */.#define EP_Su
191f0 62 71 75 65 72 79 20 20 30 78 32 30 30 30 30 30  bquery  0x200000
19200 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
19210 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70  s a TK_SELECT op
19220 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
19230 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30  e EP_Alias     0
19240 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e  x400000 /* Is an
19250 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73   alias for a res
19260 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a  ult set column *
19270 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61  /.#define EP_Lea
19280 66 20 20 20 20 20 20 30 78 38 30 30 30 30 30 20  f      0x800000 
19290 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e  /* Expr.pLeft, .
192a0 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65  pRight, .u.pSele
192b0 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a  ct all NULL */..
192c0 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f  /*.** The EP_Pro
192d0 70 61 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61  pagate mask is a
192e0 20 73 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69   set of properti
192f0 65 73 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69  es that automati
19300 63 61 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a  cally propagate.
19310 2a 2a 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20  ** upwards into 
19320 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f  parent nodes..*/
19330 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70  .#define EP_Prop
19340 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74  agate (EP_Collat
19350 65 7c 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50  e|EP_Subquery|EP
19360 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a  _HasFunc)../*.**
19370 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
19380 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
19390 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
193a0 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20   bits in the.** 
193b0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
193c0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70  ..*/.#define Exp
193d0 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50  rHasProperty(E,P
193e0 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61  )     (((E)->fla
193f0 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
19400 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72  ine ExprHasAllPr
19410 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
19420 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
19430 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
19440 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50  rSetProperty(E,P
19450 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  )     (E)->flags
19460 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  |=(P).#define Ex
19470 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  prClearProperty(
19480 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67  E,P)   (E)->flag
19490 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20  s&=~(P)../* The 
194a0 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
194b0 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  ty() macro is us
194c0 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74  ed for Verificat
194d0 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
194e0 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74  .** and Accredit
194f0 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20  ation only.  It 
19500 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53  works like ExprS
19510 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72  etProperty() dur
19520 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65  ing VVA.** proce
19530 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f  sses but is a no
19540 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79  -op for delivery
19550 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
19560 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e  TE_DEBUG.# defin
19570 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
19580 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e  erty(E,P)  (E)->
19590 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65  flags|=(P).#else
195a0 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
195b0 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
195c0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
195d0 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
195e0 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
195f0 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64  f bytes required
19600 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70   by a normal Exp
19610 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20  r.** struct, an 
19620 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
19630 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
19640 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72  flag set in Expr
19650 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e  .flags.** and an
19660 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
19670 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  h the EP_TokenOn
19680 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a  ly flag set..*/.
19690 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c  #define EXPR_FUL
196a0 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20  LSIZE           
196b0 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20  sizeof(Expr)    
196c0 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73         /* Full s
196d0 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ize */.#define E
196e0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
196f0 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28         offsetof(
19700 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a  Expr,iTable)  /*
19710 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73   Common features
19720 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
19730 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20  _TOKENONLYSIZE  
19740 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
19750 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65  r,pLeft)   /* Fe
19760 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  wer features */.
19770 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73  ./*.** Flags pas
19780 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74  sed to the sqlit
19790 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63  e3ExprDup() func
197a0 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65  tion. See the he
197b0 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20  ader comment.** 
197c0 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70  above sqlite3Exp
197d0 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69  rDup() for detai
197e0 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ls..*/.#define E
197f0 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20  XPRDUP_REDUCE   
19800 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
19810 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69   Used reduced-si
19820 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f  ze Expr nodes */
19830 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
19840 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
19850 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
19860 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
19870 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
19880 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
19890 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
198a0 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
198b0 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
198c0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
198d0 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
198e0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
198f0 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
19900 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
19910 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
19920 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
19930 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
19940 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
19950 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
19960 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
19970 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
19980 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
19990 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
199a0 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65  sed..**.** By de
199b0 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a  fault the Expr.z
199c0 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73  Span field holds
199d0 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
199e0 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
199f0 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
19a00 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20  on that is used 
19a10 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
19a20 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61  n of error messa
19a30 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d  ges and.** colum
19a40 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68  n labels.  In th
19a50 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53  is case, Expr.zS
19a60 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79  pan is typically
19a70 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a   the text of a.*
19a80 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * column express
19a90 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73  ion as it exists
19aa0 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
19ab0 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72  tement.  However
19ac0 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61  , if.** the bSpa
19ad0 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73  nIsTab flag is s
19ae0 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69  et, then zSpan i
19af0 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20  s overloaded to 
19b00 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a  mean the name.**
19b10 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
19b20 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72  olumn in the for
19b30 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c  m: DATABASE.TABL
19b40 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20  E.COLUMN.  This 
19b50 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73  later.** form is
19b60 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72   used for name r
19b70 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e  esolution with n
19b80 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  ested FROM claus
19b90 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  es..*/.struct Ex
19ba0 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  prList {.  int n
19bb0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
19bc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
19bd0 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68  xpressions on th
19be0 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75  e list */.  stru
19bf0 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d  ct ExprList_item
19c00 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65   { /* For each e
19c10 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
19c20 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70   list */.    Exp
19c30 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
19c40 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
19c50 65 20 74 72 65 65 20 66 6f 72 20 74 68 69 73 20  e tree for this 
19c60 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
19c70 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
19c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
19c90 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  en associated wi
19ca0 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69  th this expressi
19cb0 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
19cc0 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20  zSpan;          
19cd0 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
19ce0 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  xt of the expres
19cf0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73  sion */.    u8 s
19d00 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
19d10 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53      /* 1 for DES
19d20 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a  C or 0 for ASC *
19d30 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64  /.    unsigned d
19d40 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a  one :1;       /*
19d50 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63   A flag to indic
19d60 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73  ate when process
19d70 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20  ing is finished 
19d80 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
19d90 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f  bSpanIsTab :1; /
19da0 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42  * zSpan holds DB
19db0 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f  .TABLE.COLUMN */
19dc0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65  .    unsigned re
19dd0 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20  usable :1;   /* 
19de0 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
19df0 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20  ion is reusable 
19e00 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
19e10 62 53 6f 72 74 65 72 52 65 66 20 3a 31 3b 20 2f  bSorterRef :1; /
19e20 2a 20 44 65 66 65 72 20 65 76 61 6c 75 61 74 69  * Defer evaluati
19e30 6f 6e 20 75 6e 74 69 6c 20 61 66 74 65 72 20 73  on until after s
19e40 6f 72 74 69 6e 67 20 2a 2f 0a 20 20 20 20 75 6e  orting */.    un
19e50 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75  ion {.      stru
19e60 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36  ct {.        u16
19e70 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20   iOrderByCol;   
19e80 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20     /* For ORDER 
19e90 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  BY, column numbe
19ea0 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20  r in result set 
19eb0 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69  */.        u16 i
19ec0 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20  Alias;          
19ed0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50   /* Index into P
19ee0 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f  arse.aAlias[] fo
19ef0 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20  r zName */.     
19f00 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20   } x;.      int 
19f10 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20  iConstExprReg;  
19f20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
19f30 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61  in which Expr va
19f40 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f  lue is cached */
19f50 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 61 5b  .    } u;.  } a[
19f60 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  1];             
19f70 20 20 20 20 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74       /* One slot
19f80 20 66 6f 72 20 65 61 63 68 20 65 78 70 72 65 73   for each expres
19f90 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74  sion in the list
19fa0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
19fb0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
19fc0 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  s structure can 
19fd0 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69  hold a simple li
19fe0 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  st of identifier
19ff0 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68  s,.** such as th
1a000 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69  e list "a,b,c" i
1a010 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
1a020 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a  statements:.**.*
1a030 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  *      INSERT IN
1a040 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55  TO t(a,b,c) VALU
1a050 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20  ES ...;.**      
1a060 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78  CREATE INDEX idx
1a070 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a   ON t(a,b,c);.**
1a080 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
1a090 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45  GGER trig BEFORE
1a0a0 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62   UPDATE ON t(a,b
1a0b0 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54  ,c) ...;.**.** T
1a0c0 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20  he IdList.a.idx 
1a0d0 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68  field is used wh
1a0e0 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65  en the IdList re
1a0f0 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73  presents the lis
1a100 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e  t of.** column n
1a110 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62  ames after a tab
1a120 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e  le name in an IN
1a130 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  SERT statement. 
1a140 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e   In the statemen
1a150 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45  t.**.**     INSE
1a160 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
1a170 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61   ....**.** If "a
1a180 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f  " is the k-th co
1a190 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74  lumn of table "t
1a1a0 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61  ", then IdList.a
1a1b0 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73  [0].idx==k..*/.s
1a1c0 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20  truct IdList {. 
1a1d0 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69   struct IdList_i
1a1e0 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  tem {.    char *
1a1f0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
1a200 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74  ame of the ident
1a210 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ifier */.    int
1a220 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f   idx;          /
1a230 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20  * Index in some 
1a240 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20  Table.aCol[] of 
1a250 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a  a column named z
1a260 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a  Name */.  } *a;.
1a270 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20    int nId;      
1a280 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1a290 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74  identifiers on t
1a2a0 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
1a2b0 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b  *.** The bitmask
1a2c0 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65   datatype define
1a2d0 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20  d below is used 
1a2e0 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69  for various opti
1a2f0 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mizations..**.**
1a300 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66   Changing this f
1a310 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20  rom a 64-bit to 
1a320 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69  a 32-bit type li
1a330 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  mits the number 
1a340 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20  of.** tables in 
1a350 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73  a join to 32 ins
1a360 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74  tead of 64.  But
1a370 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73   it also reduces
1a380 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20   the size.** of 
1a390 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37  the library by 7
1a3a0 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36  38 bytes on ix86
1a3b0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1a3c0 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a  TE_BITMASK_TYPE.
1a3d0 20 20 74 79 70 65 64 65 66 20 53 51 4c 49 54 45    typedef SQLITE
1a3e0 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69  _BITMASK_TYPE Bi
1a3f0 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74  tmask;.#else.  t
1a400 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61  ypedef u64 Bitma
1a410 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  sk;.#endif../*.*
1a420 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
1a430 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73  bits in a Bitmas
1a440 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20  k.  "BMS" means 
1a450 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a  "BitMask Size"..
1a460 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20  */.#define BMS  
1a470 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69  ((int)(sizeof(Bi
1a480 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a  tmask)*8))../*.*
1a490 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69 74  * A bit in a Bit
1a4a0 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  mask.*/.#define 
1a4b0 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28  MASKBIT(n)   (((
1a4c0 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29  Bitmask)1)<<(n))
1a4d0 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
1a4e0 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65  32(n) (((unsigne
1a4f0 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23  d int)1)<<(n)).#
1a500 64 65 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20  define ALLBITS  
1a510 20 20 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31      ((Bitmask)-1
1a520 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
1a530 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1a540 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46   describes the F
1a550 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
1a560 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1a570 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20  ..** Each table 
1a580 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
1a590 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
1a5a0 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65  s a separate ele
1a5b0 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53  ment of.** the S
1a5c0 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79  rcList.a[] array
1a5d0 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65  ..**.** With the
1a5e0 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c   addition of mul
1a5f0 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73  tiple database s
1a600 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c  upport, the foll
1a610 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
1a620 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ** can also be u
1a630 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20  sed to describe 
1a640 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
1a650 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74  le such as the t
1a660 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20  able that.** is 
1a670 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49  modified by an I
1a680 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f  NSERT, DELETE, o
1a690 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
1a6a0 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64  nt.  In standard
1a6b0 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20   SQL,.** such a 
1a6c0 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20  table must be a 
1a6d0 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e  simple name: ID.
1a6e0 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c    But in SQLite,
1a6f0 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a   the table can.*
1a700 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66  * now be identif
1a710 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73  ied by a databas
1a720 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74  e name, a dot, t
1a730 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61  hen the table na
1a740 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a  me: ID.ID..**.**
1a750 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74   The jointype st
1a760 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67  arts out showing
1a770 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62   the join type b
1a780 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65  etween the curre
1a790 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20  nt table.** and 
1a7a0 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f  the next table o
1a7b0 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65  n the list.  The
1a7c0 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74   parser builds t
1a7d0 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79  he list this way
1a7e0 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33  ..** But sqlite3
1a7f0 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
1a800 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69  Type() later shi
1a810 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65  fts the jointype
1a820 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a  s so that each.*
1a830 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65  * jointype expre
1a840 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65  sses the join be
1a850 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20  tween the table 
1a860 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
1a870 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e   table..**.** In
1a880 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65   the colUsed fie
1a890 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64  ld, the high-ord
1a8a0 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20  er bit (bit 63) 
1a8b0 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61  is set if the ta
1a8c0 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  ble.** contains 
1a8d0 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c  more than 63 col
1a8e0 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d  umns and the 64-
1a8f0 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75  th or later colu
1a900 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73  mn is used..*/.s
1a910 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a  truct SrcList {.
1a920 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20    int nSrc;     
1a930 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1a940 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
1a950 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ries in the FROM
1a960 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32   clause */.  u32
1a970 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a   nAlloc;      /*
1a980 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
1a990 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  es allocated in 
1a9a0 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73  a[] below */.  s
1a9b0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
1a9c0 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20  em {.    Schema 
1a9d0 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63  *pSchema;  /* Sc
1a9e0 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68  hema to which th
1a9f0 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64  is item is fixed
1aa00 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44   */.    char *zD
1aa10 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d  atabase;  /* Nam
1aa20 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  e of database ho
1aa30 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  lding this table
1aa40 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
1aa50 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
1aa60 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  e of the table *
1aa70 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69  /.    char *zAli
1aa80 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22  as;     /* The "
1aa90 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20  B" part of a "A 
1aaa0 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a  AS B" phrase.  z
1aab0 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20  Name is the "A" 
1aac0 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
1aad0 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53  ab;      /* An S
1aae0 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70  QL table corresp
1aaf0 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20  onding to zName 
1ab00 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
1ab10 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45  Select;  /* A SE
1ab20 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75  LECT statement u
1ab30 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  sed in place of 
1ab40 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  a table name */.
1ab50 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c      int addrFill
1ab60 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73  Sub;  /* Address
1ab70 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74   of subroutine t
1ab80 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62  o manifest a sub
1ab90 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74  query */.    int
1aba0 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f   regReturn;    /
1abb0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1abc0 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73  ng return addres
1abd0 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62  s of addrFillSub
1abe0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
1abf0 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67  esult;    /* Reg
1ac00 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72  isters holding r
1ac10 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72  esults of a co-r
1ac20 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74  outine */.    st
1ac30 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20  ruct {.      u8 
1ac40 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f  jointype;      /
1ac50 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62  * Type of join b
1ac60 65 74 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c  etween this tabl
1ac70 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
1ac80 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  us */.      unsi
1ac90 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
1aca0 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
1acb0 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
1acc0 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
1acd0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1ace0 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31  d isIndexedBy :1
1acf0 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
1ad00 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58  here is an INDEX
1ad10 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ED BY clause */.
1ad20 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1ad30 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20  sTabFunc :1;    
1ad40 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c   /* True if tabl
1ad50 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
1ad60 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20  n syntax */.    
1ad70 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
1ad80 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
1ad90 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
1ada0 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
1adb0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1adc0 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
1add0 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
1ade0 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
1adf0 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ne */.      unsi
1ae00 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65  gned isRecursive
1ae10 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66   :1;   /* True f
1ae20 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66  or recursive ref
1ae30 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a  erence in WITH *
1ae40 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e  /.    } fg;.#ifn
1ae50 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1ae60 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
1ae70 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
1ae80 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
1ae90 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
1aea0 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
1aeb0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
1aec0 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
1aed0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
1aee0 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
1aef0 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
1af00 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
1af10 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
1af20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
1af30 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
1af40 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
1af50 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
1af60 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
1af70 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
1af80 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
1af90 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
1afa0 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
1afb0 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75  is used */.    u
1afc0 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61  nion {.      cha
1afd0 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20  r *zIndexedBy;  
1afe0 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
1aff0 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
1b000 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
1b010 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c  e */.      ExprL
1b020 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20  ist *pFuncArg;  
1b030 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20  /* Arguments to 
1b040 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
1b050 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75  ction */.    } u
1b060 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  1;.    Index *pI
1b070 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65  BIndex;  /* Inde
1b080 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
1b090 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e  esponding to u1.
1b0a0 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20  zIndexedBy */.  
1b0b0 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
1b0c0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
1b0d0 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
1b0e0 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
1b0f0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
1b100 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
1b110 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
1b120 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
1b130 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
1b140 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
1b150 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
1b160 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
1b170 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1b180 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
1b190 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
1b1a0 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
1b1b0 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
1b1c0 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
1b1d0 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
1b1e0 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
1b1f0 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
1b200 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
1b210 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
1b220 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
1b230 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
1b240 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
1b250 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
1b260 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1b270 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
1b280 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
1b290 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
1b2a0 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
1b2b0 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
1b2c0 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
1b2d0 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
1b2e0 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
1b2f0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
1b300 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
1b310 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
1b320 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
1b330 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
1b340 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
1b350 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
1b360 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61  member..**.** Va
1b370 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1b380 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
1b390 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
1b3a0 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
1b3b0 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69   == SF_FixedLimi
1b3c0 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t.*/.#define WHE
1b3d0 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41  RE_ORDERBY_NORMA
1b3e0 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f  L   0x0000 /* No
1b3f0 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
1b400 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
1b410 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20        0x0001 /* 
1b420 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
1b430 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75  ing for min() fu
1b440 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
1b450 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20  ERE_ORDERBY_MAX 
1b460 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f       0x0002 /* O
1b470 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
1b480 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e  ng for max() fun
1b490 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
1b4a0 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52  RE_ONEPASS_DESIR
1b4b0 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61  ED  0x0004 /* Wa
1b4c0 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
1b4d0 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
1b4e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b4f0 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f  _ONEPASS_MULTIRO
1b500 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50  W 0x0008 /* ONEP
1b510 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d  ASS is ok with m
1b520 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1b530 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55  #define WHERE_DU
1b540 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30  PLICATES_OK    0
1b550 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72  x0010 /* Ok to r
1b560 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65  eturn a row more
1b570 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64   than once */.#d
1b580 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53  efine WHERE_OR_S
1b590 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78 30  UBCLAUSE     0x0
1b5a0 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e  020 /* Processin
1b5b0 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61 73  g a sub-WHERE as
1b5c0 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20   part of.       
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
1b5f0 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a  * the OR optimiz
1b600 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e  ation  */.#defin
1b610 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
1b620 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30 20           0x0040 
1b630 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
1b640 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
1b650 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b660 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
1b670 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72     0x0080 /* pOr
1b680 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
1b690 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
1b6a0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1b6b0 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
1b6c0 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c      0x0100 /* Al
1b6d0 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
1b6e0 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
1b6f0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1b700 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20  ORTBYGROUP      
1b710 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72  0x0200 /* Suppor
1b720 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
1b730 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66  Sorted() */.#def
1b740 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54  ine WHERE_SEEK_T
1b750 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34 30  ABLE       0x040
1b760 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65  0 /* Do not defe
1b770 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20  r seeks on main 
1b780 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
1b790 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c   WHERE_ORDERBY_L
1b7a0 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20 2f  IMIT    0x0800 /
1b7b0 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20  * ORDERBY+LIMIT 
1b7c0 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f  on the inner loo
1b7d0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
1b7e0 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42  RE_SEEK_UNIQ_TAB
1b7f0 4c 45 20 20 30 78 31 30 30 30 20 2f 2a 20 44 6f  LE  0x1000 /* Do
1b800 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73   not defer seeks
1b810 20 69 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20   if unique */.  
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b830 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 32        /*     0x2
1b840 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65  000    not curre
1b850 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65  ntly used */.#de
1b860 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c  fine WHERE_USE_L
1b870 49 4d 49 54 20 20 20 20 20 20 20 20 30 78 34 30  IMIT        0x40
1b880 30 30 20 2f 2a 20 55 73 65 20 74 68 65 20 4c 49  00 /* Use the LI
1b890 4d 49 54 20 69 6e 20 63 6f 73 74 20 65 73 74 69  MIT in cost esti
1b8a0 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20 20 20 20  mates */.       
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8c0 20 2f 2a 20 20 20 20 20 30 78 38 30 30 30 20 20   /*     0x8000  
1b8d0 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20    not currently 
1b8e0 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  used */../* Allo
1b8f0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
1b900 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
1b910 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
1b920 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b930 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
1b940 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
1b950 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
1b960 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
1b970 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
1b980 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
1b990 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
1b9a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1b9b0 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
1b9c0 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
1b9d0 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
1b9e0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
1b9f0 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
1ba00 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
1ba10 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
1ba20 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
1ba30 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
1ba40 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
1ba50 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
1ba60 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
1ba70 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
1ba80 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
1ba90 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
1baa0 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
1bab0 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
1bac0 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
1bad0 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
1bae0 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
1baf0 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
1bb00 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
1bb10 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
1bb20 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1bb30 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
1bb40 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
1bb50 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
1bb60 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
1bb70 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
1bb80 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
1bb90 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
1bba0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
1bbb0 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
1bbc0 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
1bbd0 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
1bbe0 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
1bbf0 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
1bc00 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
1bc10 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
1bc20 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
1bc30 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  t.** context is 
1bc40 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
1bc50 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
1bc60 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
1bc70 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
1bc80 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
1bc90 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
1bca0 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
1bcb0 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
1bcc0 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
1bcd0 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
1bce0 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
1bcf0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
1bd00 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
1bd10 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
1bd20 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
1bd30 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
1bd40 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
1bd50 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
1bd60 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
1bd70 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a  incremented..**.
1bd80 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
1bd90 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
1bda0 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
1bdb0 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
1bdc0 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
1bdd0 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
1bde0 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
1bdf0 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
1be00 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
1be10 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
1be20 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
1be30 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
1be40 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
1be50 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
1be60 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
1be70 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
1be80 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
1be90 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1bea0 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
1beb0 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
1bec0 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
1bed0 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
1bee0 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
1bef0 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
1bf00 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
1bf10 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1bf20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
1bf30 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
1bf40 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20 20   columns */.    
1bf50 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
1bf60 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
1bf70 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
1bf80 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
1bf90 65 6c 20 2a 2f 0a 20 20 20 20 55 70 73 65 72 74  el */.    Upsert
1bfa0 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f   *pUpsert;     /
1bfb0 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  * ON CONFLICT cl
1bfc0 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ause information
1bfd0 20 66 72 6f 6d 20 61 6e 20 75 70 73 65 72 74 20   from an upsert 
1bfe0 2a 2f 0a 20 20 7d 20 75 4e 43 3b 0a 20 20 4e 61  */.  } uNC;.  Na
1bff0 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74  meContext *pNext
1c000 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72  ;  /* Next outer
1c010 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20   name context.  
1c020 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f  NULL for outermo
1c030 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  st */.  int nRef
1c040 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c050 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20  Number of names 
1c060 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73  resolved by this
1c070 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e   context */.  in
1c080 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1c090 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c0a0 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72  errors encounter
1c0b0 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69  ed while resolvi
1c0c0 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31  ng names */.  u1
1c0d0 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  6 ncFlags;      
1c0e0 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f     /* Zero or mo
1c0f0 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65  re NC_* flags de
1c100 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fined below */.}
1c110 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1c120 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
1c130 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46  NameContext, ncF
1c140 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
1c150 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1c160 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1c170 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
1c180 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20  **    NC_HasAgg 
1c190 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a     == SF_HasAgg.
1c1a0 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41  **    NC_MinMaxA
1c1b0 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41  gg == SF_MinMaxA
1c1c0 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e  gg == SQLITE_FUN
1c1d0 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23  C_MINMAX.**.*/.#
1c1e0 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41  define NC_AllowA
1c1f0 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41  gg  0x0001  /* A
1c200 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1c210 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68  ns are allowed h
1c220 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ere */.#define N
1c230 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30  C_PartIdx   0x00
1c240 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  02  /* True if r
1c250 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69  esolving a parti
1c260 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a  al index WHERE *
1c270 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43  /.#define NC_IsC
1c280 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f  heck   0x0004  /
1c290 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1c2a0 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
1c2b0 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
1c2c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e  */.#define NC_In
1c2d0 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20  AggFunc 0x0008  
1c2e0 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79  /* True if analy
1c2f0 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74  zing arguments t
1c300 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f  o an agg func */
1c310 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
1c320 67 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a  gg    0x0010  /*
1c330 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
1c340 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1c350 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1c360 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78   NC_IdxExpr   0x
1c370 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0020  /* True if
1c380 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d   resolving colum
1c390 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44  ns of CREATE IND
1c3a0 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  EX */.#define NC
1c3b0 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34  _VarSelect 0x004
1c3c0 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74  0  /* A correlat
1c3d0 65 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20  ed subquery has 
1c3e0 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65  been seen */.#de
1c3f0 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20 20  fine NC_UEList  
1c400 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75    0x0080  /* Tru
1c410 65 20 69 66 20 75 4e 43 2e 70 45 4c 69 73 74 20  e if uNC.pEList 
1c420 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  is used */.#defi
1c430 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20 20  ne NC_UAggInfo  
1c440 30 78 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20  0x0100  /* True 
1c450 69 66 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f 20  if uNC.pAggInfo 
1c460 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  is used */.#defi
1c470 6e 65 20 4e 43 5f 55 55 70 73 65 72 74 20 20 20  ne NC_UUpsert   
1c480 30 78 30 32 30 30 20 20 2f 2a 20 54 72 75 65 20  0x0200  /* True 
1c490 69 66 20 75 4e 43 2e 70 55 70 73 65 72 74 20 69  if uNC.pUpsert i
1c4a0 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  s used */.#defin
1c4b0 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30  e NC_MinMaxAgg 0
1c4c0 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61  x1000  /* min/ma
1c4d0 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65  x aggregates see
1c4e0 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f  n.  See note abo
1c4f0 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ve */.#define NC
1c500 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78 32 30 30  _Complex   0x200
1c510 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20  0  /* True if a 
1c520 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62 71  function or subq
1c530 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a 0a 2f 2a  uery seen */../*
1c540 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1c550 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1c560 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1c570 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f  s a single ON CO
1c580 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65  NFLICT.** clause
1c590 20 69 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a   in an upsert..*
1c5a0 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74  *.** The pUpsert
1c5b0 54 61 72 67 65 74 20 66 69 65 6c 64 20 69 73 20  Target field is 
1c5c0 6f 6e 6c 79 20 73 65 74 20 69 66 20 74 68 65 20  only set if the 
1c5d0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1c5e0 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63  se includes.** c
1c5f0 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63  onflict-target c
1c600 6c 61 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20  lause.  (In "ON 
1c610 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22 20 74  CONFLICT(a,b)" t
1c620 68 65 20 22 28 61 2c 62 29 22 20 69 73 20 74 68  he "(a,b)" is th
1c630 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61  e.** conflict-ta
1c640 72 67 65 74 20 63 6c 61 75 73 65 2e 29 20 20 54  rget clause.)  T
1c650 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74  he pUpsertTarget
1c660 57 68 65 72 65 20 69 73 20 74 68 65 20 6f 70 74  Where is the opt
1c670 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63  ional.** WHERE c
1c680 6c 61 75 73 65 20 75 73 65 64 20 74 6f 20 69 64  lause used to id
1c690 65 6e 74 69 66 79 20 70 61 72 74 69 61 6c 20 75  entify partial u
1c6a0 6e 69 71 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a  nique indexes..*
1c6b0 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53 65 74 20  *.** pUpsertSet 
1c6c0 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63  is the list of c
1c6d0 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73  olumn=expr terms
1c6e0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1c6f0 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68  tatement. .** Th
1c700 65 20 70 55 70 73 65 72 74 53 65 74 20 66 69 65  e pUpsertSet fie
1c710 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61  ld is NULL for a
1c720 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20   ON CONFLICT DO 
1c730 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a  NOTHING.  The.**
1c740 20 70 55 70 73 65 72 74 57 68 65 72 65 20 69 73   pUpsertWhere is
1c750 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
1c760 65 20 66 6f 72 20 74 68 65 20 55 50 44 41 54 45  e for the UPDATE
1c770 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66 20   and is NULL if 
1c780 74 68 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61  the.** WHERE cla
1c790 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a  use is omitted..
1c7a0 2a 2f 0a 73 74 72 75 63 74 20 55 70 73 65 72 74  */.struct Upsert
1c7b0 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
1c7c0 55 70 73 65 72 74 54 61 72 67 65 74 3b 20 20 2f  UpsertTarget;  /
1c7d0 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63 72  * Optional descr
1c7e0 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69  iption of confli
1c7f0 63 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  cting index */. 
1c800 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 54 61   Expr *pUpsertTa
1c810 72 67 65 74 57 68 65 72 65 3b 20 2f 2a 20 57 48  rgetWhere; /* WH
1c820 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
1c830 61 72 74 69 61 6c 20 69 6e 64 65 78 20 74 61 72  artial index tar
1c840 67 65 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  gets */.  ExprLi
1c850 73 74 20 2a 70 55 70 73 65 72 74 53 65 74 3b 20  st *pUpsertSet; 
1c860 20 20 20 20 2f 2a 20 54 68 65 20 53 45 54 20 63      /* The SET c
1c870 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e  lause from an ON
1c880 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45   CONFLICT UPDATE
1c890 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73   */.  Expr *pUps
1c8a0 65 72 74 57 68 65 72 65 3b 20 20 20 20 20 20 20  ertWhere;       
1c8b0 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
1c8c0 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  for the ON CONFL
1c8d0 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20  ICT UPDATE */.  
1c8e0 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 61 62  /* The fields ab
1c8f0 6f 76 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65  ove comprise the
1c900 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
1c910 74 68 65 20 75 70 73 65 72 74 20 63 6c 61 75 73  the upsert claus
1c920 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 65 6c  e..  ** The fiel
1c930 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75 73 65  ds below are use
1c940 64 20 74 6f 20 74 72 61 6e 73 66 65 72 20 69 6e  d to transfer in
1c950 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74  formation from t
1c960 68 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70  he INSERT.  ** p
1c970 72 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e 20 69  rocessing down i
1c980 6e 74 6f 20 74 68 65 20 55 50 44 41 54 45 20 70  nto the UPDATE p
1c990 72 6f 63 65 73 73 69 6e 67 20 77 68 69 6c 65 20  rocessing while 
1c9a0 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 64 65 2e  generating code.
1c9b0 0a 20 20 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e  .  ** Upsert own
1c9c0 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  s the memory all
1c9d0 6f 63 61 74 65 64 20 61 62 6f 76 65 2c 20 62 75  ocated above, bu
1c9e0 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79  t not the memory
1c9f0 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64   below. */.  Ind
1ca00 65 78 20 2a 70 55 70 73 65 72 74 49 64 78 3b 20  ex *pUpsertIdx; 
1ca10 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72         /* Constr
1ca20 61 69 6e 74 20 74 68 61 74 20 70 55 70 73 65 72  aint that pUpser
1ca30 74 54 61 72 67 65 74 20 69 64 65 6e 74 69 66 69  tTarget identifi
1ca40 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  es */.  SrcList 
1ca50 2a 70 55 70 73 65 72 74 53 72 63 3b 20 20 20 20  *pUpsertSrc;    
1ca60 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62 65    /* Table to be
1ca70 20 75 70 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e   updated */.  in
1ca80 74 20 72 65 67 44 61 74 61 3b 20 20 20 20 20 20  t regData;      
1ca90 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
1caa0 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1cab0 67 20 61 72 72 61 79 20 6f 66 20 56 41 4c 55 45  g array of VALUE
1cac0 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74 61  S */.  int iData
1cad0 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
1cae0 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1caf0 20 64 61 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a   data cursor */.
1cb00 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20    int iIdxCur;  
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1cb20 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73  ndex of the firs
1cb30 74 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a  t index cursor *
1cb40 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
1cb50 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1cb60 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1cb70 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
1cb80 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
1cb90 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
1cba0 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
1cbb0 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
1cbc0 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d  ment..**.** nLim
1cbd0 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20  it is set to -1 
1cbe0 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c  if there is no L
1cbf0 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f  IMIT clause.  nO
1cc00 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20  ffset is set to 
1cc10 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69  0..** If there i
1cc20 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
1cc30 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74  , the parser set
1cc40 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20  s nLimit to the 
1cc50 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20  value of the.** 
1cc60 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  limit and nOffse
1cc70 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
1cc80 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72  f the offset (or
1cc90 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e   0 if there is n
1cca0 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20  ot.** offset).  
1ccb0 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c  But later on, nL
1ccc0 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
1ccd0 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f   become the memo
1cce0 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20  ry locations.** 
1ccf0 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74  in the VDBE that
1cd00 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69   record the limi
1cd10 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75  t and offset cou
1cd20 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64  nters..**.** add
1cd30 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72  rOpenEphm[] entr
1cd40 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ies contain the 
1cd50 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70  address of OP_Op
1cd60 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
1cd70 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64  des..** These ad
1cd80 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20  dresses must be 
1cd90 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77  stored so that w
1cda0 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e  e can go back an
1cdb0 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65  d fill in.** the
1cdc0 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20   P4_KEYINFO and 
1cdd0 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61  P2 parameters la
1cde0 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68  ter.  Neither th
1cdf0 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a  e KeyInfo nor.**
1ce00 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1ce10 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e  olumns in P2 can
1ce20 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20   be computed at 
1ce30 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a  the same time.**
1ce40 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45   as the OP_OpenE
1ce50 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  phm instruction 
1ce60 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65  is coded because
1ce70 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69   not.** enough i
1ce80 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1ce90 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75   the compound qu
1cea0 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20  ery is known at 
1ceb0 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54  that point..** T
1cec0 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1ced0 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61  ddrOpenTran[0] a
1cee0 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20  nd [1] contains 
1cef0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
1cf00 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  ces.** for the r
1cf10 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20  esult set.  The 
1cf20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
1cf30 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74  OpenEphm[2] cont
1cf40 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a  ains collating.*
1cf50 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20  * sequences for 
1cf60 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1cf70 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  use..*/.struct S
1cf80 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69  elect {.  ExprLi
1cf90 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20  st *pEList;     
1cfa0 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f   /* The fields o
1cfb0 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a  f the result */.
1cfc0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1cfd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1cfe0 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f  of: TK_UNION TK_
1cff0 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54  ALL TK_INTERSECT
1d000 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20   TK_EXCEPT */.  
1d010 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f  LogEst nSelectRo
1d020 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
1d030 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ted number of re
1d040 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75  sult rows */.  u
1d050 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20  32 selFlags;    
1d060 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
1d070 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   SF_* values */.
1d080 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f    int iLimit, iO
1d090 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f  ffset;   /* Memo
1d0a0 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c  ry registers hol
1d0b0 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46  ding LIMIT & OFF
1d0c0 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  SET counters */.
1d0d0 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
1d0e0 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a  ENABLED.  char z
1d0f0 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20  SelName[12];    
1d100 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d   /* Symbolic nam
1d110 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54  e of this SELECT
1d120 20 75 73 65 20 66 6f 72 20 64 65 62 75 67 67 69   use for debuggi
1d130 6e 67 20 2a 2f 0a 20 20 75 33 32 20 69 53 65 6c  ng */.  u32 iSel
1d140 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 2f  ectId;         /
1d150 2a 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  * EXPLAIN QUERY 
1d160 50 4c 41 4e 20 73 65 6c 65 63 74 20 49 44 20 2a  PLAN select ID *
1d170 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61  /.#endif.  int a
1d180 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20  ddrOpenEphm[2]; 
1d190 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
1d1a0 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
1d1b0 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1d1c0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1d1d0 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
1d1e0 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
1d1f0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
1d200 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
1d210 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1d220 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1d230 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
1d240 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
1d250 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
1d260 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
1d270 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
1d280 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
1d290 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
1d2a0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1d2b0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
1d2c0 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
1d2d0 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
1d2e0 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
1d2f0 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
1d300 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
1d310 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
1d320 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
1d330 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
1d340 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
1d350 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
1d360 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
1d370 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
1d380 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
1d390 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1d3a0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48           /* WITH
1d3b0 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64   clause attached
1d3c0 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e   to this select.
1d3d0 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a   Or NULL. */.};.
1d3e0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
1d3f0 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74  alues for Select
1d400 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20  .selFlags.  The 
1d410 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e  "SF" prefix stan
1d420 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63  ds for.** "Selec
1d430 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56  t Flag"..**.** V
1d440 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1d450 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69   (all checked vi
1d460 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20  a assert()).**  
1d470 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20     SF_HasAgg    
1d480 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a   == NC_HasAgg.**
1d490 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67       SF_MinMaxAg
1d4a0 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41  g  == NC_MinMaxA
1d4b0 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  gg     == SQLITE
1d4c0 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20  _FUNC_MINMAX.** 
1d4d0 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69      SF_FixedLimi
1d4e0 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c  t == WHERE_USE_L
1d4f0 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT.*/.#define 
1d500 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
1d510 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75    0x00001  /* Ou
1d520 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
1d530 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
1d540 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20  ne SF_All       
1d550 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a       0x00002  /*
1d560 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c   Includes the AL
1d570 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  L keyword */.#de
1d580 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64  fine SF_Resolved
1d590 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20         0x00004  
1d5a0 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68  /* Identifiers h
1d5b0 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
1d5c0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1d5d0 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30  Aggregate      0
1d5e0 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61  x00008  /* Conta
1d5f0 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e  ins agg function
1d600 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
1d610 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
1d620 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30  sAgg         0x0
1d630 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0010  /* Contain
1d640 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
1d650 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
1d660 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
1d670 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55  l  0x00020  /* U
1d680 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
1d690 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
1d6a0 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
1d6b0 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34  ded       0x0004
1d6c0 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
1d6d0 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
1d6e0 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
1d6f0 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
1d700 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20  Info    0x00080 
1d710 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
1d720 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
1d730 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  etadata */.#defi
1d740 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20  ne SF_Compound  
1d750 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a       0x00100  /*
1d760 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f   Part of a compo
1d770 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65  und query */.#de
1d780 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20  fine SF_Values  
1d790 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20         0x00200  
1d7a0 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66  /* Synthesized f
1d7b0 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73  rom VALUES claus
1d7c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1d7d0 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30  MultiValue     0
1d7e0 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c  x00400  /* Singl
1d7f0 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69  e VALUES term wi
1d800 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
1d810 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
1d820 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78  estedFrom     0x
1d830 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00800  /* Part o
1d840 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
1d850 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
1d860 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d  .#define SF_MinM
1d870 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30  axAgg      0x010
1d880 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  00  /* Aggregate
1d890 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28   containing min(
1d8a0 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64  ) or max() */.#d
1d8b0 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69  efine SF_Recursi
1d8c0 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20  ve      0x02000 
1d8d0 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76   /* The recursiv
1d8e0 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75  e part of a recu
1d8f0 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65  rsive CTE */.#de
1d900 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d  fine SF_FixedLim
1d910 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20  it     0x04000  
1d920 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65  /* nSelectRow se
1d930 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20  t by a constant 
1d940 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT */.#define
1d950 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
1d960 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e     0x08000  /* N
1d970 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
1d980 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1d990 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1d9a0 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20   SF_Converted   
1d9b0 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42     0x10000  /* B
1d9c0 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  y convertCompoun
1d9d0 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1d9e0 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1d9f0 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20  F_IncludeHidden 
1da00 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63   0x20000  /* Inc
1da10 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  lude hidden colu
1da20 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f  mns in output */
1da30 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
1da40 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30  lexResult  0x400
1da50 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 73 65  00  /* Result se
1da60 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75  t contains subqu
1da70 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ery or function 
1da80 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  */.../*.** The r
1da90 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45  esults of a SELE
1daa0 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  CT can be distri
1dab0 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
1dac0 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65   ways, as define
1dad0 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74  d.** by one of t
1dae0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1daf0 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20  ros.  The "SRT" 
1db00 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
1db10 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54  LECT Result.** T
1db20 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ype"..**.**     
1db30 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1db40 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1db50 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70   a key in a temp
1db60 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20  orary index.**  
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79     identified by
1db90 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1dba0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1dbb0 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76  xcept      Remov
1dbc0 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  e results from t
1dbd0 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64  he temporary ind
1dbe0 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ex pDest->iSDPar
1dbf0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1dc00 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f  _Exists      Sto
1dc10 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79  re a 1 in memory
1dc20 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44   cell pDest->iSD
1dc30 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75  Parm if the resu
1dc40 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  lt.**           
1dc50 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73            set is
1dc60 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a   not empty..**.*
1dc70 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72  *     SRT_Discar
1dc80 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20  d     Throw the 
1dc90 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54  results away.  T
1dca0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53  his is used by S
1dcb0 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20  ELECT.**        
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1dcd0 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1dce0 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e  riggers whose on
1dcf0 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a  ly purpose is.**
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd10 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66       the side-ef
1dd20 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f  fects of functio
1dd30 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  ns..**.** All of
1dd40 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66   the above are f
1dd50 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68  ree to ignore th
1dd60 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  eir ORDER BY cla
1dd70 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a  use. Those that.
1dd80 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68  ** follow must h
1dd90 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42  onor the ORDER B
1dda0 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1ddb0 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20      SRT_Output  
1ddc0 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72      Generate a r
1ddd0 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73  ow of output (us
1dde0 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c  ing the OP_Resul
1ddf0 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20  tRow.**         
1de00 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f              opco
1de10 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77  de) for each row
1de20 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
1de30 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  et..**.**     SR
1de40 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e  T_Mem         On
1de50 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20  ly valid if the 
1de60 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67  result is a sing
1de70 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20  le column..**   
1de80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de90 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73    Store the firs
1dea0 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
1deb0 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77  first result row
1dec0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ded0 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73          in regis
1dee0 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
1def0 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20  rm then abandon 
1df00 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20  the rest.**     
1df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54  of the query.  T
1df30 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1df40 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31  implies "LIMIT 1
1df50 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1df60 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65  _Set         The
1df70 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20   result must be 
1df80 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1df90 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20    Store each.** 
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfb0 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c      row of resul
1dfc0 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  t as the key in 
1dfd0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1dfe0 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
1e000 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
1e010 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
1e020 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
1e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e040 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
1e050 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
1e060 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
1e070 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
1e080 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
1e090 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
1e0a0 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1e0b0 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
1e0c0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e0d0 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
1e0e0 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
1e0f0 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
1e100 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e120 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
1e130 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
1e140 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
1e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e160 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
1e170 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
1e180 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
1e190 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1e1b0 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
1e1c0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
1e1d0 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
1e1e0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
1e1f0 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
1e200 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
1e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e220 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65  esults each time
1e230 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
1e240 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
1e250 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e260 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
1e270 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
1e280 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1e290 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
1e2a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e2b0 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
1e2c0 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
1e2d0 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
1e2e0 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
1e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e300 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
1e310 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
1e320 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
1e330 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
1e340 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
1e350 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1e360 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1e370 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
1e380 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1e390 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
1e3a0 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
1e3b0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1e3c0 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
1e3d0 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
1e3e0 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
1e3f0 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1e410 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
1e420 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
1e430 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e450 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
1e460 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1e470 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
1e480 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1e490 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1e4a0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1e4b0 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
1e4d0 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
1e4e0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1e4f0 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e510 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
1e520 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
1e530 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
1e540 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
1e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e560 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
1e570 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
1e580 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
1e590 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
1e5a0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1e5b0 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1e5c0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1e5d0 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
1e600 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
1e610 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
1e620 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e640 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
1e650 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1e660 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
1e670 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1e680 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1e690 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
1e6a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e6b0 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
1e6c0 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
1e6d0 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
1e6e0 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e700 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
1e710 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
1e720 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
1e730 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
1e740 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
1e750 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1e760 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1e770 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1e780 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
1e790 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
1e7a0 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
1e7b0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1e7c0 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
1e7d0 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
1e7e0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1e7f0 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
1e800 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
1e810 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
1e820 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
1e830 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
1e840 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
1e850 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
1e860 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1e870 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1e880 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1e890 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1e8a0 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
1e8b0 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
1e8c0 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1e8d0 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
1e8e0 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
1e8f0 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
1e900 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
1e910 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1e920 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
1e930 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
1e940 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
1e950 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
1e960 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1e970 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
1e980 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
1e990 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1e9a0 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
1e9b0 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
1e9c0 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
1e9d0 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
1e9e0 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
1e9f0 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
1ea00 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1ea10 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
1ea20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
1ea30 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
1ea40 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
1ea50 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
1ea60 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
1ea70 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
1ea80 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1ea90 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1eaa0 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
1eab0 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
1eac0 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
1ead0 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
1eae0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
1eaf0 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
1eb00 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
1eb10 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
1eb20 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1eb30 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
1eb40 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1eb50 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
1eb60 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
1eb70 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1eb80 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
1eb90 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
1eba0 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
1ebb0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
1ebc0 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
1ebd0 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
1ebe0 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
1ebf0 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
1ec00 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
1ec10 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
1ec20 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
1ec30 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69  _* above. */.  i
1ec40 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
1ec50 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
1ec60 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
1ec70 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
1ec80 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
1ec90 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1eca0 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1ecb0 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
1ecc0 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
1ecd0 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
1ece0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ecf0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
1ed00 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ated */.  char *
1ed10 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f  zAffSdst;      /
1ed20 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
1ed30 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
1ed40 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  Set */.  ExprLis
1ed50 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
1ed60 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
1ed70 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
1ed80 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
1ed90 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
1eda0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
1edb0 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
1edc0 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
1edd0 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
1ede0 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65  T.** tables, the
1edf0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
1ee00 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
1ee10 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
1ee20 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
1ee30 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
1ee40 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
1ee50 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
1ee60 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
1ee70 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
1ee80 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
1ee90 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
1eea0 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
1eeb0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
1eec0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
1eed0 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
1eee0 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69   done within tri
1eef0 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
1ef00 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
1ef10 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
1ef20 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
1ef30 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
1ef40 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
1ef50 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
1ef60 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
1ef70 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
1ef80 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1ef90 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
1efa0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
1efb0 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
1efc0 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
1efd0 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
1efe0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
1eff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1f000 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
1f010 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
1f020 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1f030 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1f040 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
1f050 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
1f060 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
1f070 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
1f080 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
1f090 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
1f0a0 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
1f0b0 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
1f0c0 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  Size of the colu
1f0d0 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e  mn cache.*/.#ifn
1f0e0 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  def SQLITE_N_COL
1f0f0 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53  CACHE.# define S
1f100 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1f110 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   10.#endif../*.*
1f120 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
1f130 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1f140 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1f150 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
1f160 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65  r each.** trigge
1f170 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
1f180 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
1f190 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
1f1a0 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
1f1b0 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
1f1c0 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
1f1d0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
1f1e0 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
1f1f0 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
1f200 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
1f210 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
1f220 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
1f230 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
1f240 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
1f250 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
1f260 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
1f270 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
1f280 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
1f290 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
1f2a0 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
1f2b0 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
1f2c0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1f2d0 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
1f2e0 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
1f2f0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
1f300 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
1f310 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
1f320 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
1f330 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
1f340 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
1f350 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
1f360 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
1f370 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
1f380 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
1f390 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
1f3a0 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
1f3b0 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
1f3c0 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
1f3d0 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
1f3e0 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
1f3f0 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
1f400 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
1f410 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65   INSERT.** state
1f420 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
1f430 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
1f440 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
1f450 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1f460 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
1f470 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
1f480 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
1f490 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
1f4a0 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
1f4b0 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
1f4c0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
1f4d0 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
1f4e0 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
1f4f0 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
1f500 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
1f510 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
1f520 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
1f530 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
1f540 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
1f550 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
1f560 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
1f570 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
1f580 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
1f590 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1f5a0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
1f5b0 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
1f5c0 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
1f5d0 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
1f5e0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
1f5f0 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
1f600 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
1f610 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
1f620 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
1f630 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1f640 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
1f650 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
1f660 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1f670 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b  ed char yDbMask[
1f680 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  (SQLITE_MAX_ATTA
1f690 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65  CHED+9)/8];.# de
1f6a0 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
1f6b0 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49  M,I)    (((M)[(I
1f6c0 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29  )/8]&(1<<((I)&7)
1f6d0 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
1f6e0 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
1f6f0 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c     memset((M),0,
1f700 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66  sizeof(M)).# def
1f710 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1f720 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38  I)     (M)[(I)/8
1f730 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a  ]|=(1<<((I)&7)).
1f740 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1f750 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69  llZero(M)   sqli
1f760 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1f770 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  (M).# define DbM
1f780 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1f790 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c  (sqlite3DbMaskAl
1f7a0 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c  lZero(M)==0).#el
1f7b0 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  se.  typedef uns
1f7c0 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73  igned int yDbMas
1f7d0 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  k;.# define DbMa
1f7e0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1f7f0 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29  ((M)&(((yDbMask)
1f800 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20  1)<<(I)))!=0).# 
1f810 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1f820 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a  o(M)      (M)=0.
1f830 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
1f840 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c  et(M,I)     (M)|
1f850 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  =(((yDbMask)1)<<
1f860 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (I)).# define Db
1f870 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
1f880 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65   (M)==0.# define
1f890 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
1f8a0 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69  )   (M)!=0.#endi
1f8b0 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
1f8c0 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
1f8d0 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
1f8e0 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
1f8f0 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
1f900 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
1f910 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
1f920 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
1f930 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
1f940 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
1f950 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
1f960 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
1f970 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
1f980 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
1f990 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
1f9a0 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
1f9b0 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
1f9c0 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
1f9d0 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
1f9e0 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
1f9f0 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
1fa00 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
1fa10 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
1fa20 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
1fa30 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
1fa40 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
1fa50 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
1fa60 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
1fa70 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
1fa80 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
1fa90 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
1faa0 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
1fab0 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a  e shared-cache.*
1fac0 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  * feature is ena
1fad0 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33  bled (if sqlite3
1fae0 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64  Tsd()->useShared
1faf0 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54  Data is true). T
1fb00 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  hey are.** used 
1fb10 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74  to store the set
1fb20 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20   of table-locks 
1fb30 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
1fb40 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a  statement being.
1fb50 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e  ** compiled. Fun
1fb60 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62  ction sqlite3Tab
1fb70 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64  leLock() is used
1fb80 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20   to add entries 
1fb90 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a  to the.** list..
1fba0 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20  */.struct Parse 
1fbb0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1fbc0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1fbd0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74  main database st
1fbe0 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61  ructure */.  cha
1fbf0 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
1fc00 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65    /* An error me
1fc10 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20  ssage */.  Vdbe 
1fc20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
1fc30 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72  /* An engine for
1fc40 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62   executing datab
1fc50 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a  ase bytecode */.
1fc60 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
1fc70 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
1fc80 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75   code from execu
1fc90 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  tion */.  u8 col
1fca0 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f  NamesSet;      /
1fcb0 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f  * TRUE after OP_
1fcc0 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62  ColumnName has b
1fcd0 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56  een issued to pV
1fce0 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63  dbe */.  u8 chec
1fcf0 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a  kSchema;      /*
1fd00 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63   Causes schema c
1fd10 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65  ookie check afte
1fd20 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  r an error */.  
1fd30 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20  u8 nested;      
1fd40 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1fd50 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
1fd60 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64  o the parser/cod
1fd70 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
1fd80 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20   u8 nTempReg;   
1fd90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1fda0 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  of temporary reg
1fdb0 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52  isters in aTempR
1fdc0 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d  eg[] */.  u8 isM
1fdd0 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f  ultiWrite;     /
1fde0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1fdf0 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69  ent may modify/i
1fe00 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72  nsert multiple r
1fe10 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41  ows */.  u8 mayA
1fe20 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  bort;         /*
1fe30 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
1fe40 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20  nt may throw an 
1fe50 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20  ABORT exception 
1fe60 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f  */.  u8 hasCompo
1fe70 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65  und;      /* Nee
1fe80 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76  d to invoke conv
1fe90 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1fea0 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1feb0 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63  .  u8 okConstFac
1fec0 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f  tor;    /* OK to
1fed0 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   factor out cons
1fee0 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69  tants */.  u8 di
1fef0 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20  sableLookaside; 
1ff00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d  /* Number of tim
1ff10 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73  es lookaside has
1ff20 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a   been disabled *
1ff30 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65  /.  u8 nColCache
1ff40 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1ff50 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
1ff60 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a   aColCache[] */.
1ff70 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b    int nRangeReg;
1ff80 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1ff90 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary 
1ffa0 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
1ffb0 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65  /.  int iRangeRe
1ffc0 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73  g;       /* Firs
1ffd0 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65  t register in te
1ffe0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1fff0 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
20000 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
20010 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
20020 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  rors seen */.  i
20030 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20  nt nTab;        
20040 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20050 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f   previously allo
20060 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f  cated VDBE curso
20070 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  rs */.  int nMem
20080 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
20090 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
200a0 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66   cells used so f
200b0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41  ar */.  int nOpA
200c0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
200d0 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20  Number of slots 
200e0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64  allocated for Vd
200f0 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e  be.aOp[] */.  in
20100 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  t szOpAlloc;    
20110 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d     /* Bytes of m
20120 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f  emory space allo
20130 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61  cated for Vdbe.a
20140 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53  Op[] */.  int iS
20150 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f  elfTab;        /
20160 2a 20 54 61 62 6c 65 20 61 73 73 6f 63 69 61 74  * Table associat
20170 65 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78  ed with an index
20180 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65 67   on expr, or neg
20190 61 74 69 76 65 0a 20 20 20 20 20 20 20 20 20 20  ative.          
201a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
201b0 6f 66 20 74 68 65 20 62 61 73 65 20 72 65 67 69  of the base regi
201c0 73 74 65 72 20 64 75 72 69 6e 67 20 63 68 65 63  ster during chec
201d0 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76 61  k-constraint eva
201e0 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
201f0 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
20200 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
20210 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
20220 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
20230 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
20240 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
20250 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
20260 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
20270 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
20280 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b  */.  int nLabel;
20290 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
202a0 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
202b0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  ed */.  int *aLa
202c0 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
202d0 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
202e0 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78  e labels */.  Ex
202f0 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
20300 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
20310 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
20320 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
20330 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
20340 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
20350 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
20360 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
20370 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
20380 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
20390 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
203a0 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
203b0 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
203c0 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
203d0 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
203e0 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
203f0 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  s */.  int regRo
20400 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
20410 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
20420 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
20430 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
20440 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
20450 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
20460 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
20470 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
20480 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
20490 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
204a0 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
204b0 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
204c0 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
204d0 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53  program */.#if S
204e0 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
204f0 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74  ED.  int nSelect
20500 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
20510 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74  ber of SELECT st
20520 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f  atements seen */
20530 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
20540 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
20550 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
20560 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
20570 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
20580 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
20590 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
205a0 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
205b0 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
205c0 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
205d0 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
205e0 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
205f0 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
20600 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
20610 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
20620 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50   counters */.  P
20630 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b  arse *pToplevel;
20640 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72      /* Parse str
20650 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20  ucture for main 
20660 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c  program (or NULL
20670 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  ) */.  Table *pT
20680 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54  riggerTab;  /* T
20690 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72  able triggers ar
206a0 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f  e being coded fo
206b0 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  r */.  int addrC
206c0 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41  rTab;       /* A
206d0 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65  ddress of OP_Cre
206e0 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20  ateBtree opcode 
206f0 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  on CREATE TABLE 
20700 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c  */.  u32 nQueryL
20710 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74  oop;      /* Est
20720 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61   number of itera
20730 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79  tions of a query
20740 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f   (10*log2(N)) */
20750 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20  .  u32 oldmask; 
20760 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
20770 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
20780 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
20790 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20   u32 newmask;   
207a0 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
207b0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   new.* columns r
207c0 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
207d0 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20  8 eTriggerOp;   
207e0 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45      /* TK_UPDATE
207f0 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54  , TK_INSERT or T
20800 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38  K_DELETE */.  u8
20810 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20   eOrconf;       
20820 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
20830 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
20840 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65   for trigger ste
20850 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ps */.  u8 disab
20860 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20  leTriggers;  /* 
20870 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20  True to disable 
20880 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f  triggers */..  /
20890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
208a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
208b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
208c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
208d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
208e0 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73  Fields above mus
208f0 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
20900 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66   to zero.  The f
20910 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f  ields that follo
20920 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20  w,.  ** down to 
20930 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
20940 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73   the recursive s
20950 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e  ection, do not n
20960 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69  eed to be.  ** i
20970 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68  nitialized as th
20980 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62  ey will be set b
20990 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64  efore being used
209a0 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
209b0 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e  is.  ** determin
209c0 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50  ed by offsetof(P
209d0 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 2e  arse,aColCache).
209e0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
209f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20a00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20a10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
20a30 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63    struct yColCac
20a40 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61  he {.    int iTa
20a50 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
20a60 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e  * Table cursor n
20a70 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36  umber */.    i16
20a80 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
20a90 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75     /* Table colu
20aa0 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  mn number */.   
20ab0 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20   u8 tempReg;    
20ac0 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69         /* iReg i
20ad0 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65  s a temp registe
20ae0 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20  r that needs to 
20af0 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20  be freed */.    
20b00 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
20b10 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67        /* Nesting
20b20 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e   level */.    in
20b30 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20  t iReg;         
20b40 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20      /* Reg with 
20b50 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
20b60 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f  lumn. 0 means no
20b70 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c  ne. */.    int l
20b80 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ru;             
20b90 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74   /* Least recent
20ba0 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61  ly used entry ha
20bb0 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  s the smallest v
20bc0 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c  alue */.  } aCol
20bd0 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43  Cache[SQLITE_N_C
20be0 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e  OLCACHE];  /* On
20bf0 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
20c00 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f  n cache entry */
20c10 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
20c20 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f  8];        /* Ho
20c30 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74  lding area for t
20c40 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
20c50 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e  rs */.  Token sN
20c60 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  ameToken;       
20c70 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e  /* Token with un
20c80 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61  qualified schema
20c90 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a   object name */.
20ca0 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
20cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20cc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20cd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ce0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
20cf0 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
20d00 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
20d10 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
20d20 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
20d30 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
20d40 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
20d50 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
20d60 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
20d70 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
20d80 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
20d90 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c  ffsetof(Parse,sL
20da0 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65  astToken) so the
20db0 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c   sLastToken fiel
20dc0 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20  d must be the.  
20dd0 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69  ** first field i
20de0 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  n the recursive 
20df0 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  region..  ******
20e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e40 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  **/..  Token sLa
20e50 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  stToken;       /
20e60 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
20e70 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56   parsed */.  ynV
20e80 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  ar nVar;        
20e90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20ea0 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65   of '?' variable
20eb0 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51  s seen in the SQ
20ec0 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38  L so far */.  u8
20ed0 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
20ee0 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
20ef0 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
20f00 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
20f10 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20f30 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50   True if the EXP
20f40 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75  LAIN flag is fou
20f50 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20  nd on the query 
20f60 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
20f70 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
20f80 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65  BLE.  u8 declare
20f90 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  Vtab;           
20fa0 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64  /* True if insid
20fb0 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
20fc0 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e  e_vtab() */.  in
20fd0 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
20fe0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20ff0 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
21000 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
21010 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69  endif.  int nHei
21020 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
21030 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
21040 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
21050 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
21060 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
21070 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
21080 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
21090 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
210a0 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
210b0 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
210c0 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
210d0 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
210e0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
210f0 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
21100 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
21110 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
21120 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b    VList *pVList;
21130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
21140 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76  apping between v
21150 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e  ariable names an
21160 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56  d numbers */.  V
21170 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
21180 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
21190 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
211a0 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
211b0 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
211c0 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
211d0 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
211e0 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
211f0 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
21200 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
21210 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
21220 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
21230 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
21240 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
21250 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
21260 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
21270 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
21280 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
21290 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
212a0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
212b0 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
212c0 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
212d0 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
212e0 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64  llbacks */.#ifnd
212f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
21300 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f  IRTUALTABLE.  To
21310 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20  ken sArg;       
21320 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
21330 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f  ete text of a mo
21340 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f  dule argument */
21350 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61  .  Table **apVta
21360 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20  bLock;       /* 
21370 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75  Pointer to virtu
21380 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e  al tables needin
21390 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e  g locking */.#en
213a0 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f  dif.  Table *pZo
213b0 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20  mbieTab;        
213c0 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65  /* List of Table
213d0 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65   objects to dele
213e0 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65  te after code ge
213f0 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  n */.  TriggerPr
21400 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20  g *pTriggerPrg; 
21410 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
21420 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72  of coded trigger
21430 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  s */.  With *pWi
21440 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
21450 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48   /* Current WITH
21460 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
21470 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
21480 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20  hToFree;        
21490 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54  /* Free this WIT
214a0 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20  H object at the 
214b0 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65  end of the parse
214c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69   */.};../*.** Si
214d0 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73  zes and pointers
214e0 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72 74   of various part
214f0 73 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f  s of the Parse o
21500 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  bject..*/.#defin
21510 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f  e PARSE_HDR_SZ o
21520 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43  ffsetof(Parse,aC
21530 6f 6c 43 61 63 68 65 29 20 2f 2a 20 52 65 63 75  olCache) /* Recu
21540 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61  rsive part w/o a
21550 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69  ColCache*/.#defi
21560 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45  ne PARSE_RECURSE
21570 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72  _SZ offsetof(Par
21580 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20  se,sLastToken)  
21590 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70    /* Recursive p
215a0 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
215b0 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69  ARSE_TAIL_SZ (si
215c0 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53  zeof(Parse)-PARS
215d0 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a  E_RECURSE_SZ) /*
215e0 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70   Non-recursive p
215f0 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
21600 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28  ARSE_TAIL(X) (((
21610 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45  char*)(X))+PARSE
21620 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a  _RECURSE_SZ)  /*
21630 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c   Pointer to tail
21640 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72   */../*.** Retur
21650 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e  n true if curren
21660 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71  tly inside an sq
21670 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
21680 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69  ab() call..*/.#i
21690 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
216a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
216b0 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
216c0 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
216d0 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
216e0 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
216f0 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a  e->declareVtab).
21700 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
21710 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
21720 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
21730 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c  ture can be decl
21740 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20  ared on a stack 
21750 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73  and used.** to s
21760 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41  ave the Parse.zA
21770 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65  uthContext value
21780 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
21790 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65  be restored late
217a0 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  r..*/.struct Aut
217b0 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e  hContext {.  con
217c0 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
217d0 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20  ntext;   /* Put 
217e0 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74  saved Parse.zAut
217f0 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f  hContext here */
21800 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
21810 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
21820 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75  * The Parse stru
21830 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cture */.};../*.
21840 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67  ** Bitfield flag
21850 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69  s for P5 value i
21860 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65  n various opcode
21870 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  s..**.** Value c
21880 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
21890 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
218a0 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  )):.**    OPFLAG
218b0 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d  _LENGTHARG    ==
218c0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
218d0 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  GTH.**    OPFLAG
218e0 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d  _TYPEOFARG    ==
218f0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
21900 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  EOF.**    OPFLAG
21910 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d  _BULKCSR      ==
21920 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a   BTREE_BULKLOAD.
21930 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45  **    OPFLAG_SEE
21940 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52  KEQ       == BTR
21950 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20  EE_SEEK_EQ.**   
21960 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
21970 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f  E    == BTREE_FO
21980 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50  RDELETE.**    OP
21990 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
219a0 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50  N == BTREE_SAVEP
219b0 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50  OSITION.**    OP
219c0 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
219d0 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45    == BTREE_AUXDE
219e0 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE.*/.#define 
219f0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20  OPFLAG_NCHANGE  
21a00 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
21a10 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74  OP_Insert: Set t
21a20 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
21a30 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ange */.        
21a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21a60 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20  Also used in P2 
21a70 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44  (not P5) of OP_D
21a80 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  elete */.#define
21a90 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
21aa0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
21ab0 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
21ac0 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
21ad0 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
21ae0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
21af0 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65     0x20    /* Se
21b00 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
21b10 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
21b20 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
21b30 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
21b40 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
21b50 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
21b60 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
21b70 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
21b80 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
21b90 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
21ba0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
21bb0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21bc0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
21bd0 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
21be0 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
21bf0 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
21c00 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21c10 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30  _ISNOOP        0
21c20 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x40    /* OP_Del
21c30 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64  ete does pre-upd
21c40 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f  ate-hook only */
21c50 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21c60 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78  LENGTHARG     0x
21c70 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  40    /* OP_Colu
21c80 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
21c90 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65   length() */.#de
21ca0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45  fine OPFLAG_TYPE
21cb0 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20  OFARG     0x80  
21cc0 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
21cd0 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70  nly used for typ
21ce0 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  eof() */.#define
21cf0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
21d00 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
21d10 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20   OP_Open** used 
21d20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72  to open bulk cur
21d30 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  sor */.#define O
21d40 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
21d50 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f      0x02    /* O
21d60 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20  P_Open** cursor 
21d70 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c  uses EQ seek onl
21d80 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
21d90 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20  LAG_FORDELETE   
21da0 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f    0x08    /* OP_
21db0 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20  Open should use 
21dc0 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20  BTREE_FORDELETE 
21dd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21de0 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20  G_P2ISREG       
21df0 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f  0x10    /* P2 to
21e00 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20   OP_Open** is a 
21e10 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
21e20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21e30 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20  G_PERMUTE       
21e40 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
21e50 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70  mpare: use the p
21e60 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64  ermutation */.#d
21e70 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56  efine OPFLAG_SAV
21e80 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20  EPOSITION  0x02 
21e90 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f     /* OP_Delete/
21ea0 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75 72  Insert: save cur
21eb0 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69  sor pos */.#defi
21ec0 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  ne OPFLAG_AUXDEL
21ed0 45 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20  ETE     0x04    
21ee0 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e  /* OP_Delete: in
21ef0 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20  dex in a DELETE 
21f00 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  op */.#define OP
21f10 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49  FLAG_NOCHNG_MAGI
21f20 43 20 20 30 78 36 64 20 20 20 20 2f 2a 20 4f 50  C  0x6d    /* OP
21f30 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73 65 72  _MakeRecord: ser
21f40 69 61 6c 74 79 70 65 20 31 30 20 69 73 20 6f 6b  ialtype 10 is ok
21f50 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20   */../*. * Each 
21f60 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20  trigger present 
21f70 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
21f80 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64  schema is stored
21f90 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   as an instance 
21fa0 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69  of. * struct Tri
21fb0 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e  gger.. *. * Poin
21fc0 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65  ters to instance
21fd0 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
21fe0 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69  ger are stored i
21ff0 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31  n two ways.. * 1
22000 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61  . In the "trigHa
22010 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28  sh" hash table (
22020 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69  part of the sqli
22030 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73  te3* that repres
22040 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64  ents the. *    d
22050 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61  atabase). This a
22060 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74  llows Trigger st
22070 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72  ructures to be r
22080 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65  etrieved by name
22090 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67  .. * 2. All trig
220a0 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20  gers associated 
220b0 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61  with a single ta
220c0 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65  ble form a linke
220d0 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68  d list, using th
220e0 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65  e. *    pNext me
220f0 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54  mber of struct T
22100 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65  rigger. A pointe
22110 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
22120 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a  lement of the. *
22130 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20      linked list 
22140 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65  is stored as the
22150 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62   "pTrigger" memb
22160 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69  er of the associ
22170 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63  ated. *    struc
22180 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54  t Table.. *. * T
22190 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
221a0 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20  ember points to 
221b0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
221c0 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69  t of a linked li
221d0 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67  st. * containing
221e0 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
221f0 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73  nts specified as
22200 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
22210 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74  gram.. */.struct
22220 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61   Trigger {.  cha
22230 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
22240 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65       /* The name
22250 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20   of the trigger 
22260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22270 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72         */.  char
22280 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20   *table;        
22290 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65      /* The table
222a0 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63   or view to whic
222b0 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70  h the trigger ap
222c0 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70  plies */.  u8 op
222d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
222e0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
222f0 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
22300 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20  E, TK_INSERT    
22310 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f       */.  u8 tr_
22320 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  tm;             
22330 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47    /* One of TRIG
22340 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47  GER_BEFORE, TRIG
22350 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45  GER_AFTER */.  E
22360 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20  xpr *pWhen;     
22370 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
22380 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  EN clause of the
22390 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79   expression (may
223a0 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49   be NULL) */.  I
223b0 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b  dList *pColumns;
223c0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69         /* If thi
223d0 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f  s is an UPDATE O
223e0 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  F <column-list> 
223f0 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20  trigger,.       
22400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22410 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d        the <colum
22420 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65  n-list> is store
22430 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  d here */.  Sche
22440 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
22450 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
22460 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69  ntaining the tri
22470 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61  gger */.  Schema
22480 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20   *pTabSchema;   
22490 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
224a0 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
224b0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
224c0 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a  p *step_list; /*
224d0 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72   Link list of tr
224e0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74  igger program st
224f0 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20  eps             
22500 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
22510 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
22520 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73  Next trigger ass
22530 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
22540 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   table */.};../*
22550 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73  .** A trigger is
22560 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45   either a BEFORE
22570 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69   or an AFTER tri
22580 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  gger.  The follo
22590 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a  wing constants.*
225a0 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  * determine whic
225b0 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72  h..**.** If ther
225c0 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74  e are multiple t
225d0 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67  riggers, you mig
225e0 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52  ht of some BEFOR
225f0 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52  E and some AFTER
22600 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73  ..** In that cas
22610 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  es, the constant
22620 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f  s below can be O
22630 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f  Red together..*/
22640 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
22650 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69  _BEFORE  1.#defi
22660 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  ne TRIGGER_AFTER
22670 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69     2../*. * An i
22680 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63  nstance of struc
22690 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73  t TriggerStep is
226a0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61   used to store a
226b0 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74   single SQL stat
226c0 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73  ement. * that is
226d0 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69   a part of a tri
226e0 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
226f0 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66  . * Instances of
22700 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
22710 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69  tep are stored i
22720 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65  n a singly linke
22730 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20  d list (linked. 
22740 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65  * using the "pNe
22750 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65  xt" member) refe
22760 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73  renced by the "s
22770 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
22780 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63   of the. * assoc
22790 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69  iated struct Tri
227a0 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54  gger instance. T
227b0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
227c0 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   of the linked l
227d0 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69  ist is. * the fi
227e0 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20  rst step of the 
227f0 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
22800 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20  . *. * The "op" 
22810 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73  member indicates
22820 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
22830 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e   a "DELETE", "IN
22840 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20  SERT", "UPDATE" 
22850 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73  or. * "SELECT" s
22860 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65  tatement. The me
22870 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74  anings of the ot
22880 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64  her members is d
22890 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
228a0 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70  . * value of "op
228b0 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a  " as follows:. *
228c0 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e  . * (op == TK_IN
228d0 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20  SERT). * orconf 
228e0 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65     -> stores the
228f0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
22900 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63  orithm. * pSelec
22910 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
22920 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
22930 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20   ... SELECT ... 
22940 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
22950 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
22960 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f  this stores a po
22970 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c  inter to the SEL
22980 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f  ECT statement. O
22990 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
229a0 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
229b0 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
229c0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73  the table to ins
229d0 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78  ert into.. * pEx
229e0 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69  prList -> If thi
229f0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
22a00 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e  NTO ... VALUES .
22a10 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
22a20 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
22a30 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76     this stores v
22a40 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65  alues to be inse
22a50 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20  rted. Otherwise 
22a60 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74  NULL.. * pIdList
22a70 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
22a80 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
22a90 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d  ... (<column-nam
22aa0 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a  es>) VALUES ....
22ab0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
22ac0 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
22ad0 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20  this stores the 
22ae0 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20  column-names to 
22af0 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  be. *           
22b00 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f     inserted into
22b10 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
22b20 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61  K_DELETE). * zTa
22b30 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
22b40 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
22b50 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66  able to delete f
22b60 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  rom.. * pWhere  
22b70 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
22b80 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c  lause of the DEL
22b90 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ETE statement if
22ba0 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
22bb0 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
22bc0 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
22bd0 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  L.. *. * (op == 
22be0 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54  TK_UPDATE). * zT
22bf0 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
22c00 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
22c10 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e  table to update.
22c20 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
22c30 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
22c40 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
22c50 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
22c60 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
22c70 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
22c80 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
22c90 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41  * pExprList -> A
22ca0 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c   list of the col
22cb0 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61  umns to update a
22cc0 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd the expressio
22cd0 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20  ns to update. * 
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
22cf0 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65  m to. See sqlite
22d00 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65  3Update() docume
22d10 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61  ntation of "pCha
22d20 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20  nges". *        
22d30 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a        argument..
22d40 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72   *. */.struct Tr
22d50 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38  iggerStep {.  u8
22d60 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
22d70 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
22d80 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
22d90 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b  E, TK_INSERT, TK
22da0 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20  _SELECT */.  u8 
22db0 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
22dc0 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b    /* OE_Rollback
22dd0 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67   etc. */.  Trigg
22de0 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20  er *pTrig;      
22df0 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74  /* The trigger t
22e00 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73  hat this step is
22e10 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20   a part of */.  
22e20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
22e30 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
22e40 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20  tatement or RHS 
22e50 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53  of INSERT INTO S
22e60 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63  ELECT ... */.  c
22e70 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20  har *zTarget;   
22e80 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61      /* Target ta
22e90 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20  ble for DELETE, 
22ea0 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a  UPDATE, INSERT *
22eb0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
22ec0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
22ed0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
22ee0 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
22ef0 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70  E steps */.  Exp
22f00 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74  rList *pExprList
22f10 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20  ; /* SET clause 
22f20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 20 20  for UPDATE */.  
22f30 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b  IdList *pIdList;
22f40 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
22f50 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20  ames for INSERT 
22f60 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a 70 55 70  */.  Upsert *pUp
22f70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 55 70 73  sert;     /* Ups
22f80 65 72 74 20 63 6c 61 75 73 65 73 20 6f 6e 20 61  ert clauses on a
22f90 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68  n INSERT */.  ch
22fa0 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
22fb0 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53     /* Original S
22fc0 51 4c 20 74 65 78 74 20 6f 66 20 74 68 69 73 20  QL text of this 
22fd0 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69  command */.  Tri
22fe0 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
22ff0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
23000 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
23010 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
23020 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
23030 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
23040 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
23050 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
23060 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
23070 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
23080 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
23090 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
230a0 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
230b0 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
230c0 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
230d0 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
230e0 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
230f0 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a  s.** explicit..*
23100 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
23110 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
23120 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
23130 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
23140 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
23150 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
23160 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
23170 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
23180 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
23190 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
231a0 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
231b0 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72  ma */.  int bVar
231c0 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43  Only;       /* C
231d0 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c  heck for variabl
231e0 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c  e references onl
231f0 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  y */.  const cha
23200 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61  r *zDb;    /* Ma
23210 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65  ke sure all obje
23220 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  cts are containe
23230 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61  d in this databa
23240 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
23250 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54  ar *zType;  /* T
23260 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ype of the conta
23270 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
23280 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
23290 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  /.  const Token 
232a0 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20  *pName; /* Name 
232b0 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
232c0 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
232d0 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b  r messages */.};
232e0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
232f0 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75  ted used to accu
23300 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20  mulate the text 
23310 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72  of a string wher
23320 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e  e we.** do not n
23330 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
23340 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69  how big the stri
23350 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68  ng will be in th
23360 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
23370 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71   StrAccum {.  sq
23380 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
23390 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
233a0 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
233b0 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
233c0 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
233d0 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
233e0 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
233f0 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
23400 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20    u32  nAlloc;  
23410 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
23420 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
23430 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
23440 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20    u32  mxAlloc; 
23450 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
23460 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61  m allowed alloca
23470 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20  tion.  0 for no 
23480 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a  malloc usage */.
23490 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20    u32  nChar;   
234a0 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
234b0 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
234c0 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20  o far */.  u8   
234d0 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20  accError;       
234e0 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  /* STRACCUM_NOME
234f0 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f  M or STRACCUM_TO
23500 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70  OBIG */.  u8   p
23510 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f  rintfFlags;    /
23520 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20  * SQLITE_PRINTF 
23530 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  flags below */.}
23540 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  ;.#define STRACC
23550 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65  UM_NOMEM   1.#de
23560 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f  fine STRACCUM_TO
23570 4f 42 49 47 20 20 32 0a 23 64 65 66 69 6e 65 20  OBIG  2.#define 
23580 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e  SQLITE_PRINTF_IN
23590 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20  TERNAL 0x01  /* 
235a0 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c  Internal-use-onl
235b0 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c  y converters all
235c0 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
235d0 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51  SQLITE_PRINTF_SQ
235e0 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20  LFUNC  0x02  /* 
235f0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  SQL function arg
23600 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e  uments to VXPrin
23610 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  tf */.#define SQ
23620 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c  LITE_PRINTF_MALL
23630 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72  OCED 0x04  /* Tr
23640 75 65 20 69 66 20 78 54 65 78 74 20 69 73 20 61  ue if xText is a
23650 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a  llocated space *
23660 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c  /..#define isMal
23670 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58 29 2d  loced(X)  (((X)-
23680 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53  >printfFlags & S
23690 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c  QLITE_PRINTF_MAL
236a0 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a  LOCED)!=0).../*.
236b0 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
236c0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
236d0 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
236e0 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
236f0 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
23700 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72  3Init and OP_Par
23710 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68  seSchema into th
23720 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  e sqlite3InitCal
23730 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65  lback..*/.typede
23740 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c  f struct {.  sql
23750 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
23760 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
23770 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
23780 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
23790 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45  zErrMsg;    /* E
237a0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f  rror message sto
237b0 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  red here */.  in
237c0 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
237d0 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20    /* 0 for main 
237e0 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72  database.  1 for
237f0 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41   TEMP, 2.. for A
23800 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74  TTACHed */.  int
23810 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
23820 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20   /* Result code 
23830 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d  stored here */.}
23840 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
23850 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
23860 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
23870 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
23880 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
23890 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
238a0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
238b0 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
238c0 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
238d0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
238e0 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
238f0 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
23900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23910 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
23920 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
23930 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
23940 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
23950 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23960 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
23970 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
23980 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239a0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
239b0 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
239c0 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72  */.  int bOpenUr
239d0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
239e0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
239f0 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
23a00 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
23a10 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20  .  int bUseCis; 
23a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a30 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
23a40 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
23a50 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
23a60 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f   int bSmallMallo
23a70 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
23a80 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67     /* Avoid larg
23a90 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
23aa0 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ions if true */.
23ab0 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
23ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ad0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
23ae0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
23af0 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
23b00 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
23b10 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
23b20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
23b30 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
23b40 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23b60 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
23b70 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
23b80 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
23b90 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
23ba0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
23bb0 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
23bc0 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20   count */.  int 
23bd0 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20  nStmtSpill;     
23be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23bf0 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70   Stmt-journal sp
23c00 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65  ill-to-disk thre
23c10 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74  shold */.  sqlit
23c20 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
23c30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
23c40 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
23c50 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
23c60 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
23c70 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
23c80 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
23c90 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
23ca0 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
23cb0 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
23cc0 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
23cd0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
23ce0 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
23cf0 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
23d00 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
23d10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
23d20 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
23d30 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
23d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d50 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
23d60 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
23d70 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d90 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
23da0 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
23db0 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
23dc0 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
23dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
23de0 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
23df0 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
23e00 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
23e10 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
23e20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
23e30 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
23e40 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
23e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e60 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
23e70 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
23e80 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23ea0 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
23eb0 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
23ec0 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
23ef0 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
23f00 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
23f10 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
23f20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
23f30 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
23f40 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
23f50 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
23f60 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
23f70 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
23f80 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
23f90 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
23fa0 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20   u32 szPma;     
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fc0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f     /* Maximum So
23fd0 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f  rter PMA size */
23fe0 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
23ff0 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
24000 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
24010 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
24020 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
24030 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
24040 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
24050 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
24060 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24070 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
24080 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
24090 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
240a0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
240b0 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
240c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
240d0 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
240e0 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
240f0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
24100 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
24110 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24120 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
24130 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
24140 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
24150 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
24160 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
24170 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
24180 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
24190 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
241a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241b0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
241c0 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
241d0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
241e0 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
241f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24200 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
24210 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
24220 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
24230 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
24240 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
24250 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
24260 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
24270 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
24280 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
24290 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
242a0 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
242b0 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
242c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242d0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
242e0 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
242f0 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
24300 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
24310 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
24320 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
24330 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
24340 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
24350 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
24360 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
24370 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
24380 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
24390 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
243a0 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
243b0 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
243c0 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
243d0 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
243e0 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
243f0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
24400 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
24410 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
24420 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74  ranch)(void*,int
24430 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68   iSrcLine,u8 eTh
24440 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20  is,u8 eMx);  /* 
24450 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
24460 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41  id *pVdbeBranchA
24470 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24490 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
244a0 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69  rgument */.#endi
244b0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
244c0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e  _UNTESTABLE.  in
244d0 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63  t (*xTestCallbac
244e0 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20  k)(int);        
244f0 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71  /* Invoked by sq
24500 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20  lite3FaultSim() 
24510 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
24520 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
24530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24540 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
24550 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
24560 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65  */.  int iOnceRe
24570 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20  setThreshold;   
24580 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74         /* When t
24590 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20  o reset OP_Once 
245a0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33  counters */.  u3
245b0 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b 20 20  2 szSorterRef;  
245c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245d0 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e 20 62  /* Min size in b
245e0 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f 72 74  ytes to use sort
245f0 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b 0a 0a 2f  er-refs */.};../
24600 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20  *.** This macro 
24610 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f  is used inside o
24620 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  f assert() state
24630 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74  ments to indicat
24640 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73  e that.** the as
24650 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c  sert is only val
24660 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72  id on a well-for
24670 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49  med database.  I
24680 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a  nstead of:.**.**
24690 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29       assert( X )
246a0 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74  ;.**.** One writ
246b0 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  es:.**.**     as
246c0 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55  sert( X || CORRU
246d0 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43  PT_DB );.**.** C
246e0 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75  ORRUPT_DB is tru
246f0 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20  e during normal 
24700 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52  operation.  CORR
24710 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20  UPT_DB does not 
24720 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74  indicate.** that
24730 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
24740 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72   definitely corr
24750 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69  upt, only that i
24760 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75  t might be corru
24770 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20  pt..** For most 
24780 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52  test cases, CORR
24790 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f  UPT_DB is set to
247a0 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73   false using a s
247b0 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65  pecial.** sqlite
247c0 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29  3_test_control()
247d0 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20  .  This enables 
247e0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
247f0 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20  nts to prove.** 
24800 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20  things that are 
24810 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20  always true for 
24820 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
24830 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  bases..*/.#defin
24840 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73  e CORRUPT_DB  (s
24850 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76  qlite3Config.nev
24860 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f  erCorrupt==0)../
24870 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69  *.** Context poi
24880 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e  nter passed down
24890 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65   through the tre
248a0 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63  e-walk..*/.struc
248b0 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72  t Walker {.  Par
248c0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248e0 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72         /* Parser
248f0 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20   context.  */.  
24900 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62  int (*xExprCallb
24910 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78  ack)(Walker*, Ex
24920 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c  pr*);     /* Cal
24930 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73  lback for expres
24940 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28  sions */.  int (
24950 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
24960 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
24970 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *);  /* Callback
24980 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
24990 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74    void (*xSelect
249a0 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65  Callback2)(Walke
249b0 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53  r*,Select*);/* S
249c0 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66  econd callback f
249d0 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
249e0 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b  int walkerDepth;
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
24a10 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65  ber of subquerie
24a20 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b  s */.  u8 eCode;
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a50 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63   /* A small proc
24a60 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20  essing code */. 
24a70 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20   union {        
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 20 2f 2a 20 45 78             /* Ex
24aa0 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c  tra data for cal
24ab0 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d  lback */.    Nam
24ac0 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20  eContext *pNC;  
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ae0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67         /* Naming
24af0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
24b00 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
24b30 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e  ounter */.    in
24b40 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20  t iCur;         
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72          /* A cur
24b70 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
24b80 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
24b90 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
24bb0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
24bc0 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e    struct SrcCoun
24bd0 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20  t *pSrcCount;   
24be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
24bf0 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
24c00 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20  eferences */.   
24c10 20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74   struct CCurHint
24c20 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20   *pCCurHint;    
24c30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
24c40 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72  ed by codeCursor
24c50 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e  Hint() */.    in
24c60 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20  t *aiCol;       
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c80 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79          /* array
24c90 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78   of column index
24ca0 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  es */.    struct
24cb0 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43   IdxCover *pIdxC
24cc0 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  over;           
24cd0 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72      /* Check for
24ce0 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20   index coverage 
24cf0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64  */.    struct Id
24d00 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78  xExprTrans *pIdx
24d10 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
24d20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 64 78 65   /* Convert idxe
24d30 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e  d expr to column
24d40 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
24d50 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d70 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20 63 6c    /* GROUP BY cl
24d80 61 75 73 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65  ause */.    Sele
24d90 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
24da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24db0 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e 47 20        /* HAVING 
24dc0 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  to WHERE clause 
24dd0 63 74 78 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  ctx */.  } u;.};
24de0 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63  ../* Forward dec
24df0 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74  larations */.int
24e00 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
24e10 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
24e20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
24e30 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72  kExprList(Walker
24e40 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
24e50 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
24e60 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65  lect(Walker*, Se
24e70 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
24e80 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70  te3WalkSelectExp
24e90 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  r(Walker*, Selec
24ea0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24eb0 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57  WalkSelectFrom(W
24ec0 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
24ed0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
24ee0 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72  rWalkNoop(Walker
24ef0 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
24f00 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b  qlite3SelectWalk
24f10 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Noop(Walker*, Se
24f20 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
24f30 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46 61 69  te3SelectWalkFai
24f40 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  l(Walker*, Selec
24f50 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  t*);.#ifdef SQLI
24f60 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71  TE_DEBUG.void sq
24f70 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41  lite3SelectWalkA
24f80 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20  ssert2(Walker*, 
24f90 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66  Select*);.#endif
24fa0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63  ../*.** Return c
24fb0 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72  ode from the par
24fc0 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20  se-tree walking 
24fd0 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74  primitives and t
24fe0 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  heir.** callback
24ff0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  s..*/.#define WR
25000 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20  C_Continue    0 
25010 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f    /* Continue do
25020 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e  wn into children
25030 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
25040 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20  Prune       1   
25050 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e  /* Omit children
25060 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61   but continue wa
25070 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a  lking siblings *
25080 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62  /.#define WRC_Ab
25090 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a  ort       2   /*
250a0 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65   Abandon the tre
250b0 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  e walk */../*.**
250c0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
250d0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72  this structure r
250e0 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20  epresents a set 
250f0 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43  of one or more C
25100 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74  TEs.** (common t
25110 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
25120 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73  ) created by a s
25130 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
25140 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74  e..*/.struct Wit
25150 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20  h {.  int nCte; 
25160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25170 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
25180 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57  of CTEs in the W
25190 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ITH clause */.  
251a0 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20  With *pOuter;   
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251c0 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49  /* Containing WI
251d0 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
251e0 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43  LL */.  struct C
251f0 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  te {            
25200 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65          /* For e
25210 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57  ach CTE in the W
25220 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a  ITH clause.... *
25230 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
25240 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25250 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
25260 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
25270 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73   ExprList *pCols
25280 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25290 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c   /* List of expl
252a0 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  icit column name
252b0 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s, or NULL */.  
252c0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
252d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
252e0 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74    /* The definit
252f0 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20  ion of this CTE 
25300 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  */.    const cha
25310 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20  r *zCteErr;     
25320 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
25330 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63  message for circ
25340 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20  ular references 
25350 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a  */.  } a[1];.};.
25360 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25370 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  EBUG./*.** An in
25380 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72  stance of the Tr
25390 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73  eeView object is
253a0 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69   used for printi
253b0 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
253c0 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74  f.** data struct
253d0 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44  ures on sqlite3D
253e0 65 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69  ebugPrintf() usi
253f0 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76  ng a tree-like v
25400 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  iew..*/.struct T
25410 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20  reeView {.  int 
25420 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
25430 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76      /* Which lev
25440 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77  el of the tree w
25450 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38  e are on */.  u8
25460 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20    bLine[100];   
25470 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65        /* Draw ve
25480 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e  rtical in column
25490 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69   i if bLine[i] i
254a0 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e  s true */.};.#en
254b0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
254c0 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73  BUG */../*.** As
254d0 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
254e0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
254f0 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
25500 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
25510 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
25520 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
25530 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
25540 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
25550 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
25560 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
25570 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
25580 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
25590 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
255a0 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255c0 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
255d0 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
255e0 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
25600 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25630 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
25640 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
25650 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
25660 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
25670 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
25680 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
25690 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
256a0 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
256b0 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
256c0 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
256d0 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
256e0 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
256f0 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
25700 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
25710 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
25720 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
25730 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
25740 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
25750 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
25760 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
25770 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
25780 65 33 52 65 70 6f 72 74 45 72 72 6f 72 28 69 6e  e3ReportError(in
25790 74 20 69 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65  t iErr, int line
257a0 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  no, const char *
257b0 7a 54 79 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69  zType);.int sqli
257c0 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
257d0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
257e0 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
257f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
25800 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
25810 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
25820 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
25830 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
25840 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
25850 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
25860 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
25870 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
25880 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
25890 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
258a0 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
258b0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
258c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
258d0 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  BUG.  int sqlite
258e0 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  3NomemError(int)
258f0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  ;.  int sqlite3I
25900 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69  oerrnomemError(i
25910 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
25920 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72  e3CorruptPgnoErr
25930 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20  or(int,Pgno);.# 
25940 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
25950 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  MEM_BKPT sqlite3
25960 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e  NomemError(__LIN
25970 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51  E__).# define SQ
25980 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
25990 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65  _BKPT sqlite3Ioe
259a0 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c  rrnomemError(__L
259b0 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20  INE__).# define 
259c0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50  SQLITE_CORRUPT_P
259d0 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f  GNO(P) sqlite3Co
259e0 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f  rruptPgnoError(_
259f0 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c  _LINE__,(P)).#el
25a00 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
25a10 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51  TE_NOMEM_BKPT SQ
25a20 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66  LITE_NOMEM.# def
25a30 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ine SQLITE_IOERR
25a40 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49  _NOMEM_BKPT SQLI
25a50 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23  TE_IOERR_NOMEM.#
25a60 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
25a70 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73  ORRUPT_PGNO(P) s
25a80 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
25a90 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e  or(__LINE__).#en
25aa0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20  dif../*.** FTS3 
25ab0 61 6e 64 20 46 54 53 34 20 62 6f 74 68 20 72 65  and FTS4 both re
25ac0 71 75 69 72 65 20 76 69 72 74 75 61 6c 20 74 61  quire virtual ta
25ad0 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23  ble support.*/.#
25ae0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
25af0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
25b00 42 4c 45 29 0a 23 20 75 6e 64 65 66 20 53 51 4c  BLE).# undef SQL
25b10 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a  ITE_ENABLE_FTS3.
25b20 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
25b30 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69  NABLE_FTS4.#endi
25b40 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  f../*.** FTS4 is
25b50 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
25b60 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
25b70 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
25b80 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
25b90 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
25ba0 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
25bb0 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
25bc0 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65  also call.** the
25bd0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
25be0 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72  TS4 macro to ser
25bf0 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ve as an alias f
25c00 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
25c10 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
25c20 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
25c30 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
25c40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
25c50 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
25c60 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
25c70 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a  _FTS3 1.#endif..
25c80 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e  /*.** The ctype.
25c90 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64  h header is need
25ca0 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49  ed for non-ASCII
25cb0 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73   systems.  It is
25cc0 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20   also.** needed 
25cd0 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53  by FTS3 when FTS
25ce0 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  3 is included in
25cf0 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   the amalgamatio
25d00 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
25d10 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29  ed(SQLITE_ASCII)
25d20 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
25d30 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
25d40 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65  _FTS3) && define
25d50 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  d(SQLITE_AMALGAM
25d60 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64  ATION)).# includ
25d70 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64  e <ctype.h>.#end
25d80 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
25d90 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
25da0 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72  imic the standar
25db0 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  d library functi
25dc0 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a  ons toupper(),.*
25dd0 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61  * isspace(), isa
25de0 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28  lnum(), isdigit(
25df0 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29  ) and isxdigit()
25e00 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
25e10 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65  The.** sqlite ve
25e20 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  rsions only work
25e30 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
25e40 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  cters, regardles
25e50 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a  s of locale..*/.
25e60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53  #ifdef SQLITE_AS
25e70 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  CII.# define sql
25e80 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
25e90 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74  ((x)&~(sqlite3Ct
25ea0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
25eb0 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29   char)(x)]&0x20)
25ec0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25ed0 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28  e3Isspace(x)   (
25ee0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
25ef0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
25f00 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69  x)]&0x01).# defi
25f10 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
25f20 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  m(x)   (sqlite3C
25f30 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
25f40 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36  d char)(x)]&0x06
25f50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25f60 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28  e3Isalpha(x)   (
25f70 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
25f80 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
25f90 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69  x)]&0x02).# defi
25fa0 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
25fb0 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  t(x)   (sqlite3C
25fc0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
25fd0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34  d char)(x)]&0x04
25fe0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25ff0 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28  e3Isxdigit(x)  (
26000 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
26010 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
26020 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69  x)]&0x08).# defi
26030 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
26040 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55  r(x)   (sqlite3U
26050 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73  pperToLower[(uns
26060 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29  igned char)(x)])
26070 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26080 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 73  3Isquote(x)   (s
26090 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
260a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
260b0 29 5d 26 30 78 38 30 29 0a 23 65 6c 73 65 0a 23  )]&0x80).#else.#
260c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
260d0 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70  oupper(x)   toup
260e0 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  per((unsigned ch
260f0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
26100 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
26110 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e  x)   isspace((un
26120 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
26130 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26140 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73  3Isalnum(x)   is
26150 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20  alnum((unsigned 
26160 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
26170 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
26180 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28  a(x)   isalpha((
26190 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
261a0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
261b0 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
261c0 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  isdigit((unsigne
261d0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
261e0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
261f0 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69  igit(x)  isxdigi
26200 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
26210 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
26220 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
26230 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69     tolower((unsi
26240 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
26250 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
26260 73 71 75 6f 74 65 28 78 29 20 20 20 28 28 78 29  squote(x)   ((x)
26270 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27  =='"'||(x)=='\''
26280 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d  ||(x)=='['||(x)=
26290 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a 23 69 66  ='`').#endif.#if
262a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
262b0 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
262c0 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  IAGS.int sqlite3
262d0 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 23 65  IsIdChar(u8);.#e
262e0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
262f0 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72  rnal function pr
26300 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20  ototypes.*/.int 
26310 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63  sqlite3StrICmp(c
26320 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
26330 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
26340 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
26350 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
26360 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79  *sqlite3ColumnTy
26370 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a  pe(Column*,char*
26380 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
26390 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
263a0 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
263b0 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
263c0 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
263d0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
263e0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
263f0 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
26400 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
26410 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
26420 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
26430 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
26440 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
26450 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
26460 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
26470 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
26480 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c  bMallocRawNN(sql
26490 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61  ite3*, u64);.cha
264a0 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
264b0 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
264c0 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
264d0 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
264e0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
264f0 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61  char*, u64);.cha
26500 72 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e  r *sqlite3DbSpan
26510 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
26520 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
26530 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  har*);.void *sql
26540 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
26550 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
26560 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
26570 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
26580 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
26590 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
265a0 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
265b0 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
265c0 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
265d0 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
265e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
265f0 44 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33  DbFreeNN(sqlite3
26600 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
26610 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
26620 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
26630 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
26640 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
26650 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
26660 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  PageMalloc(int);
26670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67  .void sqlite3Pag
26680 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  eFree(void*);.vo
26690 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74  id sqlite3MemSet
266a0 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23  Default(void);.#
266b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
266c0 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71  TESTABLE.void sq
266d0 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f  lite3BenignMallo
266e0 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28  cHooks(void (*)(
266f0 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28  void), void (*)(
26700 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69  void));.#endif.i
26710 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
26720 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
26730 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
26740 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
26750 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
26760 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
26770 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
26780 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
26790 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
267a0 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
267b0 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
267c0 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
267d0 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
267e0 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
267f0 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
26800 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
26810 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
26820 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
26830 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
26840 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
26850 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
26860 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
26870 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
26880 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
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 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
268b0 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
268c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
268d0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
268e0 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
268f0 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
26900 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
26910 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23  ree(D,P).#else.#
26920 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
26930 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
26940 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  )   sqlite3DbMal
26950 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65  locRaw(D,N).# de
26960 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
26970 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
26980 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
26990 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69  Zero(D,N).# defi
269a0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
269b0 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73  ree(D,P)       s
269c0 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50  qlite3DbFree(D,P
269d0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20  ).#endif../* Do 
269e0 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d  not allow both M
269f0 45 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59  EMSYS5 and MEMSY
26a00 53 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64  S3 to be defined
26a10 20 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74   together.  If t
26a20 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61  hey.** are, disa
26a30 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23  ble MEMSYS3.*/.#
26a40 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
26a50 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
26a60 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
26a70 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
26a80 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
26a90 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45  );.#undef SQLITE
26aa0 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
26ab0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
26ac0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
26ad0 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
26ae0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
26af0 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
26b00 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
26b10 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
26b20 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
26b30 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
26b40 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
26b50 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
26b60 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
26b70 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
26b80 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
26b90 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
26ba0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
26bb0 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
26bc0 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
26bd0 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
26be0 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
26bf0 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
26c00 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  );.#endif.#if !d
26c10 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
26c20 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65  TEX_OMIT) && !de
26c30 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
26c40 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20  EX_NOOP).  void 
26c50 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
26c60 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73  rier(void);.#els
26c70 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
26c80 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
26c90 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65  ).#endif..sqlite
26ca0 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
26cb0 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
26cc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
26cd0 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b  tusUp(int, int);
26ce0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
26cf0 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74  tusDown(int, int
26d00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26d10 74 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69  tatusHighwater(i
26d20 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
26d30 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73  lite3LookasideUs
26d40 65 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a  ed(sqlite3*,int*
26d50 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f  );../* Access to
26d60 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79   mutexes used by
26d70 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
26d80 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74  ) */.sqlite3_mut
26d90 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68  ex *sqlite3Pcach
26da0 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73  e1Mutex(void);.s
26db0 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
26dc0 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78  lite3MallocMutex
26dd0 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66  (void);..#if def
26de0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
26df0 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44  LE_MULTITHREADED
26e00 5f 43 48 45 43 4b 53 29 20 26 26 20 21 64 65 66  _CHECKS) && !def
26e10 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
26e20 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c  X_OMIT).void sql
26e30 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43  ite3MutexWarnOnC
26e40 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65  ontention(sqlite
26e50 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65  3_mutex*);.#else
26e60 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26e70 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74  3MutexWarnOnCont
26e80 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66  ention(x).#endif
26e90 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
26ea0 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
26eb0 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  OINT.  int sqlit
26ec0 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b  e3IsNaN(double);
26ed0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
26ee0 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20  sqlite3IsNaN(X) 
26ef0 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
26f00 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
26f10 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
26f20 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
26f30 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
26f40 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  SQL.** functions
26f50 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
26f60 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65  are the paramete
26f70 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66  rs to the printf
26f80 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  () function..*/.
26f90 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
26fa0 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e  uments {.  int n
26fb0 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
26fc0 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d      /* Total num
26fd0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
26fe0 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b   */.  int nUsed;
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
27000 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
27010 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61  ments used so fa
27020 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  r */.  sqlite3_v
27030 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20  alue **apArg;   
27040 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  /* The argument 
27050 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f  values */.};..vo
27060 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  id sqlite3VXPrin
27070 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f  tf(StrAccum*, co
27080 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
27090 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  st);.void sqlite
270a0 33 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  3XPrintf(StrAccu
270b0 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  m*, const char*,
270c0 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
270d0 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69  ite3MPrintf(sqli
270e0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
270f0 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
27100 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
27110 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
27120 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69  r*, va_list);.#i
27130 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
27140 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
27150 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ed(SQLITE_HAVE_O
27160 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20  S_TRACE).  void 
27170 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
27180 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  tf(const char*, 
27190 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ...);.#endif.#if
271a0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
271b0 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71  TEST).  void *sq
271c0 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50  lite3TestTextToP
271d0 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  tr(const char*);
271e0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
271f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
27200 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
27210 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72  3TreeViewExpr(Tr
27220 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
27230 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  xpr*, u8);.  voi
27240 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
27250 77 42 61 72 65 45 78 70 72 4c 69 73 74 28 54 72  wBareExprList(Tr
27260 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
27270 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
27280 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
27290 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78  qlite3TreeViewEx
272a0 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a  prList(TreeView*
272b0 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  , const ExprList
272c0 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  *, u8, const cha
272d0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
272e0 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65 63  te3TreeViewSelec
272f0 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
27300 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b  st Select*, u8);
27310 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
27320 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65 65  reeViewWith(Tree
27330 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74  View*, const Wit
27340 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  h*, u8);.#endif.
27350 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
27360 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
27370 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
27380 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
27390 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61  lite3ErrorMsg(Pa
273a0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
273b0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
273c0 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
273d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
273e0 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e  3TokenInit(Token
273f0 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  *,char*);.int sq
27400 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65  lite3KeywordCode
27410 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
27420 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
27430 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
27440 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  r(Parse*, const 
27450 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  char*, char **);
27460 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e  .void sqlite3Fin
27470 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a  ishCoding(Parse*
27480 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
27490 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29  tTempReg(Parse*)
274a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
274b0 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72  leaseTempReg(Par
274c0 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  se*,int);.int sq
274d0 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67  lite3GetTempRang
274e0 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
274f0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
27500 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  seTempRange(Pars
27510 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  e*,int,int);.voi
27520 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65  d sqlite3ClearTe
27530 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65  mpRegCache(Parse
27540 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
27550 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
27560 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67  te3NoTempsInRang
27570 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
27580 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a  );.#endif.Expr *
27590 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63  sqlite3ExprAlloc
275a0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
275b0 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  nst Token*,int);
275c0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
275d0 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  pr(sqlite3*,int,
275e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
275f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74  id sqlite3ExprAt
27600 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c  tachSubtrees(sql
27610 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72  ite3*,Expr*,Expr
27620 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
27630 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72  sqlite3PExpr(Par
27640 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c  se*, int, Expr*,
27650 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
27660 6c 69 74 65 33 50 45 78 70 72 41 64 64 53 65 6c  lite3PExprAddSel
27670 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
27680 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70  *, Select*);.Exp
27690 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
276a0 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
276b0 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
276c0 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
276d0 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
276e0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
276f0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
27700 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
27710 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33  arse*, Expr*, u3
27720 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
27730 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74  ExprDelete(sqlit
27740 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  e3*, Expr*);.Exp
27750 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
27760 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
27770 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
27780 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
27790 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
277a0 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72 73  ppendVector(Pars
277b0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c  e*,ExprList*,IdL
277c0 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
277d0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
277e0 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78  tSetSortOrder(Ex
277f0 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f  prList*,int);.vo
27800 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
27810 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
27820 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
27830 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
27840 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
27850 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
27860 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
27870 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
27880 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
27890 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
278a0 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  3*, ExprList*);.
278b0 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c  u32 sqlite3ExprL
278c0 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45  istFlags(const E
278d0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
278e0 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74  qlite3Init(sqlit
278f0 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  e3*, char**);.in
27900 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  t sqlite3InitCal
27910 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74  lback(void*, int
27920 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a  , char**, char**
27930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
27940 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b  ragma(Parse*,Tok
27950 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
27960 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  *,int);.#ifndef 
27970 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
27980 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20  UALTABLE.Module 
27990 2a 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74  *sqlite3PragmaVt
279a0 61 62 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  abRegister(sqlit
279b0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a  e3*,const char *
279c0 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76  zName);.#endif.v
279d0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
279e0 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
279f0 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
27a00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
27a10 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
27a20 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
27a30 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
27a40 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
27a50 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
27a60 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72  lite3CommitInter
27a70 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74  nalChanges(sqlit
27a80 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
27a90 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61  e3DeleteColumnNa
27aa0 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62  mes(sqlite3*,Tab
27ab0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
27ac0 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72  3ColumnsFromExpr
27ad0 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72  List(Parse*,Expr
27ae0 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d  List*,i16*,Colum
27af0 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n**);.void sqlit
27b00 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d  e3SelectAddColum
27b10 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f  nTypeAndCollatio
27b20 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
27b30 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
27b40 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
27b50 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
27b60 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
27b70 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
27b80 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
27b90 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  int);.Index *sql
27ba0 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
27bb0 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36  dex(Table*);.i16
27bc0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
27bd0 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31  Index(Index*, i1
27be0 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  6);.void sqlite3
27bf0 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
27c00 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
27c10 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
27c20 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  ;.#if SQLITE_ENA
27c30 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
27c40 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NS.  void sqlite
27c50 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
27c60 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a  sFromName(Table*
27c70 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73  , Column*);.#els
27c80 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27c90 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69  e3ColumnProperti
27ca0 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20  esFromName(T,C) 
27cb0 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64  /* no-op */.#end
27cc0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
27cd0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  ddColumn(Parse*,
27ce0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Token*,Token*);.
27cf0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
27d00 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
27d10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27d20 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
27d30 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
27d40 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
27d50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
27d60 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
27d70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
27d80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
27d90 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72  DefaultValue(Par
27da0 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
27db0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
27dc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27dd0 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50  AddCollateType(P
27de0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
27df0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
27e00 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
27e10 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c  n*,Token*,u8,Sel
27e20 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
27e30 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74  e3ParseUri(const
27e40 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
27e50 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a  r*,unsigned int*
27e60 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
27e70 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66        sqlite3_vf
27e80 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20  s**,char**,char 
27e90 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69  **);.Btree *sqli
27ea0 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65  te3DbNameToBtree
27eb0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
27ec0 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20  char*);..#ifdef 
27ed0 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
27ee0 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  E.# define sqlit
27ef0 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51  e3FaultSim(X) SQ
27f00 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20  LITE_OK.#else.  
27f10 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74  int sqlite3Fault
27f20 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  Sim(int);.#endif
27f30 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65  ..Bitvec *sqlite
27f40 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33  3BitvecCreate(u3
27f50 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
27f60 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63  itvecTest(Bitvec
27f70 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
27f80 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f  ite3BitvecTestNo
27f90 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75  tNull(Bitvec*, u
27fa0 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
27fb0 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63  BitvecSet(Bitvec
27fc0 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
27fd0 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72  lite3BitvecClear
27fe0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76  (Bitvec*, u32, v
27ff0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
28000 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79  te3BitvecDestroy
28010 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73  (Bitvec*);.u32 s
28020 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65  qlite3BitvecSize
28030 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64  (Bitvec*);.#ifnd
28040 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
28050 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33  ABLE.int sqlite3
28060 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
28070 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e  t(int,int*);.#en
28080 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c  dif..RowSet *sql
28090 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73  ite3RowSetInit(s
280a0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20  qlite3*, void*, 
280b0 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76  unsigned int);.v
280c0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
280d0 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b  tClear(RowSet*);
280e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
280f0 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74  SetInsert(RowSet
28100 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, i64);.int sql
28110 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52  ite3RowSetTest(R
28120 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74  owSet*, int iBat
28130 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  ch, i64);.int sq
28140 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
28150 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a  RowSet*, i64*);.
28160 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
28170 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54  ateView(Parse*,T
28180 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
28190 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65  en*,ExprList*,Se
281a0 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
281b0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
281c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
281d0 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
281e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
281f0 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
28200 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
28210 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
28220 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
28230 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
28240 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
28250 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69  ,B) 0.#endif..#i
28260 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
28270 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73  ACHED>30.  int s
28280 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
28290 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65  ero(yDbMask);.#e
282a0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
282b0 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
282c0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
282d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
282e0 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
282f0 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
28300 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
28310 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
28320 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
28330 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  able*);.#ifndef 
28340 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
28350 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
28360 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
28370 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
28380 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
28390 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
283a0 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
283b0 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
283c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
283d0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
283e0 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
283f0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
28400 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
28410 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
28420 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
28430 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
28440 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55 70 73  dList*, int, Ups
28450 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ert*);.void *sql
28460 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
28470 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
28480 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
28490 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
284a0 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  IdListAppend(sql
284b0 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  ite3*, IdList*, 
284c0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
284d0 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
284e0 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
284f0 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
28500 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
28510 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
28520 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
28530 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
28540 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
28550 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
28560 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
28570 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
28580 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
28590 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
285a0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
285b0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
285c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285e0 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
285f0 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
28600 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
28610 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
28620 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
28630 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
28640 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
28650 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61  cListFuncArgs(Pa
28660 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
28670 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
28680 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
28690 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
286a0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
286b0 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
286c0 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
286d0 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
286e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
286f0 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
28700 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
28710 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
28720 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
28730 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
28740 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
28750 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
28760 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
28770 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
28780 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f  e3AllocateIndexO
28790 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69  bject(sqlite3*,i
287a0 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a  16,int,char**);.
287b0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
287c0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
287d0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63  oken*,Token*,Src
287e0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
287f0 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  int,Token*,.    
28800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28810 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74        Expr*, int
28820 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
28830 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
28840 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
28850 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
28860 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
28870 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
28880 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
28890 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
288a0 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
288b0 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
288c0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
288d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288e0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
288f0 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72  prList*,u32,Expr
28900 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28910 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
28920 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
28930 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
28940 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
28950 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
28960 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
28970 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
28980 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
28990 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
289a0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
289b0 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
289c0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
289d0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
289e0 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
289f0 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
28a00 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
28a10 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
28a20 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
28a30 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
28a40 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
28a50 73 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29  st*,Expr*,char*)
28a60 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
28a70 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28  lite3DeleteFrom(
28a80 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
28a90 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
28aa0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
28ab0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50   sqlite3Update(P
28ac0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
28ad0 20 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a   ExprList*,Expr*
28ae0 2c 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c 45  ,int,ExprList*,E
28af0 78 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  xpr*,.          
28b00 20 20 20 20 20 20 20 20 20 55 70 73 65 72 74 2a           Upsert*
28b10 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
28b20 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
28b30 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
28b40 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
28b50 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
28b60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28b70 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
28b80 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  fo*);.LogEst sql
28b90 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
28ba0 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(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 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
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 49 73 4f   sqlite3WhereIsO
28bf0 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
28c00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
28c10 68 65 72 65 4f 72 64 65 72 65 64 49 6e 6e 65 72  hereOrderedInner
28c20 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a 29  Loop(WhereInfo*)
28c30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
28c40 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65  reIsSorted(Where
28c50 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
28c60 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65  te3WhereContinue
28c70 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
28c80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
28c90 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68  ereBreakLabel(Wh
28ca0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
28cb0 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65  qlite3WhereOkOne
28cc0 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c  Pass(WhereInfo*,
28cd0 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20   int*);.#define 
28ce0 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20  ONEPASS_OFF     
28cf0 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65   0        /* Use
28d00 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20   of ONEPASS not 
28d10 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
28d20 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c  ne ONEPASS_SINGL
28d30 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20  E   1        /* 
28d40 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f  ONEPASS valid fo
28d50 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75  r a single row u
28d60 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pdate */.#define
28d70 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20   ONEPASS_MULTI  
28d80 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    2        /* ON
28d90 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66  EPASS is valid f
28da0 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  or multiple rows
28db0 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
28dc0 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65  ExprCodeLoadInde
28dd0 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  xColumn(Parse*, 
28de0 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
28df0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
28e00 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
28e10 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62  lumn(Parse*, Tab
28e20 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
28e30 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
28e40 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
28e50 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73  ColumnToReg(Pars
28e60 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
28e70 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28e80 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
28e90 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
28ea0 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
28eb0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
28ec0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28ed0 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c  CodeMove(Parse*,
28ee0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
28ef0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28f00 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73  rCacheStore(Pars
28f10 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
28f20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28f30 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61  ExprCachePush(Pa
28f40 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
28f50 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28  te3ExprCachePop(
28f60 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
28f70 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65  lite3ExprCacheRe
28f80 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  move(Parse*, int
28f90 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28fa0 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
28fb0 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  ar(Parse*);.void
28fc0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
28fd0 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  eAffinityChange(
28fe0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
28ff0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29000 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20  xprCode(Parse*, 
29010 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
29020 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
29030 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78  eCopy(Parse*, Ex
29040 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
29050 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
29060 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
29070 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
29080 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
29090 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
290a0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
290b0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
290c0 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78  eTemp(Parse*, Ex
290d0 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
290e0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
290f0 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78  arget(Parse*, Ex
29100 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
29110 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
29120 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20  ndCache(Parse*, 
29130 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
29140 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
29150 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
29160 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
29170 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69   int, u8);.#defi
29180 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44  ne SQLITE_ECEL_D
29190 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  UP      0x01  /*
291a0 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c   Deep, not shall
291b0 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65  ow copies */.#de
291c0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
291d0 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20  _FACTOR   0x02  
291e0 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f  /* Factor out co
291f0 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a  nstant terms */.
29200 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
29210 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30  CEL_REF      0x0
29220 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69  4  /* Use ExprLi
29230 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
29240 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ol */.#define SQ
29250 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45  LITE_ECEL_OMITRE
29260 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74  F  0x08  /* Omit
29270 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78   if ExprList.u.x
29280 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
29290 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
292a0 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
292b0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
292c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
292d0 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
292e0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
292f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
29300 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61  xprIfFalseDup(Pa
29310 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
29320 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
29330 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
29340 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
29350 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
29360 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41  *);.#define LOCA
29370 54 45 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a  TE_VIEW    0x01.
29380 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e  #define LOCATE_N
29390 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c  OERR   0x02.Tabl
293a0 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
293b0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32  Table(Parse*,u32
293c0 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61   flags,const cha
293d0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
293e0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
293f0 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28  LocateTableItem(
29400 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73  Parse*,u32 flags
29410 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
29420 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
29430 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
29440 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
29450 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
29460 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
29470 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
29480 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
29490 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
294a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
294b0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
294c0 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
294d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
294e0 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
294f0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
29500 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61  int sqlite3RunVa
29510 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c  cuum(char**, sql
29520 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  ite3*, int);.cha
29530 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72  r *sqlite3NameFr
29540 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a  omToken(sqlite3*
29550 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
29560 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
29570 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20  e(Parse*,Expr*, 
29580 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
29590 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
295a0 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45  areSkip(Expr*, E
295b0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
295c0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
295d0 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
295e0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
295f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
29600 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61  prImpliesExpr(Pa
29610 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  rse*,Expr*, Expr
29620 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
29630 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 4e  ite3ExprImpliesN
29640 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78 70 72 2a 2c  onNullRow(Expr*,
29650 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29660 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
29670 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
29680 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
29690 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
296a0 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
296b0 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
296c0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
296d0 33 45 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e  3ExprCoveredByIn
296e0 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69  dex(Expr*, int i
296f0 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78  Cur, Index *pIdx
29700 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75  );.int sqlite3Fu
29710 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72  nctionUsesThisSr
29720 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74  c(Expr*, SrcList
29730 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
29740 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
29750 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
29760 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
29770 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
29780 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
29790 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
297a0 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
297b0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
297c0 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
297d0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
297e0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
297f0 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
29800 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
29810 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
29820 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
29830 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
29840 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
29850 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
29860 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
29870 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
29880 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
29890 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
298a0 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
298b0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
298c0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
298d0 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
298e0 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
298f0 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
29900 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
29910 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
29920 20 73 71 6c 69 74 65 33 45 78 70 72 49 64 54 6f   sqlite3ExprIdTo
29930 54 72 75 65 46 61 6c 73 65 28 45 78 70 72 2a 29  TrueFalse(Expr*)
29940 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
29950 72 54 72 75 74 68 56 61 6c 75 65 28 63 6f 6e 73  rTruthValue(cons
29960 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
29970 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
29980 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ant(Expr*);.int 
29990 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
299a0 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70  stantNotJoin(Exp
299b0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
299c0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
299d0 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20  Function(Expr*, 
299e0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
299f0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
29a00 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
29a10 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
29a20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
29a30 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e  prIsTableConstan
29a40 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69  t(Expr*,int);.#i
29a50 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
29a60 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a  LE_CURSOR_HINTS.
29a70 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
29a80 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28  ontainsSubquery(
29a90 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Expr*);.#endif.i
29aa0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
29ab0 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
29ac0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
29ad0 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
29ae0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
29af0 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
29b00 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
29b10 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
29b20 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
29b30 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
29b40 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
29b50 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
29b60 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a  lete(.    Parse*
29b70 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
29b80 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
29b90 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a  ,u8,u8,u8,int);.
29ba0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
29bb0 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
29bc0 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
29bd0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
29be0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
29bf0 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
29c00 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
29c10 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
29c20 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
29c30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
29c40 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
29c50 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
29c60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
29c70 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
29c80 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
29c90 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
29ca0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cd0 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c   u8,u8,int,int*,
29ce0 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 23  int*,Upsert*);.#
29cf0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
29d00 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20  BLE_NULL_TRIM.  
29d10 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d  void sqlite3SetM
29d20 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62 65  akeRecordP5(Vdbe
29d30 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
29d40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29d50 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35  3SetMakeRecordP5
29d60 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
29d70 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
29d80 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
29d90 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
29da0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
29db0 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
29dc0 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
29dd0 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
29de0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20  able*, int, u8, 
29df0 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
29e00 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
29e10 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
29e20 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
29e30 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
29e40 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
29e50 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
29e60 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
29e70 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
29e80 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
29e90 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
29ea0 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
29eb0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
29ec0 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
29ed0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
29ee0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
29ef0 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
29f00 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
29f10 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
29f20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
29f30 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
29f40 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
29f50 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
29f60 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
29f70 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
29f80 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
29f90 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
29fa0 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
29fb0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
29fc0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
29fd0 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
29fe0 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
29ff0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
2a000 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c  t*,int);.#if SEL
2a010 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
2a020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2a030 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63  ectSetName(Selec
2a040 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
2a050 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2a060 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
2a070 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66  Name(A,B).#endif
2a080 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
2a090 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28  ertBuiltinFuncs(
2a0a0 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46  FuncDef*,int);.F
2a0b0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
2a0c0 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
2a0d0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
2a0e0 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
2a0f0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2a100 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
2a110 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
2a120 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74  lite3RegisterDat
2a130 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76  eTimeFunctions(v
2a140 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2a150 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e  e3RegisterPerCon
2a160 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75  nectionBuiltinFu
2a170 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
2a180 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
2a190 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
2a1a0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2a1b0 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
2a1c0 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
2a1d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
2a1e0 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
2a1f0 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
2a200 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2a210 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
2a220 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2a230 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
2a240 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
2a250 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
2a260 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  le*, Expr*, Expr
2a270 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  List*,Expr*,int)
2a280 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
2a290 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2a2a0 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
2a2b0 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
2a2c0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2a2d0 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
2a2e0 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
2a2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a300 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
2a310 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
2a320 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
2a330 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
2a340 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
2a350 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
2a360 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
2a370 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
2a380 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
2a390 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
2a3a0 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
2a3b0 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
2a3c0 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
2a3d0 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
2a3e0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2a3f0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
2a400 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
2a410 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
2a420 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
2a430 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
2a440 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
2a450 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
2a460 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
2a470 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
2a480 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
2a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4a0 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
2a4b0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2a4c0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
2a4d0 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
2a4e0 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
2a4f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2a500 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2a510 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
2a520 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
2a530 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
2a540 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
2a550 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
2a560 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
2a570 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
2a580 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2a590 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
2a5a0 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
2a5b0 65 6c 65 63 74 2a 2c 0a 20 20 20 20 20 20 20 20  elect*,.        
2a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2a5f0 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67  t char*);.  Trig
2a600 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2a610 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
2a620 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
2a630 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
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 20 20 53 65 6c 65 63 74 2a 2c 75 38 2c 55      Select*,u8,U
2a670 70 73 65 72 74 2a 2c 0a 20 20 20 20 20 20 20 20  psert*,.        
2a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2a6b0 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67  t char*);.  Trig
2a6c0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2a6d0 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65  TriggerUpdateSte
2a6e0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
2a6f0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
2a700 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20 20 20 20  r*, u8,.        
2a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a730 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2a740 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67  t char*);.  Trig
2a750 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2a760 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
2a770 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
2a780 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20 20 20  *, Expr*,.      
2a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7b0 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2a7c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2a7d0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2a7e0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
2a7f0 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
2a800 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
2a810 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
2a820 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
2a830 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
2a840 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
2a850 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
2a860 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
2a870 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
2a880 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
2a890 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
2a8a0 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
2a8b0 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
2a8c0 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
2a8d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2a8e0 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  3IsToplevel(p) (
2a8f0 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d  (p)->pToplevel==
2a900 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
2a910 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
2a920 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46  sExist(B,C,D,E,F
2a930 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
2a940 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
2a950 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
2a960 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
2a970 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66  erPtr(A,B).# def
2a980 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ine sqlite3Unlin
2a990 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
2a9a0 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e  r(A,B,C).# defin
2a9b0 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
2a9c0 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c  Trigger(A,B,C,D,
2a9d0 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66  E,F,G,H,I).# def
2a9e0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
2a9f0 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
2aa00 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64  A,B,C,D,E,F).# d
2aa10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
2aa20 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30  ggerList(X, Y) 0
2aa30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2aa40 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
2aa50 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) p.# define sql
2aa60 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
2aa70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 1.# define sql
2aa80 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
2aa90 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  sk(A,B,C,D,E,F,G
2aaa0 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  ) 0.#endif..int 
2aab0 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28  sqlite3JoinType(
2aac0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2aad0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2aae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
2aaf0 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ateForeignKey(Pa
2ab00 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2ab10 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73   Token*, ExprLis
2ab20 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  t*, int);.void s
2ab30 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69  qlite3DeferForei
2ab40 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e  gnKey(Parse*, in
2ab50 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2ab60 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
2ab70 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  ATION.  void sql
2ab80 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72  ite3AuthRead(Par
2ab90 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61  se*,Expr*,Schema
2aba0 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
2abb0 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
2abc0 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
2abd0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2abe0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2abf0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
2ac00 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
2ac10 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
2ac20 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
2ac30 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
2ac40 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2ac50 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
2ac60 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  xt*);.  int sqli
2ac70 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50  te3AuthReadCol(P
2ac80 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2ac90 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  r *, const char 
2aca0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  *, int);.#else.#
2acb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
2acc0 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29  uthRead(a,b,c,d)
2acd0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2ace0 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63  3AuthCheck(a,b,c
2acf0 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f  ,d,e)    SQLITE_
2ad00 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  OK.# define sqli
2ad10 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
2ad20 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69  sh(a,b,c).# defi
2ad30 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
2ad40 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76  ntextPop(a)  ((v
2ad50 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a  oid)(a)).#endif.
2ad60 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61  void sqlite3Atta
2ad70 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
2ad80 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
2ad90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74  .void sqlite3Det
2ada0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
2adb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2adc0 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a  FixInit(DbFixer*
2add0 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63  , Parse*, int, c
2ade0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2adf0 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  t Token*);.int s
2ae00 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74  qlite3FixSrcList
2ae10 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69  (DbFixer*, SrcLi
2ae20 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2ae30 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78  3FixSelect(DbFix
2ae40 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
2ae50 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
2ae60 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  r(DbFixer*, Expr
2ae70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2ae80 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78  ixExprList(DbFix
2ae90 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
2aea0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54  .int sqlite3FixT
2aeb0 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78  riggerStep(DbFix
2aec0 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  er*, TriggerStep
2aed0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2aee0 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  toF(const char *
2aef0 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c  z, double*, int,
2af00 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2af10 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20  3GetInt32(const 
2af20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69  char *, int*);.i
2af30 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63  nt sqlite3Atoi(c
2af40 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66  onst char*);.#if
2af50 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2af60 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74  _UTF16.int sqlit
2af70 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
2af80 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
2af90 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65  , int nChar);.#e
2afa0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2afb0 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
2afc0 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
2afd0 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
2afe0 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
2aff0 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45  onst u8**);.LogE
2b000 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
2b010 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71  (u64);.LogEst sq
2b020 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c  lite3LogEstAdd(L
2b030 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23  ogEst,LogEst);.#
2b040 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b050 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2b060 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
2b070 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
2b080 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23  ouble);.#endif.#
2b090 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2b0a0 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
2b0b0 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20  ANSTATUS) || \. 
2b0c0 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
2b0d0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
2b0e0 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20  R_STAT4) || \.  
2b0f0 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
2b100 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54  _EXPLAIN_ESTIMAT
2b110 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c  ED_ROWS).u64 sql
2b120 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
2b130 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a  LogEst);.#endif.
2b140 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c  VList *sqlite3VL
2b150 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c  istAdd(sqlite3*,
2b160 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  VList*,const cha
2b170 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e  r*,int,int);.con
2b180 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2b190 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56  VListNumToName(V
2b1a0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  List*,int);.int 
2b1b0 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65  sqlite3VListName
2b1c0 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e  ToNum(VList*,con
2b1d0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a  st char*,int);..
2b1e0 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
2b1f0 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
2b200 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
2b210 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
2b220 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
2b230 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
2b240 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
2b250 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
2b260 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
2b270 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e  c.** file..*/.in
2b280 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
2b290 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
2b2a0 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69  *, u64);.u8 sqli
2b2b0 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e  te3GetVarint(con
2b2c0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2b2d0 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73   *, u64 *);.u8 s
2b2e0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
2b2f0 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  2(const unsigned
2b300 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b   char *, u32 *);
2b310 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
2b320 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f  ntLen(u64 v);../
2b330 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20  *.** The common 
2b340 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61  case is for a va
2b350 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e  rint to be a sin
2b360 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20  gle byte.  They 
2b370 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63  following.** mac
2b380 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63  ros handle the c
2b390 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f  ommon case witho
2b3a0 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63  ut a procedure c
2b3b0 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61  all, but then ca
2b3c0 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64  ll.** the proced
2b3d0 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76  ure for larger v
2b3e0 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69  arints..*/.#defi
2b3f0 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
2b400 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a  ,B)  \.  (u8)((*
2b410 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28  (A)<(u8)0x80)?((
2b420 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a  B)=(u32)*(A)),1:
2b430 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2b440 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28  32((A),(u32 *)&(
2b450 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74  B))).#define put
2b460 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
2b470 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  .  (u8)(((u32)(B
2b480 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28  )<(u32)0x80)?(*(
2b490 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61  A)=(unsigned cha
2b4a0 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c  r)(B)),1:\.  sql
2b4b0 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41  ite3PutVarint((A
2b4c0 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  ),(B))).#define 
2b4d0 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  getVarint    sql
2b4e0 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64  ite3GetVarint.#d
2b4f0 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20  efine putVarint 
2b500 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72     sqlite3PutVar
2b510 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  int...const char
2b520 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66   *sqlite3IndexAf
2b530 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65  finityStr(sqlite
2b540 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  3*, Index*);.voi
2b550 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66  d sqlite3TableAf
2b560 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61  finity(Vdbe*, Ta
2b570 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  ble*, int);.char
2b580 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41   sqlite3CompareA
2b590 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
2b5a0 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b  xpr, char aff2);
2b5b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
2b5c0 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72  xAffinityOk(Expr
2b5d0 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64   *pExpr, char id
2b5e0 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61  x_affinity);.cha
2b5f0 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f  r sqlite3TableCo
2b600 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62  lumnAffinity(Tab
2b610 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73  le*,int);.char s
2b620 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69  qlite3ExprAffini
2b630 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ty(Expr *pExpr);
2b640 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
2b650 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
2b660 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  i64*, int, u8);.
2b670 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72  int sqlite3DecOr
2b680 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63  HexToI64(const c
2b690 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69  har*, i64*);.voi
2b6a0 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69  d sqlite3ErrorWi
2b6b0 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20  thMsg(sqlite3*, 
2b6c0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2b6d0 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,...);.void sqli
2b6e0 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
2b6f0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2b700 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28  ite3SystemError(
2b710 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2b720 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
2b730 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
2b740 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
2b750 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
2b760 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
2b770 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
2b780 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
2b790 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
2b7a0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
2b7b0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2b7c0 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
2b7d0 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ).const char *sq
2b7e0 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74  lite3ErrName(int
2b7f0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
2b800 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2b810 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20  DESERIALIZE.int 
2b820 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e 69 74  sqlite3MemdbInit
2b830 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
2b840 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2b850 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
2b860 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
2b870 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
2b880 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
2b890 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
2b8a0 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
2b8b0 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
2b8c0 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  nt);.CollSeq *sq
2b8d0 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
2b8e0 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2b8f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
2b900 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
2b910 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
2b920 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2b930 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 43 6f  Expr *pExpr);.Co
2b940 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
2b950 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50 61 72 73  prNNCollSeq(Pars
2b960 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2b970 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
2b980 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 4d  ite3ExprCollSeqM
2b990 61 74 63 68 28 50 61 72 73 65 2a 2c 45 78 70 72  atch(Parse*,Expr
2b9a0 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
2b9b0 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
2b9c0 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65  llateToken(Parse
2b9d0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
2b9e0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69   const Token*, i
2b9f0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2ba00 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2ba10 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
2ba20 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
2ba30 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2ba40 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
2ba50 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2ba60 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
2ba70 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
2ba80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2ba90 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
2baa0 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
2bab0 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
2bac0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
2bad0 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
2bae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
2baf0 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
2bb00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
2bb10 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2bb20 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
2bb30 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2bb40 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
2bb50 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
2bb60 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
2bb70 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
2bb80 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2bb90 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
2bba0 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
2bbb0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
2bbc0 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
2bbd0 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
2bbe0 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
2bbf0 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
2bc00 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
2bc10 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
2bc20 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
2bc30 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
2bc40 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
2bc50 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
2bc60 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
2bc70 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
2bc80 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
2bc90 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20  d *,u8,.        
2bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcb0 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
2bcc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2bcd0 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
2bce0 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
2bcf0 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
2bd00 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2bd10 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
2bd20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
2bd30 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66  (sqlite3 *);.#if
2bd40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2bd50 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c  _UTF16.char *sql
2bd60 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c  ite3Utf16to8(sql
2bd70 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f  ite3 *, const vo
2bd80 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  id*, int, u8);.#
2bd90 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2bda0 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
2bdb0 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
2bdc0 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
2bdd0 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
2bde0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
2bdf0 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
2be00 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
2be10 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
2be20 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2be30 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
2be40 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
2be50 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
2be60 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
2be70 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53  st char sqlite3S
2be80 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65  trBINARY[];.exte
2be90 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2bea0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
2beb0 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
2bec0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2bed0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2bee0 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
2bef0 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
2bf00 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
2bf10 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
2bf20 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
2bf30 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
2bf40 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
2bf50 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
2bf60 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
2bf70 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ons;.#ifndef SQL
2bf80 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74  ITE_OMIT_WSD.ext
2bf90 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ern int sqlite3P
2bfa0 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64  endingByte;.#end
2bfb0 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  if.#endif.#ifdef
2bfc0 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65 78   VDBE_PROFILE.ex
2bfd0 74 65 72 6e 20 73 71 6c 69 74 65 33 5f 75 69 6e  tern sqlite3_uin
2bfe0 74 36 34 20 73 71 6c 69 74 65 33 4e 50 72 6f 66  t64 sqlite3NProf
2bff0 69 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 76  ileCnt;.#endif.v
2c000 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50  oid sqlite3RootP
2c010 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33  ageMoved(sqlite3
2c020 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2c030 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2c040 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54  eindex(Parse*, T
2c050 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
2c060 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2c070 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  rFunctions(void)
2c080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2c090 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50  terRenameTable(P
2c0a0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
2c0b0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2c0c0 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f  lite3GetToken(co
2c0d0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2c0e0 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69  r *, int *);.voi
2c0f0 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50  d sqlite3NestedP
2c100 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  arse(Parse*, con
2c110 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
2c120 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69  void sqlite3Expi
2c130 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
2c140 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ents(sqlite3*);.
2c150 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
2c160 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  ubselect(Parse*,
2c170 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   Expr *, int, in
2c180 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2c190 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65  SelectPrep(Parse
2c1a0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
2c1b0 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
2c1c0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f  sqlite3SelectWro
2c1d0 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28  ngNumTermsError(
2c1e0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53  Parse *pParse, S
2c1f0 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73  elect *p);.int s
2c200 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e  qlite3MatchSpanN
2c210 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ame(const char*,
2c220 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2c230 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2c240 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
2c250 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
2c260 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
2c270 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
2c280 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
2c290 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43  rListNames(NameC
2c2a0 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73  ontext*, ExprLis
2c2b0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2c2c0 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
2c2d0 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
2c2e0 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
2c2f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c300 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72  ResolveSelfRefer
2c310 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  ence(Parse*,Tabl
2c320 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  e*,int,Expr*,Exp
2c330 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2c340 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
2c350 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
2c360 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
2c370 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2c380 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2c390 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
2c3a0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
2c3b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2c3c0 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
2c3d0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
2c3e0 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
2c3f0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
2c400 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
2c410 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
2c420 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2c430 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
2c440 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
2c450 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2c460 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
2c470 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
2c480 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  char*, Column*);
2c490 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2c4a0 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
2c4b0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
2c4c0 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
2c4d0 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
2c4e0 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33  andler*, sqlite3
2c4f0 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  _file*);.int sql
2c500 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
2c510 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
2c520 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
2c530 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
2c540 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
2c550 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
2c560 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
2c570 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
2c580 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
2c590 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
2c5a0 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
2c5b0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
2c5c0 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
2c5d0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2c5e0 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
2c5f0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
2c600 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
2c610 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2c620 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
2c630 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2c640 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69  3SchemaClear(voi
2c650 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
2c660 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
2c670 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
2c680 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2c690 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
2c6a0 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
2c6b0 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
2c6c0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f  lite3KeyInfoAllo
2c6d0 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69  c(sqlite3*,int,i
2c6e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c6f0 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65  3KeyInfoUnref(Ke
2c700 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2c710 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2c720 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  Ref(KeyInfo*);.K
2c730 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2c740 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61  eyInfoOfIndex(Pa
2c750 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23  rse*, Index*);.#
2c760 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2c770 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  UG.int sqlite3Ke
2c780 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65  yInfoIsWriteable
2c790 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64  (KeyInfo*);.#end
2c7a0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72  if.int sqlite3Cr
2c7b0 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33  eateFunc(sqlite3
2c7c0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2c7d0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64  , int, int, void
2c7e0 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73   *,.  void (*)(s
2c7f0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2c800 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2c810 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
2c820 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2c830 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2c840 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
2c850 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2c860 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
2c870 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
2c880 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  tor.);.void sqli
2c890 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69  te3OomFault(sqli
2c8a0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
2c8b0 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69  te3OomClear(sqli
2c8c0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2c8d0 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
2c8e0 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
2c8f0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
2c900 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
2c910 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2c920 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
2c930 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a  Accum*, sqlite3*
2c940 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e  , char*, int, in
2c950 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2c960 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53  StrAccumAppend(S
2c970 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
2c980 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  har*,int);.void 
2c990 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
2c9a0 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75  ppendAll(StrAccu
2c9b0 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  m*,const char*);
2c9c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70  .void sqlite3App
2c9d0 65 6e 64 43 68 61 72 28 53 74 72 41 63 63 75 6d  endChar(StrAccum
2c9e0 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61  *,int,char);.cha
2c9f0 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63  r *sqlite3StrAcc
2ca00 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75  umFinish(StrAccu
2ca10 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
2ca20 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53  3StrAccumReset(S
2ca30 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
2ca40 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
2ca50 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
2ca60 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
2ca70 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
2ca80 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
2ca90 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
2caa0 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
2cab0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
2cac0 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
2cad0 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
2cae0 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
2caf0 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
2cb00 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
2cb10 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  u8 *);..#ifndef 
2cb20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
2cb30 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33  UERY.int sqlite3
2cb40 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73  ExprCheckIN(Pars
2cb50 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73  e*, Expr*);.#els
2cb60 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2cb70 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c  e3ExprCheckIN(x,
2cb80 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e  y) SQLITE_OK.#en
2cb90 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2cba0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
2cbb0 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
2cbc0 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
2cbd0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
2cbe0 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
2cbf0 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20  beSetValue(.    
2cc00 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
2cc10 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
2cc20 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  xpr*,int,int,int
2cc30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2cc40 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70  tat4ValueFromExp
2cc50 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
2cc60 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
2cc70 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ue**);.void sqli
2cc80 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65  te3Stat4ProbeFre
2cc90 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  e(UnpackedRecord
2cca0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2ccb0 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74  tat4Column(sqlit
2ccc0 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  e3*, const void*
2ccd0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69  , int, int, sqli
2cce0 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68  te3_value**);.ch
2ccf0 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43  ar sqlite3IndexC
2cd00 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71  olumnAffinity(sq
2cd10 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20  lite3*, Index*, 
2cd20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  int);.#endif../*
2cd30 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
2cd40 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
2cd50 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
2cd60 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2cd70 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20  E_AMALGAMATION. 
2cd80 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61   void *sqlite3Pa
2cd90 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28  rserAlloc(void*(
2cda0 2a 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a 29  *)(u64), Parse*)
2cdb0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2cdc0 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
2cdd0 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
2cde0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2cdf0 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
2ce00 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b  d*, int, Token);
2ce10 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
2ce20 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
2ce30 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
2ce40 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
2ce50 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
2ce60 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
2ce70 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
2ce80 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2ce90 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
2cea0 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
2ceb0 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
2cec0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2ced0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2cee0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2cef0 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
2cf00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2cf10 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
2cf20 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
2cf30 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
2cf40 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
2cf50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2cf60 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2cf70 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
2cf80 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
2cf90 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2cfa0 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
2cfb0 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
2cfc0 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
2cfd0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2cfe0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2cff0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
2d000 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
2d010 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
2d020 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
2d030 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
2d040 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2d050 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
2d060 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2d070 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
2d080 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2d090 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
2d0a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2d0b0 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65  tabLock(X).#  de
2d0c0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2d0d0 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
2d0e0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
2d0f0 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
2d100 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2d110 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
2d120 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
2d130 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2d140 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
2d150 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
2d160 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
2d170 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
2d180 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
2d190 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2d1a0 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
2d1b0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
2d1c0 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
2d1d0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
2d1e0 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65  qlite3 *db, Vdbe
2d1f0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
2d200 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73  e3VtabRollback(s
2d210 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2d220 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2d230 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64  ommit(sqlite3 *d
2d240 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  b);.   void sqli
2d250 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62  te3VtabLock(VTab
2d260 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2d270 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2d280 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
2d290 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
2d2a0 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65  nlockList(sqlite
2d2b0 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  3*);.   int sqli
2d2c0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
2d2d0 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c  (sqlite3 *, int,
2d2e0 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73   int);.   void s
2d2f0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2d300 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71  Errmsg(Vdbe*, sq
2d310 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20  lite3_vtab*);.  
2d320 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33   VTable *sqlite3
2d330 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65  GetVTable(sqlite
2d340 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  3*, Table*);.   
2d350 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 56  Module *sqlite3V
2d360 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  tabCreateModule(
2d370 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a  .     sqlite3*,.
2d380 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2d390 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71 6c  ,.     const sql
2d3a0 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20  ite3_module*,.  
2d3b0 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76     void*,.     v
2d3c0 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20  oid(*)(void*).  
2d3d0 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71   );.#  define sq
2d3e0 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2d3f0 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
2d400 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
2d410 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
2d420 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2d430 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e  EponymousTableIn
2d440 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65  it(Parse*,Module
2d450 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d460 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
2d470 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  leClear(sqlite3*
2d480 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20  ,Module*);.void 
2d490 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
2d4a0 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
2d4b0 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
2d4c0 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
2d4d0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
2d4e0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2d4f0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2d500 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
2d510 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2d520 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2d530 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
2d540 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
2d550 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
2d560 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2d570 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2d580 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
2d590 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2d5a0 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
2d5b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2d5c0 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
2d5d0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
2d5e0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2d5f0 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
2d600 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2d610 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2d620 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
2d630 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
2d640 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
2d650 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
2d660 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
2d670 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
2d680 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
2d690 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
2d6a0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2d6b0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2d6c0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2d6d0 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
2d6e0 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
2d6f0 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
2d700 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
2d710 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
2d720 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
2d730 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
2d740 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
2d750 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
2d760 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
2d770 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
2d780 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2d790 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69  Reset(Parse*);.i
2d7a0 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
2d7b0 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
2d7c0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2d7d0 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
2d7e0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
2d7f0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
2d800 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
2d810 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
2d820 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
2d830 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
2d840 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
2d850 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
2d860 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
2d870 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
2d880 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
2d890 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d8a0 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
2d8b0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
2d8c0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2d8d0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
2d8e0 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
2d8f0 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
2d900 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
2d910 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
2d920 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2d930 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
2d940 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
2d950 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
2d960 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2d970 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
2d980 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2d990 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
2d9a0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2d9b0 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
2d9c0 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
2d9d0 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
2d9e0 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
2d9f0 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
2da00 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
2da10 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  y).#endif.#ifnde
2da20 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50  f SQLITE_OMIT_UP
2da30 53 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73  SERT.  Upsert *s
2da40 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28  qlite3UpsertNew(
2da50 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
2da60 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2da70 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  t*,Expr*);.  voi
2da80 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
2da90 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55  elete(sqlite3*,U
2daa0 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72  psert*);.  Upser
2dab0 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74  t *sqlite3Upsert
2dac0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73  Dup(sqlite3*,Ups
2dad0 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ert*);.  int sql
2dae0 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a  ite3UpsertAnalyz
2daf0 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53  eTarget(Parse*,S
2db00 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29  rcList*,Upsert*)
2db10 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2db20 55 70 73 65 72 74 44 6f 55 70 64 61 74 65 28 50  UpsertDoUpdate(P
2db30 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61  arse*,Upsert*,Ta
2db40 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  ble*,Index*,int)
2db50 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ;.#else.#define 
2db60 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77  sqlite3UpsertNew
2db70 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55 70  (v,w,x,y,z) ((Up
2db80 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e 65  sert*)0).#define
2db90 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 65   sqlite3UpsertDe
2dba0 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69 6e  lete(x,y).#defin
2dbb0 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  e sqlite3UpsertD
2dbc0 75 70 28 78 2c 79 29 20 20 20 20 20 20 20 28 28  up(x,y)       ((
2dbd0 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69  Upsert*)0).#endi
2dbe0 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  f.../* Declarati
2dbf0 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
2dc00 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
2dc10 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
2dc20 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
2dc30 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
2dc40 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
2dc50 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
2dc60 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
2dc70 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
2dc80 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
2dc90 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
2dca0 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
2dcb0 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
2dcc0 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
2dcd0 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
2dce0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
2dcf0 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
2dd00 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
2dd10 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
2dd20 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
2dd30 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a  nctionality is.*
2dd40 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
2dd50 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
2dd60 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
2dd70 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
2dd80 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
2dd90 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2dda0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2ddb0 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
2ddc0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
2ddd0 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
2dde0 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
2ddf0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2de00 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2de10 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2de20 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
2de30 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
2de40 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
2de50 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
2de60 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2de70 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2de80 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
2de90 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
2dea0 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
2deb0 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
2dec0 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
2ded0 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
2dee0 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
2def0 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
2df00 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
2df10 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2df20 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
2df30 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
2df40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2df50 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
2df60 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
2df70 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
2df80 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
2df90 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
2dfa0 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
2dfb0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2dfc0 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
2dfd0 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65  ,c,d)    0.  #de
2dfe0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
2dff0 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20  ferences(a)     
2e000 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
2e010 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e020 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
2e030 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
2e040 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
2e050 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
2e060 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2e070 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
2e080 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
2e090 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
2e0a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2e0b0 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
2e0c0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
2e0d0 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
2e0e0 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
2e0f0 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
2e100 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
2e110 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
2e120 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
2e130 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
2e140 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
2e150 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
2e160 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
2e170 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
2e180 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
2e190 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2e1a0 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
2e1b0 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
2e1c0 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
2e1d0 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
2e1e0 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
2e1f0 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
2e200 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2e210 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  BLE.** is not de
2e220 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
2e230 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2e240 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BLE.  void sqlit
2e250 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2e260 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
2e270 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
2e280 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2e290 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2e2a0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2e2b0 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
2e2c0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
2e2d0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
2e2e0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
2e2f0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
2e300 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
2e310 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
2e320 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2e330 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
2e340 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
2e350 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
2e360 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2e370 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
2e380 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
2e390 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
2e3a0 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
2e3b0 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
2e3c0 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
2e3d0 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
2e3e0 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2e3f0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
2e400 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
2e410 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
2e420 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
2e430 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2e440 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
2e450 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
2e460 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
2e470 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
2e480 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
2e490 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
2e4a0 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
2e4b0 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
2e4c0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
2e4d0 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
2e4e0 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
2e4f0 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
2e500 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2e510 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
2e520 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
2e530 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
2e540 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
2e550 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2e560 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
2e570 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
2e580 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
2e590 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
2e5a0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2e5b0 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
2e5c0 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u32, int*, int*
2e5d0 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  );..int sqlite3J
2e5e0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2e5f0 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
2e600 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
2e610 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
2e620 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  );.int sqlite3Jo
2e630 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
2e640 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65  3_vfs *);.#if de
2e650 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2e660 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
2e670 29 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28  ) \. || defined(
2e680 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
2e690 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
2e6a0 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ).  int sqlite3J
2e6b0 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c  ournalCreate(sql
2e6c0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65  ite3_file *);.#e
2e6d0 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
2e6e0 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f  3JournalIsInMemo
2e6f0 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ry(sqlite3_file 
2e700 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *p);.void sqlite
2e710 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  3MemJournalOpen(
2e720 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
2e730 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ..void sqlite3Ex
2e740 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c  prSetHeightAndFl
2e750 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73  ags(Parse *pPars
2e760 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66  e, Expr *p);.#if
2e770 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
2e780 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73  _DEPTH>0.  int s
2e790 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
2e7a0 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
2e7b0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
2e7c0 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
2e7d0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
2e7e0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2e7f0 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
2e800 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66  ight(x) 0.  #def
2e810 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2e820 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a  heckHeight(x,y).
2e830 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69  #endif..u32 sqli
2e840 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
2e850 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  t u8*);.void sql
2e860 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a  ite3Put4byte(u8*
2e870 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20  , u32);..#ifdef 
2e880 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
2e890 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f  LOCK_NOTIFY.  vo
2e8a0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2e8b0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69  tionBlocked(sqli
2e8c0 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  te3 *, sqlite3 *
2e8d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2e8e0 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
2e8f0 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ked(sqlite3 *db)
2e900 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2e910 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
2e920 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
2e930 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2e940 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2e950 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23  Blocked(x,y).  #
2e960 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2e970 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
2e980 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  (x).  #define sq
2e990 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
2e9a0 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a  losed(x).#endif.
2e9b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2e9c0 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
2e9d0 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
2e9e0 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
2e9f0 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2ea00 64 28 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20  d(YYCOVERAGE).  
2ea10 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2ea20 72 43 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29  rCoverage(FILE*)
2ea30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2ea40 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
2ea50 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
2ea60 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
2ea70 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
2ea80 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
2ea90 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2eaa0 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
2eab0 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
2eac0 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
2ead0 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23  g messages..*/.#
2eae0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2eaf0 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
2eb00 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
2eb10 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
2eb20 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
2eb30 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
2eb40 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
2eb50 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
2eb60 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
2eb70 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
2eb80 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
2eb90 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
2eba0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
2ebb0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
2ebc0 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
2ebd0 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
2ebe0 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
2ebf0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
2ec00 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
2ec10 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
2ec20 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
2ec30 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
2ec40 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
2ec50 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
2ec60 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
2ec70 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
2ec80 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
2ec90 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
2eca0 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
2ecb0 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
2ecc0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2ecd0 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
2ece0 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
2ecf0 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
2ed00 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
2ed10 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
2ed20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
2ed30 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
2ed40 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
2ed50 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
2ed60 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2ed70 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
2ed80 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
2ed90 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2eda0 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2edb0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2edc0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2edd0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2ede0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2edf0 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
2ee00 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
2ee10 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
2ee20 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
2ee30 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
2ee40 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2ee50 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
2ee60 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
2ee70 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
2ee80 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
2ee90 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
2eea0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
2eeb0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
2eec0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2eed0 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
2eee0 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
2eef0 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
2ef00 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
2ef10 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
2ef20 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
2ef30 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
2ef40 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
2ef50 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
2ef60 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
2ef70 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
2ef80 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
2ef90 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
2efa0 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
2efb0 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
2efc0 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
2efd0 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
2efe0 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
2eff0 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
2f000 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
2f010 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
2f020 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
2f030 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
2f040 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
2f050 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
2f060 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2f070 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
2f080 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
2f090 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
2f0a0 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
2f0b0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
2f0c0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
2f0d0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
2f0e0 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a  constraint..**.*
2f0f0 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
2f100 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
2f110 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
2f120 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
2f130 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
2f140 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
2f150 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
2f160 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
2f170 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2f180 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
2f190 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
2f1a0 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
2f1b0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
2f1c0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2f1d0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
2f1e0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
2f1f0 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
2f200 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2f210 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2f220 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
2f230 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
2f240 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2f250 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
2f260 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
2f270 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2f280 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
2f290 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
2f2a0 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
2f2b0 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
2f2c0 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
2f2d0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2f2e0 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
2f2f0 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
2f300 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2f310 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
2f320 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
2f330 43 48 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a  CHE     0x04  /*
2f340 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
2f350 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  cations */../*.*
2f360 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65  * Threading inte
2f370 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c  rface.*/.#if SQL
2f380 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
2f390 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c  HREADS>0.int sql
2f3a0 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65  ite3ThreadCreate
2f3b0 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c  (SQLiteThread**,
2f3c0 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c  void*(*)(void*),
2f3d0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
2f3e0 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51  te3ThreadJoin(SQ
2f3f0 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69  LiteThread*, voi
2f400 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  d**);.#endif..#i
2f410 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2f420 5f 45 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56  _ENABLE_DBPAGE_V
2f430 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
2f440 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
2f450 20 73 71 6c 69 74 65 33 44 62 70 61 67 65 52 65   sqlite3DbpageRe
2f460 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
2f470 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
2f480 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2f490 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
2f4a0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2f4b0 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
2f4c0 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
2f4d0 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
2f4e0 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
2f4f0 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45  ExprVectorSize(E
2f500 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
2f510 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65   sqlite3ExprIsVe
2f520 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72  ctor(Expr *pExpr
2f530 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2f540 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78  VectorFieldSubex
2f550 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  pr(Expr*, int);.
2f560 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2f570 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28  rForVectorField(
2f580 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74  Parse*,Expr*,int
2f590 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2f5a0 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61  ectorErrorMsg(Pa
2f5b0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23  rse*, Expr*);..#
2f5c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f5d0 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
2f5e0 5f 44 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61  _DIAGS.const cha
2f5f0 72 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69  r **sqlite3Compi
2f600 6c 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70  leOptions(int *p
2f610 6e 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  nOpt);.#endif..#
2f620 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49  endif /* SQLITEI
2f630 4e 54 5f 48 20 2a 2f 0a                          NT_H */.