/ Hex Artifact Content
Login

Artifact 2272cd09b7f137bb2423af589d636b5b741037db9b329d359c1ef6556fac5a4c:


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: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 20  malloc failures 
3fb0: 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c  are only possibl
3fc0: 65 20 69 66 20 53 51 4c 49 54 45 5f 54 45 53 54  e if SQLITE_TEST
3fd0: 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 20  _REALLOC_STRESS 
3fe0: 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64 2e 20 20  is.** defined.  
3ff0: 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66 65 6e  We need to defen
4000: 64 20 61 67 61 69 6e 73 74 20 74 68 6f 73 65 20  d against those 
4010: 66 61 69 6c 75 72 65 73 20 77 68 65 6e 20 74 65  failures when te
4020: 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a 20 53 51  sting with.** SQ
4030: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
4040: 43 5f 53 54 52 45 53 53 2c 20 62 75 74 20 77 65  C_STRESS, but we
4050: 20 64 6f 6e 27 74 20 77 61 6e 74 20 74 68 65 20   don't want the 
4060: 75 6e 72 65 61 63 68 61 62 6c 65 20 62 72 61 6e  unreachable bran
4070: 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e 67 20 61  ches.** during a
4080: 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64 2e 20 20   normal build.  
4090: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
40a0: 63 72 6f 20 63 61 6e 20 62 65 20 75 73 65 64 20  cro can be used 
40b0: 74 6f 20 64 69 73 61 62 6c 65 20 74 65 73 74 73  to disable tests
40c0: 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 61 6c 77  .** that are alw
40d0: 61 79 73 20 66 61 6c 73 65 20 65 78 63 65 70 74  ays false except
40e0: 20 77 68 65 6e 20 53 51 4c 49 54 45 5f 54 45 53   when SQLITE_TES
40f0: 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  T_REALLOC_STRESS
4100: 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23 69 66 20   is set..*/.#if 
4110: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
4120: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
4130: 53 53 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c  SS).# define ONL
4140: 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
4150: 45 53 53 28 58 29 20 20 28 58 29 0a 23 65 6c 69  ESS(X)  (X).#eli
4160: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
4170: 47 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c 59  G).# define ONLY
4180: 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  _IF_REALLOC_STRE
4190: 53 53 28 58 29 20 20 28 28 58 29 3f 28 61 73 73  SS(X)  ((X)?(ass
41a0: 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c  ert(0),1):0).#el
41b0: 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c 59  se.# define ONLY
41c0: 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  _IF_REALLOC_STRE
41d0: 53 53 28 58 29 20 20 28 30 29 0a 23 65 6e 64 69  SS(X)  (0).#endi
41e0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72 61  f../*.** Declara
41f0: 74 69 6f 6e 73 20 75 73 65 64 20 66 6f 72 20 74  tions used for t
4200: 72 61 63 69 6e 67 20 74 68 65 20 6f 70 65 72 61  racing the opera
4210: 74 69 6e 67 20 73 79 73 74 65 6d 20 69 6e 74 65  ting system inte
4220: 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64  rfaces..*/.#if d
4230: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 46 4f  efined(SQLITE_FO
4240: 52 43 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c  RCE_OS_TRACE) ||
4250: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
4260: 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28  TEST) || \.    (
4270: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
4280: 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f  EBUG) && SQLITE_
4290: 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74 65 72 6e  OS_WIN).  extern
42a0: 20 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54 72   int sqlite3OSTr
42b0: 61 63 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f 53  ace;.# define OS
42c0: 54 52 41 43 45 28 58 29 20 20 20 20 20 20 20 20  TRACE(X)        
42d0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 4f 53 54    if( sqlite3OST
42e0: 72 61 63 65 20 29 20 73 71 6c 69 74 65 33 44 65  race ) sqlite3De
42f0: 62 75 67 50 72 69 6e 74 66 20 58 0a 23 20 64 65  bugPrintf X.# de
4300: 66 69 6e 65 20 53 51 4c 49 54 45 5f 48 41 56 45  fine SQLITE_HAVE
4310: 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c 73 65 0a  _OS_TRACE.#else.
4320: 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45  # define OSTRACE
4330: 28 58 29 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  (X).# undef  SQL
4340: 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
4350: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
4360: 49 73 20 74 68 65 20 73 71 6c 69 74 65 33 45 72  Is the sqlite3Er
4370: 72 4e 61 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  rName() function
4380: 20 6e 65 65 64 65 64 20 69 6e 20 74 68 65 20 62   needed in the b
4390: 75 69 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c 79  uild?  Currently
43a0: 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65 65 64 65  ,.** it is neede
43b0: 64 20 62 79 20 22 6d 75 74 65 78 5f 77 33 32 2e  d by "mutex_w32.
43c0: 63 22 20 28 77 68 65 6e 20 64 65 62 75 67 67 69  c" (when debuggi
43d0: 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22 20  ng), "os_win.c" 
43e0: 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43 45  (when.** OSTRACE
43f0: 20 69 73 20 65 6e 61 62 6c 65 64 29 2c 20 61 6e   is enabled), an
4400: 64 20 62 79 20 73 65 76 65 72 61 6c 20 22 74 65  d by several "te
4410: 73 74 2a 2e 63 22 20 66 69 6c 65 73 20 28 77 68  st*.c" files (wh
4420: 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70 69  ich are.** compi
4430: 6c 65 64 20 75 73 69 6e 67 20 53 51 4c 49 54 45  led using SQLITE
4440: 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20 64  _TEST)..*/.#if d
4450: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
4460: 56 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20  VE_OS_TRACE) || 
4470: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
4480: 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  EST) || \.    (d
4490: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
44a0: 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f  BUG) && SQLITE_O
44b0: 53 5f 57 49 4e 29 0a 23 20 64 65 66 69 6e 65 20  S_WIN).# define 
44c0: 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
44d0: 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e 64  NAME.#else.# und
44e0: 65 66 20 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ef  SQLITE_NEED_
44f0: 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66 0a  ERR_NAME.#endif.
4500: 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  ./*.** SQLITE_EN
4510: 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d  ABLE_EXPLAIN_COM
4520: 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f 6d 70 61  MENTS is incompa
4530: 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 49 54  tible with SQLIT
4540: 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 2a  E_OMIT_EXPLAIN.*
4550: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4560: 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 23 20 75  OMIT_EXPLAIN.# u
4570: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
4580: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
4590: 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  NTS.#endif../*.*
45a0: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e  * Return true (n
45b0: 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20  on-zero) if the 
45c0: 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65  input is an inte
45d0: 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20  ger that is too 
45e0: 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20  large.** to fit 
45f0: 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69  in 32-bits.  Thi
4600: 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
4610: 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75  inside of variou
4620: 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  s testcase().** 
4630: 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79  macros to verify
4640: 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74 65   that we have te
4650: 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20  sted SQLite for 
4660: 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f  large-file suppo
4670: 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  rt..*/.#define I
4680: 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28  S_BIG_INT(X)  ((
4690: 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66 66  (X)&~(i64)0xffff
46a0: 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  ffff)!=0)../*.**
46b0: 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b   The macro unlik
46c0: 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74 20  ely() is a hint 
46d0: 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61  that surrounds a
46e0: 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72   boolean.** expr
46f0: 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
4700: 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d  sually false.  M
4710: 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75  acro likely() su
4720: 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f  rrounds.** a boo
4730: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lean expression 
4740: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
4750: 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e  true.  These hin
4760: 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20  ts could,.** in 
4770: 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20  theory, be used 
4780: 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  by the compiler 
4790: 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74  to generate bett
47a0: 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20  er code, but.** 
47b0: 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61  currently they a
47c0: 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73  re just comments
47d0: 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65   for human reade
47e0: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c  rs..*/.#define l
47f0: 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a  ikely(X)    (X).
4800: 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79  #define unlikely
4810: 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75  (X)  (X)..#inclu
4820: 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63  de "hash.h".#inc
4830: 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23  lude "parse.h".#
4840: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
4850: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
4860: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
4870: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
4880: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69  de <assert.h>.#i
4890: 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68  nclude <stddef.h
48a0: 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65 20 61 20 6d  >../*.** Use a m
48b0: 61 63 72 6f 20 74 6f 20 72 65 70 6c 61 63 65 20  acro to replace 
48c0: 6d 65 6d 63 70 79 28 29 20 69 66 20 63 6f 6d 70  memcpy() if comp
48d0: 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54 45  iled with SQLITE
48e0: 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 2e 0a  _INLINE_MEMCPY..
48f0: 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 62  ** This allows b
4900: 65 74 74 65 72 20 6d 65 61 73 75 72 65 6d 65 6e  etter measuremen
4910: 74 73 20 6f 66 20 77 68 65 72 65 20 6d 65 6d 63  ts of where memc
4920: 70 79 28 29 20 69 73 20 75 73 65 64 20 77 68 65  py() is used whe
4930: 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a 20 63 61 63  n running.** cac
4940: 68 65 67 72 69 6e 64 2e 20 20 42 75 74 20 74 68  hegrind.  But th
4950: 69 73 20 6d 61 63 72 6f 20 76 65 72 73 69 6f 6e  is macro version
4960: 20 6f 66 20 6d 65 6d 63 70 79 28 29 20 69 73 20   of memcpy() is 
4970: 76 65 72 79 20 73 6c 6f 77 20 73 6f 20 69 74 0a  very slow so it.
4980: 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65  ** should not be
4990: 20 75 73 65 64 20 69 6e 20 70 72 6f 64 75 63 74   used in product
49a0: 69 6f 6e 2e 20 20 54 68 69 73 20 69 73 20 61 20  ion.  This is a 
49b0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 6d 65 61 73  performance meas
49c0: 75 72 65 6d 65 6e 74 0a 2a 2a 20 68 61 63 6b 20  urement.** hack 
49d0: 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  only..*/.#ifdef 
49e0: 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45  SQLITE_INLINE_ME
49f0: 4d 43 50 59 0a 23 20 64 65 66 69 6e 65 20 6d 65  MCPY.# define me
4a00: 6d 63 70 79 28 44 2c 53 2c 4e 29 20 7b 63 68 61  mcpy(D,S,N) {cha
4a10: 72 2a 78 78 64 3d 28 63 68 61 72 2a 29 28 44 29  r*xxd=(char*)(D)
4a20: 3b 63 6f 6e 73 74 20 63 68 61 72 2a 78 78 73 3d  ;const char*xxs=
4a30: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 28 53 29  (const char*)(S)
4a40: 3b 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;\.             
4a50: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 78             int x
4a60: 78 6e 3d 28 4e 29 3b 77 68 69 6c 65 28 78 78 6e  xn=(N);while(xxn
4a70: 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b 29 3d 2a 28  -->0)*(xxd++)=*(
4a80: 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e 64 69 66 0a  xxs++);}.#endif.
4a90: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
4aa0: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
4ab0: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
4ac0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
4ad0: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
4ae0: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
4af0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
4b00: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4b10: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
4b20: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
4b30: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
4b40: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
4b50: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
4b60: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
4b70: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
4b80: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
4b90: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
4ba0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4bb0: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
4bc0: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
4bd0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
4be0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
4bf0: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
4c00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
4c10: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
4c20: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
4c30: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
4c40: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
4c50: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
4c60: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4c70: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
4c80: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
4c90: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
4ca0: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
4cb0: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
4cc0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
4cd0: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
4ce0: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
4cf0: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
4d00: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
4d10: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
4d20: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f 6d  ompiler.** to om
4d30: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
4d40: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
4d50: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
4d60: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
4d70: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
4d80: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
4d90: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
4da0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
4db0: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
4dc0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
4dd0: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
4de0: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
4df0: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
4e00: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
4e10: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
4e20: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
4e30: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
4e40: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
4e50: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
4e60: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
4e70: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
4e80: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
4e90: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
4ea0: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
4eb0: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
4ec0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
4ed0: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
4ee0: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
4ef0: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
4f00: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
4f10: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
4f20: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
4f30: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
4f40: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
4f50: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
4f60: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
4f70: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
4f80: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
4f90: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
4fa0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
4fb0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
4fc0: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
4fd0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
4fe0: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
4ff0: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
5000: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
5010: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
5020: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
5030: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
5040: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
5050: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
5060: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
5070: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
5080: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
5090: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
50a0: 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RE 1.#endif../*.
50b0: 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68  ** If no value h
50c0: 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64  as been provided
50d0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f   for SQLITE_MAX_
50e0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20  WORKER_THREADS, 
50f0: 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f  or if.** SQLITE_
5100: 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65  TEMP_STORE is se
5110: 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73  t to 3 (never us
5120: 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  e temporary file
5130: 73 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74 6f  s), set it.** to
5140: 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51   zero..*/.#if SQ
5150: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
5160: 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52  =3 || SQLITE_THR
5170: 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64  EADSAFE==0.# und
5180: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ef SQLITE_MAX_WO
5190: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64  RKER_THREADS.# d
51a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
51b0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
51c0: 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
51d0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
51e0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
51f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
5200: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a  ORKER_THREADS 8.
5210: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
5220: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5230: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64  RKER_THREADS.# d
5240: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
5250: 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  AULT_WORKER_THRE
5260: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
5270: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5280: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53  WORKER_THREADS>S
5290: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
52a0: 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66  _THREADS.# undef
52b0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
52c0: 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66  ER_THREADS.# def
52d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ine SQLITE_MAX_W
52e0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51  ORKER_THREADS SQ
52f0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
5300: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64  KER_THREADS.#end
5310: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65  if../*.** The de
5320: 66 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c  fault initial al
5330: 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  location for the
5340: 20 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20   pagecache when 
5350: 75 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a  using separate.*
5360: 2a 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72  * pagecaches for
5370: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
5380: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f  onnection.  A po
5390: 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73  sitive number is
53a0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
53b0: 66 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61  f pages.  A nega
53c0: 74 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72  tive number N tr
53d0: 61 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73  anslations means
53e0: 20 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a   that a buffer.*
53f0: 2a 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74  * of -1024*N byt
5400: 65 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  es is allocated 
5410: 61 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20  and used for as 
5420: 6d 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74  many pages as it
5430: 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2a 0a 2a   will hold..**.*
5440: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  * The default va
5450: 6c 75 65 20 6f 66 20 22 32 30 22 20 77 61 73 20  lue of "20" was 
5460: 63 68 6f 6f 73 65 6e 20 74 6f 20 6d 69 6e 69 6d  choosen to minim
5470: 69 7a 65 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  ize the run-time
5480: 20 6f 66 20 74 68 65 0a 2a 2a 20 73 70 65 65 64   of the.** speed
5490: 74 65 73 74 31 20 74 65 73 74 20 70 72 6f 67 72  test1 test progr
54a0: 61 6d 20 77 69 74 68 20 6f 70 74 69 6f 6e 73 3a  am with options:
54b0: 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72 79   --shrink-memory
54c0: 20 2d 2d 72 65 70 72 65 70 61 72 65 0a 2a 2f 0a   --reprepare.*/.
54d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
54e0: 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e  EFAULT_PCACHE_IN
54f0: 49 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51  ITSZ.# define SQ
5500: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41  LITE_DEFAULT_PCA
5510: 43 48 45 5f 49 4e 49 54 53 5a 20 32 30 0a 23 65  CHE_INITSZ 20.#e
5520: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
5530: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
5540: 69 6f 6e 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50  ions SQLITE_MMAP
5550: 5f 52 45 41 44 57 52 49 54 45 20 61 6e 64 20 0a  _READWRITE and .
5560: 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
5570: 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52  _BATCH_ATOMIC_WR
5580: 49 54 45 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70  ITE are not comp
5590: 61 74 69 62 6c 65 20 77 69 74 68 20 6f 6e 65 20  atible with one 
55a0: 61 6e 6f 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20  another..** You 
55b0: 6d 75 73 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20  must choose one 
55c0: 6f 72 20 74 68 65 20 6f 74 68 65 72 20 28 6f 72  or the other (or
55d0: 20 6e 65 69 74 68 65 72 29 20 62 75 74 20 6e 6f   neither) but no
55e0: 74 20 62 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64  t both..*/.#if d
55f0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d  efined(SQLITE_MM
5600: 41 50 5f 52 45 41 44 57 52 49 54 45 29 20 26 26  AP_READWRITE) &&
5610: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
5620: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5630: 4d 49 43 5f 57 52 49 54 45 29 0a 23 65 72 72 6f  MIC_WRITE).#erro
5640: 72 20 43 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74  r Cannot use bot
5650: 68 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  h SQLITE_MMAP_RE
5660: 41 44 57 52 49 54 45 20 61 6e 64 20 53 51 4c 49  ADWRITE and SQLI
5670: 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f  TE_ENABLE_BATCH_
5680: 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e  ATOMIC_WRITE.#en
5690: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64  dif../*.** GCC d
56a0: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74  oes not define t
56b0: 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61  he offsetof() ma
56c0: 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76  cro so we'll hav
56d0: 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75  e to do it.** ou
56e0: 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e  rselves..*/.#ifn
56f0: 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65  def offsetof.#de
5700: 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54  fine offsetof(ST
5710: 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28  RUCTURE,FIELD) (
5720: 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28  (int)((char*)&((
5730: 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46  STRUCTURE*)0)->F
5740: 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  IELD)).#endif../
5750: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63  *.** Macros to c
5760: 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61  ompute minimum a
5770: 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77  nd maximum of tw
5780: 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69  o numbers..*/.#i
5790: 66 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65 66 69  fndef MIN.# defi
57a0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
57b0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  <(B)?(A):(B)).#e
57c0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 41 58  ndif.#ifndef MAX
57d0: 0a 23 20 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  .# define MAX(A,
57e0: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
57f0: 28 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  (B)).#endif../*.
5800: 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65  ** Swap two obje
5810: 63 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45  cts of type TYPE
5820: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41  ..*/.#define SWA
5830: 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50  P(TYPE,A,B) {TYP
5840: 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b  E t=A; A=B; B=t;
5850: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
5860: 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61  o see if this ma
5870: 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49  chine uses EBCDI
5880: 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76  C.  (Yes, believ
5890: 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20  e it or.** not, 
58a0: 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20  there are still 
58b0: 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65  machines out the
58c0: 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44  re that use EBCD
58d0: 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20  IC.).*/.#if 'A' 
58e0: 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69  == '\301'.# defi
58f0: 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43  ne SQLITE_EBCDIC
5900: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
5910: 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31  e SQLITE_ASCII 1
5920: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
5930: 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e  ntegers of known
5940: 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74   sizes.  These t
5950: 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68  ypedefs might ch
5960: 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65  ange for archite
5970: 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20  ctures.** where 
5980: 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20  the sizes very. 
5990: 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61   Preprocessor ma
59a0: 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62  cros are availab
59b0: 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a  le so that the.*
59c0: 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63  * types can be c
59d0: 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65  onveniently rede
59e0: 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  fined at compile
59f0: 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69  -type.  Like thi
5a00: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  s:.**.**        
5a10: 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54   cc '-DUINTPTR_T
5a20: 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e  YPE=long long in
5a30: 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  t' ....*/.#ifnde
5a40: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20  f UINT32_TYPE.# 
5a50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33  ifdef HAVE_UINT3
5a60: 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  2_T.#  define UI
5a70: 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32  NT32_TYPE uint32
5a80: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
5a90: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
5aa0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65  unsigned int.# e
5ab0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5ac0: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a  def UINT16_TYPE.
5ad0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
5ae0: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
5af0: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74  UINT16_TYPE uint
5b00: 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  16_t.# else.#  d
5b10: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
5b20: 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74  E unsigned short
5b30: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
5b40: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31  dif.#ifndef INT1
5b50: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
5b60: 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64  AVE_INT16_T.#  d
5b70: 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45  efine INT16_TYPE
5b80: 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a   int16_t.# else.
5b90: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
5ba0: 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23  TYPE short int.#
5bb0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5bc0: 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  fndef UINT8_TYPE
5bd0: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
5be0: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
5bf0: 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38  UINT8_TYPE uint8
5c00: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
5c10: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
5c20: 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65  nsigned char.# e
5c30: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5c40: 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20  def INT8_TYPE.# 
5c50: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f  ifdef HAVE_INT8_
5c60: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  T.#  define INT8
5c70: 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65  _TYPE int8_t.# e
5c80: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
5c90: 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63  T8_TYPE signed c
5ca0: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
5cb0: 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44  if.#ifndef LONGD
5cc0: 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66  OUBLE_TYPE.# def
5cd0: 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ine LONGDOUBLE_T
5ce0: 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a  YPE long double.
5cf0: 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73  #endif.typedef s
5d00: 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b  qlite_int64 i64;
5d10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62            /* 8-b
5d20: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
5d30: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71  er */.typedef sq
5d40: 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b  lite_uint64 u64;
5d50: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
5d60: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
5d70: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
5d80: 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20  INT32_TYPE u32; 
5d90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62            /* 4-b
5da0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
5db0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5dc0: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b  UINT16_TYPE u16;
5dd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
5de0: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5df0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5e00: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b   INT16_TYPE i16;
5e10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
5e20: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5e30: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5e40: 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20  UINT8_TYPE u8;  
5e50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
5e60: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5e70: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5e80: 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20   INT8_TYPE i8;  
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
5ea0: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5eb0: 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53  eger */../*.** S
5ec0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73  QLITE_MAX_U32 is
5ed0: 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20   a u64 constant 
5ee0: 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69  that is the maxi
5ef0: 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a  mum u64 value.**
5f00: 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f   that can be sto
5f10: 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74  red in a u32 wit
5f20: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74  hout loss of dat
5f30: 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  a.  The value.**
5f40: 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66   is 0x00000000ff
5f50: 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63  ffffff.  But bec
5f60: 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f  ause of quirks o
5f70: 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  f some compilers
5f80: 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20  , we.** have to 
5f90: 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75  specify the valu
5fa0: 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e  e in the less in
5fb0: 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73  tuitive manner s
5fc0: 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  hown:.*/.#define
5fd0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
5fe0: 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29   ((((u64)1)<<32)
5ff0: 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  -1)../*.** The d
6000: 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20  atatype used to 
6010: 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20  store estimates 
6020: 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
6030: 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61   rows in a.** ta
6040: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54  ble or index.  T
6050: 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  his is an unsign
6060: 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e  ed integer type.
6070: 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a    For 99.9% of.*
6080: 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33  * the world, a 3
6090: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73  2-bit integer is
60a0: 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75   sufficient.  Bu
60b0: 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  t a 64-bit integ
60c0: 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  er.** can be use
60d0: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
60e0: 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f  e if desired..*/
60f0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36  .#ifdef SQLITE_6
6100: 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65  4BIT_STATS. type
6110: 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b  def u64 tRowcnt;
6120: 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e      /* 64-bit on
6130: 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20  ly if requested 
6140: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
6150: 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65  */.#else. typede
6160: 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20  f u32 tRowcnt;  
6170: 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74    /* 32-bit is t
6180: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65  he default */.#e
6190: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69  ndif../*.** Esti
61a0: 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73  mated quantities
61b0: 20 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20   used for query 
61c0: 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f  planning are sto
61d0: 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a  red as 16-bit.**
61e0: 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f   logarithms.  Fo
61f0: 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68  r quantity X, th
6200: 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
6210: 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54  s 10*log2(X).  T
6220: 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70  his.** gives a p
6230: 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66  ossible range of
6240: 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f   values of appro
6250: 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36  ximately 1.0e986
6260: 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42   to 1e-986..** B
6270: 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76  ut the allowed v
6280: 61 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e  alues are "grain
6290: 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76  y".  Not every v
62a0: 61 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e  alue is represen
62b0: 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78  table..** For ex
62c0: 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65  ample, quantitie
62d0: 73 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20  s 16 and 17 are 
62e0: 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64  both represented
62f0: 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20   by a LogEst.** 
6300: 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c  of 40.  However,
6310: 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75   since LogEst qu
6320: 61 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70  antities are sup
6330: 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d  pose to be estim
6340: 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61  ates,.** not exa
6350: 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20  ct values, this 
6360: 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e  imprecision is n
6370: 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a  ot a problem..**
6380: 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20  .** "LogEst" is 
6390: 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72  short for "Logar
63a0: 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22  ithmic Estimate"
63b0: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  ..**.** Examples
63c0: 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30  :.**      1 -> 0
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30                20
63e0: 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20   -> 43          
63f0: 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20  10000 -> 132.** 
6400: 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20       2 -> 10    
6410: 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34           25 -> 4
6420: 36 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30  6          25000
6430: 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20   -> 146.**      
6440: 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20  3 -> 16         
6450: 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20     100 -> 66    
6460: 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31      1000000 -> 1
6470: 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20  99.**      4 -> 
6480: 32 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30  20           100
6490: 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31  0 -> 99        1
64a0: 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a  048576 -> 200.**
64b0: 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20       10 -> 33   
64c0: 20 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20          1024 -> 
64d0: 31 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39  100    429496729
64e0: 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54  6 -> 320.**.** T
64f0: 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65  he LogEst can be
6500: 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64   negative to ind
6510: 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c  icate fractional
6520: 20 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d   values..** Exam
6530: 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ples:.**.**    0
6540: 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20  .5 -> -10       
6550: 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20      0.1 -> -33  
6560: 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20        0.0625 -> 
6570: 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49  -40.*/.typedef I
6580: 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74  NT16_TYPE LogEst
6590: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65  ;../*.** Set the
65a0: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
65b0: 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d  macro to the num
65c0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
65d0: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
65e0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53  ndef SQLITE_PTRS
65f0: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
6600: 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45  (__SIZEOF_POINTE
6610: 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  R__).#   define 
6620: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f  SQLITE_PTRSIZE _
6630: 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f  _SIZEOF_POINTER_
6640: 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  _.# elif defined
6650: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
6660: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
6670: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
6680: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
6690: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f       defined(_M_
66a0: 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  ARM)   || define
66b0: 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c  d(__arm__)    ||
66c0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a   defined(__x86).
66d0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
66e0: 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c  E_PTRSIZE 4.# el
66f0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6700: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23  LITE_PTRSIZE 8.#
6710: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
6720: 2a 20 54 68 65 20 75 70 74 72 20 74 79 70 65 20  * The uptr type 
6730: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69  is an unsigned i
6740: 6e 74 65 67 65 72 20 6c 61 72 67 65 20 65 6e 6f  nteger large eno
6750: 75 67 68 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f  ugh to hold a po
6760: 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66  inter.*/.#if def
6770: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
6780: 5f 48 29 0a 20 20 74 79 70 65 64 65 66 20 75 69  _H).  typedef ui
6790: 6e 74 70 74 72 5f 74 20 75 70 74 72 3b 0a 23 65  ntptr_t uptr;.#e
67a0: 6c 69 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  lif SQLITE_PTRSI
67b0: 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64 65 66 20  ZE==4.  typedef 
67c0: 75 33 32 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a  u32 uptr;.#else.
67d0: 20 20 74 79 70 65 64 65 66 20 75 36 34 20 75 70    typedef u64 up
67e0: 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  tr;.#endif../*.*
67f0: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54  * The SQLITE_WIT
6800: 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f  HIN(P,S,E) macro
6810: 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
6820: 66 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e  f pointer P poin
6830: 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69  ts to.** somethi
6840: 6e 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e  ng between S (in
6850: 63 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28  clusive) and E (
6860: 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a  exclusive)..**.*
6870: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
6880: 2c 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20  , S is a buffer 
6890: 61 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74  and E is a point
68a0: 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
68b0: 62 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68  byte after.** th
68c0: 65 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20  e end of buffer 
68d0: 53 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72  S.  This macro r
68e0: 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50  eturns true if P
68f0: 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74   points to somet
6900: 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65  hing.** containe
6910: 64 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66  d within the buf
6920: 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fer S..*/.#defin
6930: 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28  e SQLITE_WITHIN(
6940: 50 2c 53 2c 45 29 20 28 28 28 75 70 74 72 29 28  P,S,E) (((uptr)(
6950: 50 29 3e 3d 28 75 70 74 72 29 28 53 29 29 26 26  P)>=(uptr)(S))&&
6960: 28 28 75 70 74 72 29 28 50 29 3c 28 75 70 74 72  ((uptr)(P)<(uptr
6970: 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d  )(E))).../*.** M
6980: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
6990: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
69a0: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
69b0: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
69c0: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
69d0: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
69e0: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
69f0: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
6a00: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
6a10: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
6a20: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
6a30: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
6a40: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
6a50: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
6a60: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
6a70: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
6a80: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
6a90: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 42 59 54 45  ** -DSQLITE_BYTE
6aa0: 4f 52 44 45 52 3d 30 20 69 73 20 73 65 74 2c 20  ORDER=0 is set, 
6ab0: 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20  then byte-order 
6ac0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a  is determined.**
6ad0: 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f   at run-time..*/
6ae0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6af0: 42 59 54 45 4f 52 44 45 52 0a 23 20 69 66 20 64  BYTEORDER.# if d
6b00: 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20  efined(i386)    
6b10: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33   || defined(__i3
6b20: 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e  86__)   || defin
6b30: 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20  ed(_M_IX86) ||  
6b40: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
6b50: 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65  (__x86_64) || de
6b60: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6b70: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
6b80: 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20  X64)  ||    \.  
6b90: 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d     defined(_M_AM
6ba0: 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D64) || defined(
6bb0: 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64  _M_ARM)     || d
6bc0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20  efined(__x86)   
6bd0: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
6be0: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20  ined(__arm__).# 
6bf0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6c00: 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33  BYTEORDER    123
6c10: 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  4.# elif defined
6c20: 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65  (sparc)    || de
6c30: 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23  fined(__ppc__).#
6c40: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6c50: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33  _BYTEORDER    43
6c60: 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  21.# else.#   de
6c70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
6c80: 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66 0a  ORDER 0.# endif.
6c90: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
6ca0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32  E_BYTEORDER==432
6cb0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6cc0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31  E_BIGENDIAN    1
6cd0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6ce0: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a  _LITTLEENDIAN 0.
6cf0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6d00: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
6d10: 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c 69  ITE_UTF16BE.#eli
6d20: 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  f SQLITE_BYTEORD
6d30: 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69 6e  ER==1234.# defin
6d40: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
6d50: 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65  AN    0.# define
6d60: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6d70: 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20  DIAN 1.# define 
6d80: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6d90: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
6da0: 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65 66  LE.#else.# ifdef
6db0: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
6dc0: 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74  TION.  const int
6dd0: 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b   sqlite3one = 1;
6de0: 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e  .# else.  extern
6df0: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
6e00: 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23  e3one;.# endif.#
6e10: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6e20: 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63  IGENDIAN    (*(c
6e30: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
6e40: 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65  ne)==0).# define
6e50: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6e60: 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28  DIAN (*(char *)(
6e70: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29  &sqlite3one)==1)
6e80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6e90: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53  _UTF16NATIVE  (S
6ea0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f  QLITE_BIGENDIAN?
6eb0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53  SQLITE_UTF16BE:S
6ec0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23  QLITE_UTF16LE).#
6ed0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
6ee0: 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c  stants for the l
6ef0: 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c  argest and small
6f00: 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d  est possible 64-
6f10: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
6f20: 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ers..** These ma
6f30: 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65  cros are designe
6f40: 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63  d to work correc
6f50: 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62  tly on both 32-b
6f60: 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a  it and 64-bit.**
6f70: 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23   compilers..*/.#
6f80: 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49  define LARGEST_I
6f90: 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66  NT64  (0xfffffff
6fa0: 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66  f|(((i64)0x7ffff
6fb0: 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69  fff)<<32)).#defi
6fc0: 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  ne SMALLEST_INT6
6fd0: 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c  4 (((i64)-1) - L
6fe0: 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f  ARGEST_INT64)../
6ff0: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20  *.** Round up a 
7000: 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65  number to the ne
7010: 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70  xt larger multip
7020: 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69  le of 8.  This i
7030: 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72  s used.** to for
7040: 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d  ce 8-byte alignm
7050: 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72  ent on 64-bit ar
7060: 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a  chitectures..*/.
7070: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78  #define ROUND8(x
7080: 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e  )     (((x)+7)&~
7090: 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  7)../*.** Round 
70a0: 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72  down to the near
70b0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  est multiple of 
70c0: 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  8.*/.#define ROU
70d0: 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26  NDDOWN8(x) ((x)&
70e0: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72  ~7)../*.** Asser
70f0: 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74  t that the point
7100: 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20  er X is aligned 
7110: 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75  to an 8-byte bou
7120: 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20  ndary.  This.** 
7130: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e  macro is used on
7140: 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74  ly within assert
7150: 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  () to verify tha
7160: 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a  t the code gets.
7170: 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74  ** all alignment
7180: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f   restrictions co
7190: 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63  rrect..**.** Exc
71a0: 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34  ept, if SQLITE_4
71b0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
71c0: 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c  LLOC is defined,
71d0: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64   then the.** und
71e0: 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29  erlying malloc()
71f0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
7200: 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20  might return us 
7210: 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a  4-byte aligned.*
7220: 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20  * pointers.  In 
7230: 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20  that case, only 
7240: 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c  verify 4-byte al
7250: 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64  ignment..*/.#ifd
7260: 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  ef SQLITE_4_BYTE
7270: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a  _ALIGNED_MALLOC.
7280: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
7290: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
72a0: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
72b0: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d   - (char*)0)&3)=
72c0: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
72d0: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
72e0: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
72f0: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
7300: 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65  ar*)0)&7)==0).#e
7310: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61  ndif../*.** Disa
7320: 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74  ble MMAP on plat
7330: 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69  forms where it i
7340: 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77  s known to not w
7350: 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ork.*/.#if defin
7360: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
7370: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58  || defined(__QNX
7380: 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53  NTO__).# undef S
7390: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
73a0: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
73b0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
73c0: 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 0.#endif../*.*
73d0: 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75  * Default maximu
73e0: 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79  m size of memory
73f0: 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d   used by memory-
7400: 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68  mapped I/O in th
7410: 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20  e VFS.*/.#ifdef 
7420: 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c  __APPLE__.# incl
7430: 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69  ude <TargetCondi
7440: 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69  tionals.h>.#endi
7450: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
7460: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
7470: 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69   if defined(__li
7480: 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65  nux__) \.  || de
7490: 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a  fined(_WIN32) \.
74a0: 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f    || (defined(__
74b0: 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69  APPLE__) && defi
74c0: 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c  ned(__MACH__)) \
74d0: 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  .  || defined(__
74e0: 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  sun) \.  || defi
74f0: 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29  ned(__FreeBSD__)
7500: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7510: 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23  __DragonFly__).#
7520: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
7530: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
7540: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
7550: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
7560: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
7570: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7580: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e  ZE 0.# endif.#en
7590: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
75a0: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
75b0: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
75c0: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
75d0: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
75e0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
75f0: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
7600: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
7610: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
7620: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
7630: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
7640: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
7650: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
7660: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7670: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7680: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7690: 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 23  _SIZE 0.#endif.#
76a0: 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  if SQLITE_DEFAUL
76b0: 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49  T_MMAP_SIZE>SQLI
76c0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
76d0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
76e0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
76f0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
7700: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7710: 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE SQLITE_MAX_M
7720: 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a  MAP_SIZE.#endif.
7730: 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20  ./*.** Only one 
7740: 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  of SQLITE_ENABLE
7750: 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45  _STAT3 or SQLITE
7760: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61  _ENABLE_STAT4 ca
7770: 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a  n be defined..**
7780: 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69 76   Priority is giv
7790: 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41  en to SQLITE_ENA
77a0: 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65  BLE_STAT4.  If e
77b0: 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e 65  ither are define
77c0: 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e  d, also.** defin
77d0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
77e0: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a  STAT3_OR_STAT4.*
77f0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
7800: 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75  ENABLE_STAT4.# u
7810: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
7820: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
7830: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
7840: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
7850: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
7860: 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66  ABLE_STAT3.# def
7870: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
7880: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
7890: 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f   1.#elif SQLITE_
78a0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
78b0: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
78c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
78d0: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69  3_OR_STAT4.#endi
78e0: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
78f0: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7900: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7910: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7920: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7930: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7940: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7950: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7960: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7970: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
7980: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
7990: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
79a0: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
79b0: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
79c0: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
79d0: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
79e0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
79f0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
7a00: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7a10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7a20: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
7a30: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
7a40: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
7a50: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
7a60: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
7a70: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
7a80: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
7a90: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
7aa0: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
7ab0: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
7ac0: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
7ad0: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
7ae0: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
7af0: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
7b00: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
7b10: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
7b20: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7b30: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
7b40: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
7b50: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
7b60: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
7b70: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
7b80: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
7b90: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
7ba0: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
7bb0: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
7bc0: 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76    int (*xFunc)(v
7bd0: 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20  oid *,int);  /* 
7be0: 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63  The busy callbac
7bf0: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  k */.  void *pAr
7c00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7c10: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74    /* First arg t
7c20: 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  o busy callback 
7c30: 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20  */.  int nBusy; 
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c50: 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  /* Incremented w
7c60: 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61  ith each busy ca
7c70: 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ll */.};../*.** 
7c80: 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74  Name of the mast
7c90: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7ca0: 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64  e.  The master d
7cb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a  atabase table.**
7cc0: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61   is a special ta
7cd0: 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ble that holds t
7ce0: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74  he names and att
7cf0: 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a  ributes of all.*
7d00: 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e  * user tables an
7d10: 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64  d indices..*/.#d
7d20: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d  efine MASTER_NAM
7d30: 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f  E       "sqlite_
7d40: 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20  master".#define 
7d50: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
7d60: 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d    "sqlite_temp_m
7d70: 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68  aster"../*.** Th
7d80: 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
7d90: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7da0: 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  se table..*/.#de
7db0: 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54  fine MASTER_ROOT
7dc0: 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20         1../*.** 
7dd0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
7de0: 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f  schema table..*/
7df0: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
7e00: 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49  TABLE(x)  ((!OMI
7e10: 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31  T_TEMPDB)&&(x==1
7e20: 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  )?TEMP_MASTER_NA
7e30: 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a  ME:MASTER_NAME).
7e40: 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69  ./*.** A conveni
7e50: 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20  ence macro that 
7e60: 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
7e70: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
7e80: 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a  n.** an array..*
7e90: 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53  /.#define ArrayS
7ea0: 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29  ize(X)    ((int)
7eb0: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
7ec0: 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a  f(X[0])))../*.**
7ed0: 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
7ee0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
7ef0: 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a  power of two.*/.
7f00: 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f  #define IsPowerO
7f10: 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28  fTwo(X) (((X)&((
7f20: 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  X)-1))==0)../*.*
7f30: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
7f40: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
7f50: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
7f60: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
7f70: 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74  ()..** The sqlit
7f80: 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69  e3DbFree() routi
7f90: 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20  ne requires two 
7fa0: 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65  parameters inste
7fb0: 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65  ad of the.** one
7fc0: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
7fd0: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
7fe0: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
7ff0: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
8000: 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  uce.** this magi
8010: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
8020: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
8030: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
8040: 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74  y.  Any.** point
8050: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
8060: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
8070: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
8080: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
8090: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
80a0: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
80b0: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
80c0: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
80d0: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
80e0: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
80f0: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
8100: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
8110: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
8120: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
8130: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
8140: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
8150: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
8160: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
8170: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
8180: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
8190: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
81a0: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
81b0: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
81c0: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
81d0: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
81e0: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
81f0: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
8200: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
8210: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
8220: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
8230: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
8240: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
8250: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
8260: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
8270: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
8280: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
8290: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
82a0: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
82b0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
82c0: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
82d0: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
82e0: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
82f0: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
8300: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
8310: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
8320: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
8330: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
8340: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
8350: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
8360: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
8370: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
8380: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
8390: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
83a0: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
83b0: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
83c0: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
83d0: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
83e0: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
83f0: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
8400: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
8410: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
8420: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
8430: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
8440: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
8450: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
8460: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
8470: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
8480: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
8490: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
84a0: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
84b0: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
84c0: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
84d0: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
84e0: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
84f0: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
8500: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
8510: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
8520: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23  e SQLITE_WSD.  #
8530: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8540: 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73  v) v.  #define s
8550: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
8560: 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
8570: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
8580: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
8590: 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ros are used to 
85a0: 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65  suppress compile
85b0: 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74  r warnings and t
85c0: 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65  o.** make it cle
85d0: 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64  ar to human read
85e0: 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74  ers when a funct
85f0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8600: 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a   deliberately.**
8610: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
8620: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
8630: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
8640: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
8650: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
8660: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
8670: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
8680: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
8690: 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  e the.** impleme
86a0: 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ntation of an SQ
86b0: 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65 70  L aggregate step
86c0: 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f   callback may no
86d0: 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72  t use the.** par
86e0: 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e  ameter indicatin
86f0: 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  g the number of 
8700: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
8710: 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74   to the aggregat
8720: 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77  e,.** if it know
8730: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  s that this is e
8740: 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72  nforced elsewher
8750: 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20  e..**.** When a 
8760: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
8770: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  er is not used a
8780: 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65  t all within the
8790: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
87a0: 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65  ion,.** it is ge
87b0: 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e  nerally named "N
87c0: 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55  otUsed" or "NotU
87d0: 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68  sed2" to make th
87e0: 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65  ings even cleare
87f0: 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74  r..** However, t
8800: 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20  hese macros may 
8810: 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
8820: 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67  suppress warning
8830: 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20  s related to.** 
8840: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
8850: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
8860: 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67  e used depending
8870: 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20   on compilation 
8880: 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20  options..** For 
8890: 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61  example those pa
88a0: 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73  rameters only us
88b0: 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20 73  ed in assert() s
88c0: 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68  tatements. In th
88d0: 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65  ese.** cases the
88e0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
88f0: 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68 65  named as per the
8900: 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f   usual conventio
8910: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ns..*/.#define U
8920: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
8930: 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65  x) (void)(x).#de
8940: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
8950: 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53  METER2(x,y) UNUS
8960: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c  ED_PARAMETER(x),
8970: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8980: 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61  (y)../*.** Forwa
8990: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  rd references to
89a0: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74   structures.*/.t
89b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 67  ypedef struct Ag
89c0: 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74  gInfo AggInfo;.t
89d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
89e0: 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f  thContext AuthCo
89f0: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8a00: 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
8a10: 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74  o AutoincInfo;.t
8a20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 69  ypedef struct Bi
8a30: 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70  tvec Bitvec;.typ
8a40: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c  edef struct Coll
8a50: 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70  Seq CollSeq;.typ
8a60: 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75  edef struct Colu
8a70: 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64  mn Column;.typed
8a80: 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62 3b  ef struct Db Db;
8a90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8aa0: 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74  Schema Schema;.t
8ab0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
8ac0: 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66  pr Expr;.typedef
8ad0: 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
8ae0: 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64   ExprList;.typed
8af0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53 70  ef struct ExprSp
8b00: 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70  an ExprSpan;.typ
8b10: 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65 79  edef struct FKey
8b20: 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73   FKey;.typedef s
8b30: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
8b40: 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63  ctor FuncDestruc
8b50: 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tor;.typedef str
8b60: 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63  uct FuncDef Func
8b70: 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Def;.typedef str
8b80: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
8b90: 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70  FuncDefHash;.typ
8ba0: 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c 69  edef struct IdLi
8bb0: 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64  st IdList;.typed
8bc0: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 20  ef struct Index 
8bd0: 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73  Index;.typedef s
8be0: 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
8bf0: 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74  e IndexSample;.t
8c00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
8c10: 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b  yClass KeyClass;
8c20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c30: 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b  KeyInfo KeyInfo;
8c40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c50: 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73  Lookaside Lookas
8c60: 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ide;.typedef str
8c70: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
8c80: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b  t LookasideSlot;
8c90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ca0: 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74  Module Module;.t
8cb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e 61  ypedef struct Na
8cc0: 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f  meContext NameCo
8cd0: 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73  ntext;.typedef s
8ce0: 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72 73  truct Parse Pars
8cf0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8d00: 74 20 50 72 65 55 70 64 61 74 65 20 50 72 65 55  t PreUpdate PreU
8d10: 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73  pdate;.typedef s
8d20: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
8d30: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
8d40: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
8d50: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
8d60: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
8d70: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
8d80: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
8d90: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
8da0: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
8db0: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
8dc0: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
8dd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8de0: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
8df0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
8e00: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
8e10: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
8e20: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
8e30: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
8e40: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
8e50: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
8e60: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
8e70: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
8e80: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
8e90: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
8ea0: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
8eb0: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
8ec0: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
8ed0: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
8ee0: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
8ef0: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
8f00: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
8f10: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
8f20: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
8f30: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
8f40: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
8f50: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
8f60: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
8f70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8f80: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
8f90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fa0: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
8fb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
8fc0: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
8fd0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8fe0: 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a  t With With;../*
8ff0: 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74 20   A VList object 
9000: 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69 6e  records a mappin
9010: 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d 65  g between parame
9020: 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f 77  ters/variables/w
9030: 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74  ildcards.** in t
9040: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
9050: 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c 20   (such as $abc, 
9060: 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61  @pqr, or :xyz) a
9070: 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a 2a  nd the integer.*
9080: 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  * variable numbe
9090: 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
90a0: 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65 72  h that parameter
90b0: 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d 61  .  See the forma
90c0: 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a  t description.**
90d0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 56   on the sqlite3V
90e0: 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69 6e  ListAdd() routin
90f0: 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72  e for more infor
9100: 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74  mation.  A VList
9110: 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75   is really.** ju
9120: 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69  st an array of i
9130: 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65  ntegers..*/.type
9140: 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a  def int VList;..
9150: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
9160: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
9170: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
9180: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
9190: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
91a0: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
91b0: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
91c0: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
91d0: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
91e0: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
91f0: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
9200: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
9210: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
9220: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
9230: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
9240: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
9250: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  h".#include "os.
9260: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
9270: 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51  ex.h"../* The SQ
9280: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
9290: 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  LE compile-time 
92a0: 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73  option used to s
92b0: 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a  et the default.*
92c0: 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  * synchronous se
92d0: 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20  tting to EXTRA. 
92e0: 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72   It is no longer
92f0: 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23   supported..*/.#
9300: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54  ifdef SQLITE_EXT
9310: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72  RA_DURABLE.# war
9320: 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f  ning Use SQLITE_
9330: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9340: 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66  OUS=3 instead of
9350: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9360: 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53  RABLE.# define S
9370: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9380: 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64  NCHRONOUS 3.#end
9390: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c  if../*.** Defaul
93a0: 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65  t synchronous le
93b0: 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  vels..**.** Note
93c0: 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f   that (for histo
93d0: 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68  rcal reasons) th
93e0: 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  e PAGER_SYNCHRON
93f0: 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66  OUS_* macros dif
9400: 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  fer.** from the 
9410: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9420: 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65  YNCHRONOUS value
9430: 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20   by 1..**.**    
9440: 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e         PAGER_SYN
9450: 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44  CHRONOUS       D
9460: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9470: 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20  US.**   OFF     
9480: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94a0: 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20  0.**   NORMAL   
94b0: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
94d0: 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20  .**   FULL      
94e0: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a                2.
9500: 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20 20  **   EXTRA      
9510: 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20 20     4            
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a               3.*
9530: 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41  *.** The "PRAGMA
9540: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74   synchronous" st
9550: 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65  atement also use
9560: 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  s the zero-based
9570: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20   numbers..** In 
9580: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
9590: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
95a0: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
95b0: 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e   all external in
95c0: 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20  terfaces.** and 
95d0: 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61  the one-based va
95e0: 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  lues are used in
95f0: 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66  ternally..*/.#if
9600: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9610: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
9620: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9630: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9640: 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69 66  OUS 2.#endif.#if
9650: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9660: 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e  ULT_WAL_SYNCHRON
9670: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
9680: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
9690: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49  SYNCHRONOUS SQLI
96a0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
96b0: 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f  RONOUS.#endif../
96c0: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
96d0: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
96e0: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
96f0: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
9700: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
9710: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
9720: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
9730: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
9740: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
9750: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
9760: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
9770: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
9780: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
9790: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
97a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
97b0: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
97c0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
97d0: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
97e0: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
97f0: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
9800: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
9810: 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20   *zDbSName;     
9820: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
9830: 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68 65   database. (sche
9840: 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c  ma name, not fil
9850: 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65  ename) */.  Btre
9860: 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
9870: 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73   /* The B*Tree s
9880: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
9890: 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  s database file 
98a0: 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c  */.  u8 safety_l
98b0: 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77  evel;     /* How
98c0: 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73   aggressive at s
98d0: 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64  yncing data to d
98e0: 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e  isk */.  u8 bSyn
98f0: 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  cSet;         /*
9900: 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d 41   True if "PRAGMA
9910: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20   synchronous=N" 
9920: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a  has been run */.
9930: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
9940: 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a;     /* Pointe
9950: 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63  r to database sc
9960: 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73  hema (possibly s
9970: 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  hared) */.};../*
9980: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
9990: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
99a0: 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65   structure store
99b0: 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68  s a database sch
99c0: 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20  ema..**.** Most 
99d0: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
99e0: 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  re associated wi
99f0: 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65  th a Btree.  The
9a00: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a   exception is.**
9a10: 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20   the Schema for 
9a20: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65  the TEMP databae
9a30: 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31  s (sqlite3.aDb[1
9a40: 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65  ]) which is free
9a50: 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e  -standing..** In
9a60: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
9a70: 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68  de, a single Sch
9a80: 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62  ema object can b
9a90: 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  e shared by mult
9aa0: 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74  iple.** Btrees t
9ab0: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
9ac0: 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67   same underlying
9ad0: 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74   BtShared object
9ae0: 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  ..**.** Schema o
9af0: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
9b00: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
9b10: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
9b20: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
9b30: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
9b40: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
9b50: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
9b60: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
9b70: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
9b80: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
9b90: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
9ba0: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
9bb0: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
9bc0: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
9bd0: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
9be0: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
9bf0: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
9c00: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
9c10: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
9c20: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
9c30: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
9c40: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
9c50: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
9c60: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
9c70: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
9c80: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
9c90: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
9ca0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
9cb0: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
9cc0: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
9cd0: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
9ce0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
9cf0: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
9d00: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
9d10: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
9d20: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
9d30: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
9d40: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
9d50: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
9d60: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
9d70: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
9d80: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
9d90: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
9da0: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
9db0: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
9dc0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
9dd0: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
9de0: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
9df0: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
9e00: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
9e10: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
9e20: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
9e30: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
9e40: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
9e50: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
9e60: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
9e70: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
9e80: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
9e90: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
9ea0: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
9eb0: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
9ec0: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
9ed0: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
9ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ef0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
9f00: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
9f10: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63  base */.  u16 sc
9f20: 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f  hemaFlags;     /
9f30: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
9f40: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
9f50: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
9f60: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
9f70: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
9f80: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
9f90: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
9fa0: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
9fb0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
9fc0: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
9fd0: 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a  r bits in the.**
9fe0: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
9ff0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
a000: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
a010: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
a020: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
a030: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
a040: 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
a050: 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70  ine DbHasAnyProp
a060: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28  erty(D,I,P)  (((
a070: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a080: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
a090: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
a0a0: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
a0b0: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
a0c0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a0d0: 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a  chemaFlags|=(P).
a0e0: 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50  #define DbClearP
a0f0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a100: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
a110: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a120: 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41  s&=~(P)../*.** A
a130: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
a140: 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61  r the DB.pSchema
a150: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
a160: 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65  *.** The DB_Sche
a170: 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73  maLoaded flag is
a180: 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64   set after the d
a190: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
a1a0: 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20  as been.** read 
a1b0: 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61  into internal ha
a1c0: 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  sh tables..**.**
a1d0: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a1e0: 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20   means that one 
a1f0: 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61  or more views ha
a200: 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ve column names 
a210: 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65  that.** have bee
a220: 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49  n filled out.  I
a230: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  f the schema cha
a240: 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75  nges, these colu
a250: 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a  mn names might.*
a260: 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f  * changes and so
a270: 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e   the view will n
a280: 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e  eed to be reset.
a290: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53  .*/.#define DB_S
a2a0: 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30  chemaLoaded    0
a2b0: 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63  x0001  /* The sc
a2c0: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f  hema has been lo
a2d0: 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aded */.#define 
a2e0: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
a2f0: 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f     0x0002  /* So
a300: 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65  me views have de
a310: 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  fined column nam
a320: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
a330: 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20  _Empty          
a340: 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20   0x0004  /* The 
a350: 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c  file is empty (l
a360: 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a  ength 0 bytes) *
a370: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52 65 73  /.#define DB_Res
a380: 65 74 57 61 6e 74 65 64 20 20 20 20 20 30 78 30  etWanted     0x0
a390: 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20 74 68  008  /* Reset th
a3a0: 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 53  e schema when nS
a3b0: 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a  chemaLock==0 */.
a3c0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
a3d0: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
a3e0: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
a3f0: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
a400: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
a410: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
a420: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
a430: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
a440: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
a450: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
a460: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
a470: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
a480: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
a490: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
a4a0: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
a4b0: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
a4c0: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
a4d0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
a4e0: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
a4f0: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
a500: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a510: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a520: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
a530: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
a540: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
a550: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
a560: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
a570: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
a580: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
a590: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
a5a0: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
a5b0: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
a5c0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
a5d0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
a5e0: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
a5f0: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
a600: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
a610: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
a620: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
a630: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
a640: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
a650: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
a660: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
a670: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
a680: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
a690: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
a6a0: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
a6b0: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
a6c0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
a6d0: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
a6e0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
a6f0: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
a700: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a710: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a720: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
a730: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
a740: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
a750: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
a760: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
a770: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
a780: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
a790: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
a7a0: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
a7b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
a7c0: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
a7d0: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
a7e0: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
a7f0: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
a800: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
a810: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
a820: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
a830: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
a840: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
a850: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
a860: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
a870: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
a880: 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c   {.  u32 bDisabl
a890: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
a8a0: 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65  Only operate the
a8b0: 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20   lookaside when 
a8c0: 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a  zero */.  u16 sz
a8d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a8e0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
a8f0: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
a900: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
a910: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
a920: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
a930: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
a940: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
a950: 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20  */.  u32 nSlot; 
a960: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a970: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73  Number of lookas
a980: 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61  ide slots alloca
a990: 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53  ted */.  u32 anS
a9a0: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
a9b0: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
a9c0: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
a9d0: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
a9e0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
a9f0: 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69   *pInit;   /* Li
aa00: 73 74 20 6f 66 20 62 75 66 66 65 72 73 20 6e 6f  st of buffers no
aa10: 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
aa20: 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  d */.  Lookaside
aa30: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
aa40: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
aa50: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
aa60: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
aa70: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
aa80: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
aa90: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
aaa0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
aab0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
aac0: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
aad0: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
aae0: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
aaf0: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
ab00: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
ab10: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
ab20: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
ab30: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
ab40: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
ab50: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
ab60: 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69  able for built-i
ab70: 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  n function defin
ab80: 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63  itions.  (Applic
ab90: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a  ation-defined.**
aba0: 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61   functions use a
abb0: 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74   regular table t
abc0: 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68  able from hash.h
abd0: 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  .).**.** Hash ea
abe0: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
abf0: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
ac00: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
ac10: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
ac20: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
ac30: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70   the FuncDef.u.p
ac40: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23  Hash chain..*/.#
ac50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ac60: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
ac70: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
ac80: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
ac90: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
aca0: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
acb0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
acc0: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23  nctions */.};..#
acd0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
ace0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
acf0: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
ad00: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
ad10: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
ad20: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
ad30: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
ad40: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
ad50: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
ad60: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
ad70: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
ad80: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
ad90: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
ada0: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
adb0: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
add0: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
ade0: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
adf0: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae10: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
ae20: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
ae30: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
ae40: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
ae50: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
ae60: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
ae70: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
ae80: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
ae90: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
aea0: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
aeb0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
aec0: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
aed0: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
aee0: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
aef0: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
af00: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
af10: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
af20: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
af30: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
af40: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
af50: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
af60: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
af70: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
af80: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
af90: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
afa0: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
afb0: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
afc0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
afd0: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
afe0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
aff0: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
b000: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
b010: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
b020: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
b030: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
b040: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
b050: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
b060: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
b070: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
b080: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
b090: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
b0a0: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
b0b0: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
b0c0: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
b0d0: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
b0e0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
b0f0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
b100: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b110: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b120: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
b130: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
b140: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
b150: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
b160: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
b170: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b180: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
b190: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
b1a0: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
b1b0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b1c0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b1d0: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
b1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1f0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
b200: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
b210: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
b220: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
b230: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
b240: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b250: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b260: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b280: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b290: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
b2a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b2b0: 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73  CATED./* This is
b2c0: 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45   an extra SQLITE
b2d0: 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61  _TRACE macro tha
b2e0: 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67  t indicates "leg
b2f0: 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20  acy" tracing.** 
b300: 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20  in the style of 
b310: 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a  sqlite3_trace().
b320: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b330: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
b340: 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69  0x80.#else.#defi
b350: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
b360: 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66  LEGACY  0.#endif
b370: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
b380: 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a  DEPRECATED */...
b390: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
b3a0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
b3b0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
b3c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
b3d0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
b3e0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
b3f0: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
b400: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
b410: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
b420: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
b430: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
b440: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
b450: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
b460: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
b470: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
b480: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
b490: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
b4a0: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
b4b0: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
b4c0: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
b4d0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
b4e0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
b4f0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
b500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b510: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
b520: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b540: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
b550: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
b560: 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6d  n use */.  u32 m
b570: 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  DbFlags;        
b580: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67           /* flag
b590: 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e 74 65  s recording inte
b5a0: 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20  rnal state */.  
b5b0: 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b5d0: 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c 65 20   flags settable 
b5e0: 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65 65 20  by pragmas. See 
b5f0: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c  below */.  i64 l
b600: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
b610: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
b620: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
b630: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
b640: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d  ve) */.  i64 szM
b650: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
b660: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
b670: 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74  t mmap_size sett
b680: 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53 63  ing */.  u32 nSc
b690: 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20 20  hemaLock;       
b6a0: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
b6b0: 20 72 65 73 65 74 20 74 68 65 20 73 63 68 65 6d   reset the schem
b6c0: 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  a when non-zero 
b6d0: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
b6e0: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
b6f0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
b700: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
b710: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
b720: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
b730: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b740: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
b750: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
b760: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
b770: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
b780: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
b790: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
b7a0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
b7b0: 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73 45  g */.  int iSysE
b7c0: 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20 20  rrno;           
b7d0: 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76 61       /* Errno va
b7e0: 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73 79  lue from last sy
b7f0: 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20 20  stem error */.  
b800: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b820: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
b830: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
b840: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65  ations */.  u8 e
b850: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
b860: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
b870: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  t encoding */.  
b880: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b8a0: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
b8b0: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
b8c0: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
b8d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
b8e0: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
b8f0: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
b900: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
b910: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b920: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
b930: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
b940: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42  ilure */.  u8 bB
b950: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20  enignMalloc;    
b960: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
b970: 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20  ot require OOMs 
b980: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
b990: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20  dfltLockMode;   
b9a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
b9b0: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  fault locking-mo
b9c0: 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20  de for attached 
b9d0: 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20  dbs */.  signed 
b9e0: 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63  char nextAutovac
b9f0: 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61  ;      /* Autova
ba00: 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20  c setting after 
ba10: 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f  VACUUM if >=0 */
ba20: 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72  .  u8 suppressEr
ba30: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
ba40: 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65   /* Do not issue
ba50: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
ba60: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
ba70: 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20  vtabOnConflict; 
ba80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
ba90: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f  lue to return fo
baa0: 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e  r s3_vtab_on_con
bab0: 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20  flict() */.  u8 
bac0: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
bad0: 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72  epoint;    /* Tr
bae0: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d  ue if the outerm
baf0: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73  ost savepoint is
bb00: 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54   a TS */.  u8 mT
bb10: 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20 20  race;           
bb20: 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f           /* zero
bb30: 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f   or more SQLITE_
bb40: 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20  TRACE flags */. 
bb50: 20 75 38 20 73 6b 69 70 42 74 72 65 65 4d 75 74   u8 skipBtreeMut
bb60: 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex;            /
bb70: 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61  * True if no sha
bb80: 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e  red-cache backen
bb90: 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45  ds */.  u8 nSqlE
bba0: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
bbb0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bbc0: 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71  of pending OP_Sq
bbd0: 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f  lExec opcodes */
bbe0: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
bbf0: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
bc00: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
bc10: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
bc20: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
bc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc40: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
bc50: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
bc60: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
bc70: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
bc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc90: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
bca0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
bcb0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
bcc0: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
bcd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
bce0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
bcf0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
bd00: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
bd10: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
bd20: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
bd30: 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  its */.  int nMa
bd40: 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20  xSorterMmap;    
bd50: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
bd60: 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e  m size of region
bd70: 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74  s mapped by sort
bd80: 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  er */.  struct s
bd90: 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b  qlite3InitInfo {
bda0: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
bdb0: 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67  tion used during
bdc0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
bdd0: 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e  */.    int newTn
bde0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
bdf0: 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f     /* Rootpage o
be00: 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  f table being in
be10: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
be20: 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20   u8 iDb;        
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
be40: 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73  Which db file is
be50: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
be60: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73  ed */.    u8 bus
be70: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
be80: 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66        /* TRUE if
be90: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69   currently initi
bea0: 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75  alizing */.    u
beb0: 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b  8 orphanTrigger;
bec0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
bed0: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  st statement is 
bee0: 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72  orphaned TEMP tr
bef0: 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  igger */.    u8 
bf00: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20  imposterTable;  
bf10: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c           /* Buil
bf20: 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72  ding an imposter
bf30: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e   table */.  } in
bf40: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
bf50: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
bf60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bf70: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
bf80: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
bf90: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
bfb0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
bfc0: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
bfd0: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
bfe0: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c000: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c010: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
c020: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
c030: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
c040: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c050: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
c060: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
c070: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ec() */.  int nV
c080: 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20  Destroy;        
c090: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c0a0: 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56  r of active OP_V
c0b0: 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
c0c0: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  ns */.  int nExt
c0d0: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
c0e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c0f0: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
c100: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
c110: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
c120: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
c130: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
c140: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
c150: 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33  int (*xTrace)(u3
c160: 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f  2,void*,void*,vo
c170: 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61  id*);     /* Tra
c180: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
c190: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
c1a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c1b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c1c0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
c1d0: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
c1e0: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
c1f0: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
c200: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
c210: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
c220: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
c230: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c250: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c260: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
c270: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
c280: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
c290: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c2a0: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
c2b0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e  llback() */.  in
c2c0: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
c2d0: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
c2e0: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
c2f0: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
c300: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
c310: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c320: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c330: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
c340: 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ack() */.  void 
c350: 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  (*xRollbackCallb
c360: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20  ack)(void*); /* 
c370: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
c380: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
c390: 69 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a  id *pUpdateArg;.
c3a0: 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65    void (*xUpdate
c3b0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
c3c0: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
c3d0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
c3e0: 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64  ite_int64);.#ifd
c3f0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
c400: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
c410: 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61    void *pPreUpda
c420: 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  teArg;          
c430: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
c440: 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43  t to xPreUpdateC
c450: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
c460: 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61  d (*xPreUpdateCa
c470: 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65  llback)(   /* Re
c480: 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73  gistered using s
c490: 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65  qlite3_preupdate
c4a0: 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76  _hook() */.    v
c4b0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
c4c0: 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68  t,char const*,ch
c4d0: 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65  ar const*,sqlite
c4e0: 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f  3_int64,sqlite3_
c4f0: 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65  int64.  );.  Pre
c500: 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61  Update *pPreUpda
c510: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  te;        /* Co
c520: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
c530: 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c   pre-update call
c540: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  back */.#endif /
c550: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
c560: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a  PREUPDATE_HOOK *
c570: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
c580: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
c590: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
c5a0: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
c5b0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
c5c0: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
c5d0: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
c5e0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
c5f0: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
c600: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
c610: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
c620: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
c630: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
c640: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
c650: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
c660: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
c670: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
c680: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
c690: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
c6a0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
c6b0: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
c6c0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
c6d0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
c6e0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
c6f0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
c700: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
c710: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
c720: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
c730: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
c740: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
c750: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
c760: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
c770: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
c780: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
c790: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
c7a0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
c7b0: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
c7c0: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
c7d0: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
c7e0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
c7f0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
c800: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c810: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
c820: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
c830: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
c840: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
c850: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
c860: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
c870: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
c880: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
c890: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
c8a0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
c8b0: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
c8c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
c8d0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
c8e0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
c8f0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
c900: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
c910: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
c920: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
c930: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
c940: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
c950: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
c960: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
c970: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
c980: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
c990: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
c9a0: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
c9b0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
c9c0: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
c9d0: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
c9e0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
c9f0: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
ca00: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
ca10: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
ca20: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
ca30: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
ca40: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
ca50: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
ca60: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
ca70: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
ca80: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
ca90: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
caa0: 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65  ;    /* Disconne
cab0: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
cac0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
cad0: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48  () */.#endif.  H
cae0: 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20  ash aFunc;      
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cb00: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
cb10: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
cb20: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
cb30: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
cb40: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
cb50: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
cb60: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
cb70: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
cb80: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
cb90: 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62  back */.  Db aDb
cba0: 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20  Static[2];      
cbb0: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69          /* Stati
cbc0: 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20  c space for the 
cbd0: 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e  2 default backen
cbe0: 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  ds */.  Savepoin
cbf0: 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20  t *pSavepoint;  
cc00: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
cc10: 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e   active savepoin
cc20: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79  ts */.  int busy
cc30: 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20  Timeout;        
cc40: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61        /* Busy ha
cc50: 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69  ndler timeout, i
cc60: 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20  n msec */.  int 
cc70: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
cc80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
cc90: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
cca0: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
ccb0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
ccc0: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
ccd0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
cce0: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
ccf0: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
cd00: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
cd10: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
cd20: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
cd30: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
cd40: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
cd50: 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  . */.  i64 nDefe
cd60: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
cd70: 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65       /* Net defe
cd80: 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63  rred immediate c
cd90: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
cda0: 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65  int *pnBytesFree
cdb0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
cdc0: 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e   If not NULL, in
cdd0: 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20  crement this in 
cde0: 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64  DbFree() */.#ifd
cdf0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
ce00: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
ce10: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
ce20: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
ce30: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
ce40: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
ce50: 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  ER.  ** mutex, n
ce60: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
ce70: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
ce80: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
ce90: 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a  tify.c..  **.  *
cea0: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
ceb0: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
cec0: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
ced0: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
cee0: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
cef0: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
cf00: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
cf10: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
cf20: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
cf30: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
cf40: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
cf50: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
cf60: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
cf70: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
cf80: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
cf90: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
cfa0: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
cfb0: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
cfc0: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
cfd0: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
cfe0: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
cff0: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
d000: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
d010: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
d020: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
d030: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
d040: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
d050: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
d060: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
d070: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
d080: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
d090: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
d0a0: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
d0b0: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
d0c0: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
d0d0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
d0e0: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
d0f0: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
d100: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
d110: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
d120: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
d130: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
d140: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
d150: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73  ION.  sqlite3_us
d160: 65 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20  erauth auth;    
d170: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
d180: 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72  entication infor
d190: 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  mation */.#endif
d1a0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  .};../*.** A mac
d1b0: 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74  ro to discover t
d1c0: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  he encoding of a
d1d0: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
d1e0: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43  efine SCHEMA_ENC
d1f0: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
d200: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
d210: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
d220: 20 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65          ((db)->e
d230: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
d240: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
d250: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
d260: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
d270: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
d280: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
d290: 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  ):.**      SQLIT
d2a0: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
d2b0: 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59  == PAGER_FULLFSY
d2c0: 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  NC.**      SQLIT
d2d0: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
d2e0: 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55  == PAGER_CKPT_FU
d2f0: 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20  LLFSYNC.**      
d300: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
d310: 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41  l    == PAGER_CA
d320: 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65  CHE_SPILL.*/.#de
d330: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
d340: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
d350: 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  00001  /* OK to 
d360: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
d370: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
d380: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
d390: 65 46 6d 74 20 20 30 78 30 30 30 30 30 30 30 32  eFmt  0x00000002
d3a0: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
d3b0: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
d3c0: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
d3d0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
d3e0: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30  ames   0x0000000
d3f0: 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  4  /* Show full 
d400: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
d410: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
d420: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
d430: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
d440: 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  08  /* Use full 
d450: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
d460: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
d470: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
d480: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 31 30  Sync  0x00000010
d490: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
d4a0: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
d4b0: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
d4c0: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
d4d0: 20 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20      0x00000020  
d4e0: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
d4f0: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
d500: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
d510: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
d520: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
d530: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
d540: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
d550: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
d560: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
d570: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
d580: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
d590: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d5c0: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
d5d0: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
d5e0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d610: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
d620: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
d630: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d640: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
d650: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
d660: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
d670: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
d680: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
d6b0: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
d6c0: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
d6d0: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
d6e0: 63 6b 73 20 20 20 30 78 30 30 30 30 30 32 30 30  cks   0x00000200
d6f0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
d700: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
d710: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
d720: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
d730: 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30 34 30  mmit   0x0000040
d740: 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d  0  /* READ UNCOM
d750: 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72 65 64  MITTED in shared
d760: 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e  -cache */.#defin
d770: 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f  e SQLITE_NoCkptO
d780: 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30 30 38  nClose  0x000008
d790: 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70  00  /* No checkp
d7a0: 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f  oint on close()/
d7b0: 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e  DETACH */.#defin
d7c0: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
d7d0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 30 31 30  Order   0x000010
d7e0: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
d7f0: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
d800: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d810: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
d820: 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a    0x00002000  /*
d830: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
d840: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
d850: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
d860: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
d870: 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  004000  /* Enfor
d880: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
d890: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
d8a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
d8b0: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
d8c0: 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e 61 62  0008000  /* Enab
d8d0: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
d8e0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
d8f0: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
d900: 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30 30 30  sion  0x00010000
d910: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
d920: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
d930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
d940: 64 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30  dExtFunc    0x00
d950: 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  020000  /* Enabl
d960: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
d970: 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23  () SQL func */.#
d980: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
d990: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
d9a0: 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0040000  /* True
d9b0: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
d9c0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
d9d0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
d9e0: 20 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20       0x00080000 
d9f0: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
da00: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
da10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
da20: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
da30: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44 69 73  00100000  /* Dis
da40: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
da50: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
da60: 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
da70: 43 6b 20 20 20 20 20 30 78 30 30 32 30 30 30 30  Ck     0x0020000
da80: 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65  0  /* Check btre
da90: 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20  e cell sizes on 
daa0: 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  load */.#define 
dab0: 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e  SQLITE_Fts3Token
dac0: 69 7a 65 72 20 20 30 78 30 30 34 30 30 30 30 30  izer  0x00400000
dad0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33    /* Enable fts3
dae0: 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f  _tokenizer(2) */
daf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
db00: 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20 20 30  EnableQPSG     0
db10: 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 51 75  x00800000  /* Qu
db20: 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74 61 62  ery Planner Stab
db30: 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65 65 20  ility Guarantee 
db40: 2a 2f 0a 2f 2a 20 46 6c 61 67 73 20 75 73 65 64  */./* Flags used
db50: 20 6f 6e 6c 79 20 69 66 20 64 65 62 75 67 67 69   only if debuggi
db60: 6e 67 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ng */.#ifdef SQL
db70: 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69 6e  ITE_DEBUG.#defin
db80: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
db90: 65 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30  e       0x080000
dba0: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
dbb0: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
dbc0: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
dbd0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
dbe0: 69 6e 67 20 20 20 20 30 78 31 30 30 30 30 30 30  ing    0x1000000
dbf0: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
dc00: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
dc10: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
dc20: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
dc30: 65 20 20 20 20 20 20 30 78 32 30 30 30 30 30 30  e      0x2000000
dc40: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  0  /* True to tr
dc50: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
dc60: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
dc70: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
dc80: 61 63 65 20 30 78 34 30 30 30 30 30 30 30 20 20  ace 0x40000000  
dc90: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
dca0: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
dcb0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
dcc0: 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20  ITE_VdbeEQP     
dcd0: 20 20 20 30 78 38 30 30 30 30 30 30 30 20 20 2f     0x80000000  /
dce0: 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20  * Debug EXPLAIN 
dcf0: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 65  QUERY PLAN */.#e
dd00: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
dd10: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
dd20: 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a  qlite3.mDbFlags.
dd30: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
dd40: 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 20 20  G_SchemaChange  
dd50: 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f   0x0001  /* Unco
dd60: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
dd70: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
dd80: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50 72 65  efine DBFLAG_Pre
dd90: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
dda0: 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  02  /* Preferenc
ddb0: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
ddc0: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ncs */.#define D
ddd0: 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20 20 20  BFLAG_Vacuum    
dde0: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
ddf0: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
de00: 41 43 55 55 4d 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ACUUM */../*.** 
de10: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
de20: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
de30: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
de40: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
de50: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
de60: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
de70: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
de80: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
de90: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
dea0: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
deb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
dec0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ded0: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
dee0: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
def0: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
df00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
df10: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
df20: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
df30: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
df40: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
df50: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
df60: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
df70: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
df80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
df90: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
dfa0: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
dfb0: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
dfc0: 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  ./*             
dfd0: 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30     not used    0
dfe0: 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20  x0010   // Was: 
dff0: 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73  SQLITE_IdxRealAs
e000: 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Int */.#define S
e010: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
e020: 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  t    0x0020   /*
e030: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
e040: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
e050: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
e060: 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20  dxScan   0x0040 
e070: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
e080: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
e090: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
e0a0: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38  rByIdxJoin 0x008
e0b0: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
e0c0: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
e0d0: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
e0e0: 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69  LITE_SubqCorouti
e0f0: 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20  ne  0x0100   /* 
e100: 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72  Evaluate subquer
e110: 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65  ies as coroutine
e120: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e130: 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20  ITE_Transitive  
e140: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
e150: 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72  ransitive constr
e160: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
e170: 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70   SQLITE_OmitNoop
e180: 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20 20  Join   0x0400   
e190: 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74  /* Omit unused t
e1a0: 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a  ables in joins *
e1b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e1c0: 5f 53 74 61 74 33 34 20 20 20 20 20 20 20 20 20  _Stat34         
e1d0: 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20  0x0800   /* Use 
e1e0: 53 54 41 54 33 20 6f 72 20 53 54 41 54 34 20 64  STAT3 or STAT4 d
e1f0: 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
e200: 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69 65  QLITE_CountOfVie
e210: 77 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a  w    0x1000   /*
e220: 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76 69   The count-of-vi
e230: 65 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  ew optimization 
e240: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e250: 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20  E_CursorHints   
e260: 20 30 78 32 30 30 30 20 20 20 2f 2a 20 41 64 64   0x2000   /* Add
e270: 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f   OP_CursorHint o
e280: 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e  pcodes */.#defin
e290: 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73  e SQLITE_AllOpts
e2a0: 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20          0xffff  
e2b0: 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61   /* All optimiza
e2c0: 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
e2d0: 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69  Macros for testi
e2e0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
e2f0: 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  t optimizations 
e300: 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64  are enabled or d
e310: 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66  isabled..*/.#def
e320: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
e330: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
e340: 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  k)  (((db)->dbOp
e350: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d  tFlags&(mask))!=
e360: 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  0).#define Optim
e370: 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64  izationEnabled(d
e380: 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62  b, mask)   (((db
e390: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
e3a0: 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  ask))==0)../*.**
e3b0: 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
e3c0: 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  it OK to factor 
e3d0: 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  constant express
e3e0: 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e  ions into the in
e3f0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20  itialization.** 
e400: 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65  code. The argume
e410: 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62  nt is a Parse ob
e420: 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64  ject for the cod
e430: 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a  e generator..*/.
e440: 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63  #define ConstFac
e450: 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f  torOk(P) ((P)->o
e460: 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f  kConstFactor)../
e470: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
e480: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
e490: 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e  ite.magic field.
e4a0: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20  .** The numbers 
e4b0: 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20  are obtained at 
e4c0: 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20  random and have 
e4d0: 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69  no special meani
e4e0: 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61  ng, other.** tha
e4f0: 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74  n being distinct
e500: 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65   from one anothe
e510: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
e520: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20  LITE_MAGIC_OPEN 
e530: 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20      0xa029a697  
e540: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f  /* Database is o
e550: 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pen */.#define S
e560: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
e570: 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20  ED   0x9f3c2d33 
e580: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
e590: 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  closed */.#defin
e5a0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53  e SQLITE_MAGIC_S
e5b0: 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32  ICK     0x4b7712
e5c0: 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64  90  /* Error and
e5d0: 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20   awaiting close 
e5e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e5f0: 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20  E_MAGIC_BUSY    
e600: 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20   0xf03b7906  /* 
e610: 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74  Database current
e620: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65  ly in use */.#de
e630: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
e640: 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33  C_ERROR    0xb53
e650: 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c  57930  /* An SQL
e660: 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72  ITE_MISUSE error
e670: 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65   occurred */.#de
e680: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
e690: 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63  C_ZOMBIE   0x64c
e6a0: 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20  ffc7f  /* Close 
e6b0: 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d  with last statem
e6c0: 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a  ent close */../*
e6d0: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e  .** Each SQL fun
e6e0: 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ction is defined
e6f0: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
e700: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
e710: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20  .** structure.  
e720: 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74  For global built
e730: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65  -in functions (e
e740: 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78  x: substr(), max
e750: 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20  (), count()).** 
e760: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  a pointer to thi
e770: 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68  s structure is h
e780: 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  eld in the sqlit
e790: 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  e3BuiltinFunctio
e7a0: 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f  ns object..** Fo
e7b0: 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  r per-connection
e7c0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66   application-def
e7d0: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20  ined functions, 
e7e0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  a pointer to thi
e7f0: 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69  s.** structure i
e800: 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62  s held in the db
e810: 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62  ->aHash hash tab
e820: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e  le..**.** The u.
e830: 70 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75  pHash field is u
e840: 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61  sed by the globa
e850: 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68  l built-ins.  Th
e860: 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a  e u.pDestructor.
e870: 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  ** field is used
e880: 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69   by per-connecti
e890: 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74  on app-def funct
e8a0: 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ions..*/.struct 
e8b0: 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e  FuncDef {.  i8 n
e8c0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
e8d0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
e8e0: 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61  guments.  -1 mea
e8f0: 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a  ns unlimited */.
e900: 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b    u16 funcFlags;
e910: 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63         /* Some c
e920: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51  ombination of SQ
e930: 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20  LITE_FUNC_* */. 
e940: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
e950: 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61  ;     /* User da
e960: 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a  ta parameter */.
e970: 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74    FuncDef *pNext
e980: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66  ;      /* Next f
e990: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d  unction with sam
e9a0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64  e name */.  void
e9b0: 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74   (*xSFunc)(sqlit
e9c0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
e9d0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
e9e0: 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67  ; /* func or agg
e9f0: 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20  -step */.  void 
ea00: 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c  (*xFinalize)(sql
ea10: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20  ite3_context*); 
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea30: 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65   /* Agg finalize
ea40: 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  r */.  const cha
ea50: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53  r *zName;   /* S
ea60: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
ea70: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e  unction. */.  un
ea80: 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65  ion {.    FuncDe
ea90: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
eaa0: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
eab0: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
eac0: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
ead0: 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75  /.    FuncDestru
eae0: 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
eaf0: 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63  r;   /* Referenc
eb00: 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75  e counted destru
eb10: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
eb20: 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  .  } u;.};../*.*
eb30: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
eb40: 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20   encapsulates a 
eb50: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
eb60: 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63  structor callbac
eb70: 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  k (as.** configu
eb80: 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65  red using create
eb90: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20  _function_v2()) 
eba0: 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20  and a reference 
ebb0: 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a  counter. When.**
ebc0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
ebd0: 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20  _v2() is called 
ebe0: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
ebf0: 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74  tion with a dest
ec00: 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e  ructor,.** a sin
ec10: 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  gle object of th
ec20: 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63  is type is alloc
ec30: 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75  ated. FuncDestru
ec40: 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74  ctor.nRef is set
ec50: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
ec60: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
ec70: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
ec80: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
ec90: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
eca0: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
ecb0: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
ecc0: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
ecd0: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
ece0: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
ecf0: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
ed00: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
ed10: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
ed20: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
ed30: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
ed40: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
ed50: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
ed60: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
ed70: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
ed80: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
ed90: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
eda0: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
edb0: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
edc0: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
edd0: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
ede0: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
edf0: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
ee00: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
ee10: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
ee20: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
ee30: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
ee40: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
ee50: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
ee60: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
ee70: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
ee80: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
ee90: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
eea0: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
eeb0: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
eec0: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
eed0: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
eee0: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
eef0: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
ef00: 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45  .  And.** SQLITE
ef10: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d  _FUNC_CONSTANT m
ef20: 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
ef30: 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  as SQLITE_DETERM
ef40: 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a  INISTIC.  There.
ef50: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
ef60: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
ef70: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
ef80: 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c   this..**.** Val
ef90: 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
efa0: 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
efb0: 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53  ert()):.**     S
efc0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
efd0: 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d  X    ==  NC_MinM
efe0: 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46  axAgg      == SF
eff0: 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20  _MinMaxAgg.**   
f000: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45    SQLITE_FUNC_LE
f010: 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c  NGTH    ==  OPFL
f020: 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20  AG_LENGTHARG.** 
f030: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
f040: 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50  TYPEOF    ==  OP
f050: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a  FLAG_TYPEOFARG.*
f060: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
f070: 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20  C_CONSTANT  ==  
f080: 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49  SQLITE_DETERMINI
f090: 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50  STIC from the AP
f0a0: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
f0b0: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64  FUNC_ENCMASK   d
f0c0: 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45  epends on SQLITE
f0d0: 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20  _UTF* macros in 
f0e0: 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69  the API.*/.#defi
f0f0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
f100: 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f  NCMASK  0x0003 /
f110: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
f120: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
f130: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
f140: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f150: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20  LIKE     0x0004 
f160: 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72  /* Candidate for
f170: 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69   the LIKE optimi
f180: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
f190: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41  e SQLITE_FUNC_CA
f1a0: 53 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a  SE     0x0008 /*
f1b0: 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
f1c0: 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
f1d0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
f1e0: 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
f1f0: 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68     0x0010 /* Eph
f200: 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
f210: 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
f220: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f230: 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30  _NEEDCOLL 0x0020
f240: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
f250: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
f260: 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64  t be called*/.#d
f270: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f280: 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34  C_LENGTH   0x004
f290: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
f2a0: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
f2b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f2c0: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
f2d0: 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0080 /* Built-
f2e0: 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
f2f0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
f300: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
f310: 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42  T    0x0100 /* B
f320: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
f330: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
f340: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f350: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30  C_COALESCE 0x020
f360: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
f370: 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
f380: 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
f390: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
f3a0: 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42  KELY 0x0400 /* B
f3b0: 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79  uilt-in unlikely
f3c0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
f3d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f3e0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38  NC_CONSTANT 0x08
f3f0: 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69  00 /* Constant i
f400: 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e  nputs give a con
f410: 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a  stant output */.
f420: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f430: 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31  UNC_MINMAX   0x1
f440: 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  000 /* True for 
f450: 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20  min() and max() 
f460: 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64  aggregates */.#d
f470: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f480: 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30  C_SLOCHNG  0x200
f490: 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67  0 /* "Slow Chang
f4a0: 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61  e". Value consta
f4b0: 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20  nt during a.    
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4e0: 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20  ** single query 
f4f0: 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f  - might change o
f500: 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66  ver time */.#def
f510: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f520: 41 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20  AFFINITY 0x4000 
f530: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69  /* Built-in affi
f540: 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  nity() function 
f550: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
f560: 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
f570: 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
f580: 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
f590: 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
f5a0: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
f5b0: 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
f5c0: 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
f5d0: 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
f5e0: 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
f5f0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f600: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
f610: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
f620: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
f630: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
f640: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
f650: 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d   zName.**     im
f660: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
f670: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
f680: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
f690: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
f6a0: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
f6b0: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
f6c0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
f6d0: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
f6e0: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
f6f0: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
f700: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
f710: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
f720: 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67  n. If.**     arg
f730: 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
f740: 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
f750: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
f760: 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
f770: 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28  .**   VFUNCTION(
f780: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
f790: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
f7a0: 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
f7b0: 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
f7c0: 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
f7d0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
f7e0: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43  g..**.**   DFUNC
f7f0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
f800: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
f810: 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
f820: 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
f830: 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
f840: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
f850: 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20  T flag and.**   
f860: 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54    adds the SQLIT
f870: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66  E_FUNC_SLOCHNG f
f880: 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64  lag.  Used for d
f890: 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74  ate & time funct
f8a0: 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20  ions.**     and 
f8b0: 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73  functions like s
f8c0: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
f8d0: 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c  that can change,
f8e0: 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a   but not during.
f8f0: 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20  **     a single 
f900: 71 75 65 72 79 2e 20 20 54 68 65 20 69 41 72 67  query.  The iArg
f910: 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20 54 68   is ignored.  Th
f920: 65 20 75 73 65 72 2d 64 61 74 61 20 69 73 20 61  e user-data is a
f930: 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20 20 20  lways set.**    
f940: 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74   to a NULL point
f950: 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72  er.  The bNC par
f960: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
f970: 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45  ed..**.**   PURE
f980: 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
f990: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f9a0: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
f9b0: 20 66 6f 72 20 22 70 75 72 65 22 20 64 61 74 65   for "pure" date
f9c0: 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c  /time functions,
f9d0: 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6c   this macro is l
f9e0: 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a  ike DFUNCTION.**
f9f0: 20 20 20 20 20 65 78 63 65 70 74 20 74 68 61 74       except that
fa00: 20 69 74 20 64 6f 65 73 20 73 65 74 20 74 68 65   it does set the
fa10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fa20: 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20 69 41  STANT flags.  iA
fa30: 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e  rg is.**     ign
fa40: 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75 73 65  ored and the use
fa50: 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65 73 65  r-data for these
fa60: 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 73 65   functions is se
fa70: 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20  t to an .**     
fa80: 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55  arbitrary non-NU
fa90: 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65  LL pointer.  The
faa0: 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69   bNC parameter i
fab0: 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
fac0: 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
fad0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
fae0: 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
faf0: 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
fb00: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
fb10: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
fb20: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
fb30: 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
fb40: 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
fb50: 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
fb60: 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
fb70: 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
fb80: 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
fb90: 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
fba0: 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
fbb0: 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
fbc0: 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
fbd0: 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
fbe0: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
fbf0: 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
fc00: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
fc10: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
fc20: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
fc30: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
fc40: 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
fc50: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
fc60: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
fc70: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
fc80: 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
fc90: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
fca0: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
fcb0: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
fcc0: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
fcd0: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
fce0: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
fcf0: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
fd00: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
fd10: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
fd20: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
fd30: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
fd40: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
fd50: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
fd60: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
fd70: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
fd80: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
fd90: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
fda0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
fdb0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
fdc0: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
fdd0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
fde0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
fdf0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
fe00: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
fe10: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
fe20: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55  0} }.#define VFU
fe30: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
fe40: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
fe50: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
fe60: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e   SQLITE_UTF8|(bN
fe70: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
fe80: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
fe90: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
fea0: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
feb0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
fec0: 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54  }.#define DFUNCT
fed0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
fee0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
fef0: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
ff00: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
ff10: 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 5c  G|SQLITE_UTF8, \
ff20: 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c  .   0, 0, xFunc,
ff30: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
ff40: 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45 5f 44  }.#define PURE_D
ff50: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
ff60: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
ff70: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
ff80: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
ff90: 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 53 51  G|SQLITE_UTF8|SQ
ffa0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
ffb0: 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64 2a 29  NT, \.   (void*)
ffc0: 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20  &sqlite3Config, 
ffd0: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
ffe0: 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
fff0: 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61  ne FUNCTION2(zNa
10000 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10010 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72  bNC, xFunc, extr
10020 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
10030 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  g,SQLITE_FUNC_CO
10040 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
10050 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10060 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
10070 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51  traFlags,\.   SQ
10080 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
10090 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
100a0 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
100b0 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55  }.#define STR_FU
100c0 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
100d0 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78  rg, pArg, bNC, x
100e0 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
100f0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
10100 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38  CHNG|SQLITE_UTF8
10110 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
10120 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
10130 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63    pArg, 0, xFunc
10140 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23  , 0, #zName, }.#
10150 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
10160 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
10170 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
10180 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10190 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
101a0 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
101b0 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
101c0 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 23 7a   likeFunc, 0, #z
101d0 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
101e0 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e  ine AGGREGATE(zN
101f0 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
10200 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
10210 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  l) \.  {nArg, SQ
10220 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
10230 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10240 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
10250 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
10260 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
10270 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23  l,#zName, {0}}.#
10280 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
10290 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  2(zName, nArg, a
102a0 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
102b0 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67  Final, extraFlag
102c0 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
102d0 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
102e0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
102f0 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
10300 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
10310 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
10320 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
10330 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a  ame, {0}}../*.**
10340 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
10350 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
10360 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
10370 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
10380 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
10390 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
103a0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
103b0 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
103c0 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
103d0 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
103e0 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
103f0 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
10400 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
10410 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
10420 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
10430 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
10440 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10460 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
10470 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
10480 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
10490 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
104c0 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
104d0 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
104e0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10500 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
10510 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
10520 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
10530 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
10540 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
10550 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
10560 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
10570 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
10580 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
10590 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
105a0 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
105b0 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
105c0 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
105d0 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
105e0 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
105f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
10600 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
10610 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
10620 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
10630 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
10640 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
10650 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
10660 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
10670 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
10680 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
10690 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
106a0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
106b0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
106c0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
106d0 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
106e0 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
106f0 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
10700 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
10710 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
10720 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
10730 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
10740 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
10750 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
10760 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
10770 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
10780 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
10790 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
107c0 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
107d0 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
107e0 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
107f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10800 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
10810 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
10820 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20  Table *pEpoTab; 
10830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10840 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75       /* Eponymou
10850 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  s table for this
10860 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   module */.};../
10870 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  *.** information
10880 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
10890 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62  mn of an SQL tab
108a0 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e  le is held in an
108b0 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
108c0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
108d0 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  */.struct Column
108e0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
108f0 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
10900 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30   this column, \0
10910 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70  00, then the typ
10920 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  e */.  Expr *pDf
10930 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
10940 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
10950 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
10960 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
10970 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
10980 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
10990 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
109a0 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
109b0 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
109c0 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
109d0 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
109e0 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
109f0 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
10a00 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
10a10 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
10a20 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
10a30 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
10a40 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75  ted size of valu
10a50 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e in this column
10a60 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31  . sizeof(INT)==1
10a70 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
10a80 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
10a90 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
10aa0 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
10ab0 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
10ac0 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
10ad0 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
10ae0 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
10af0 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
10b00 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
10b10 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
10b20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
10b30 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
10b40 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
10b50 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
10b60 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
10b70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
10b80 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
10b90 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30 30  G_HASTYPE  0x000
10ba0 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d  4    /* Type nam
10bb0 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e  e follows column
10bc0 20 6e 61 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   name */../*.** 
10bd0 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
10be0 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
10bf0 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
10c00 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
10c10 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
10c20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
10c30 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10c40 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
10c50 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
10c60 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
10c70 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
10c80 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
10c90 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
10ca0 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
10cb0 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
10cc0 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
10cd0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10ce0 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
10cf0 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
10d00 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
10d10 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
10d20 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
10d30 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
10d40 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
10d50 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
10d60 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
10d70 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
10d80 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
10d90 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
10da0 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
10db0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
10dc0 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
10dd0 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
10de0 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
10df0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
10e00 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
10e10 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
10e20 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
10e30 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
10e40 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
10e50 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
10e60 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
10e70 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
10e80 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
10e90 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
10ea0 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
10eb0 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
10ec0 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
10ed0 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
10ee0 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
10ef0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
10f00 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
10f10 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
10f20 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
10f30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10f40 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20  SO_UNDEFINED -1 
10f50 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72  /* No sort order
10f60 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f   specified */../
10f70 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69  *.** Column affi
10f80 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a  nity types..**.*
10f90 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20  * These used to 
10fa0 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61  have mnemonic na
10fb0 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20  me like 'i' for 
10fc0 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
10fd0 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f  ER and.** 't' fo
10fe0 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  r SQLITE_AFF_TEX
10ff0 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73  T.  But we can s
11000 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61  ave a little spa
11010 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a  ce and improve.*
11020 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69  * the speed a li
11030 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e  ttle by numberin
11040 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e  g the values con
11050 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a  secutively..**.*
11060 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
11070 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
11080 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
11090 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61  th 'A'.  That wa
110a0 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
110b0 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
110c0 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
110d0 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
110e0 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
110f0 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
11100 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
11110 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
11120 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
11130 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
11140 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
11150 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
11160 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
11170 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
11180 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
11190 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20  rison.  And the 
111a0 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72  BLOB type is fir
111b0 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  st..*/.#define S
111c0 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20  QLITE_AFF_BLOB  
111d0 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53     'A'.#define S
111e0 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20  QLITE_AFF_TEXT  
111f0 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53     'B'.#define S
11200 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
11210 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53  C  'C'.#define S
11220 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
11230 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53  R  'D'.#define S
11240 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20  QLITE_AFF_REAL  
11250 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20     'E'..#define 
11260 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63  sqlite3IsNumeric
11270 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58  Affinity(X)  ((X
11280 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  )>=SQLITE_AFF_NU
11290 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  MERIC)../*.** Th
112a0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
112b0 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f  K values masks o
112c0 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61  ff the significa
112d0 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a  nt bits of an.**
112e0 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e   affinity value.
112f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
11300 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20  TE_AFF_MASK     
11310 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69  0x47../*.** Addi
11320 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65  tional bit value
11330 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52  s that can be OR
11340 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e  ed with an affin
11350 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63  ity without.** c
11360 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69  hanging the affi
11370 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  nity..**.** The 
11380 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66  SQLITE_NOTNULL f
11390 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61  lag is a combina
113a0 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61  tion of NULLEQ a
113b0 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a  nd JUMPIFNULL..*
113c0 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61  * It causes an a
113d0 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20  ssert() to fire 
113e0 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
113f0 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f  d to a compariso
11400 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73  n.** operator is
11410 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64   NULL.  It is ad
11420 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63  ded to certain c
11430 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
11440 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20  ors to.** prove 
11450 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64  that the operand
11460 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54  s are always NOT
11470 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e   NULL..*/.#defin
11480 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c  e SQLITE_KEEPNUL
11490 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 55  L     0x08  /* U
114a0 73 65 64 20 62 79 20 76 65 63 74 6f 72 20 3d 3d  sed by vector ==
114b0 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e   or <> */.#defin
114c0 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
114d0 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a  ULL   0x10  /* j
114e0 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f  umps if either o
114f0 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a  perand is NULL *
11500 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11510 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78  _STOREP2      0x
11520 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  20  /* Store res
11530 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72  ult in reg[P2] r
11540 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20  ather than jump 
11550 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
11560 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30  E_NULLEQ       0
11570 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c  x80  /* NULL=NUL
11580 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
11590 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20  ITE_NOTNULL     
115a0 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74   0x90  /* Assert
115b0 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61   that operands a
115c0 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f  re never NULL */
115d0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
115e0 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
115f0 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
11600 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
11610 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
11620 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
11630 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ma..**.** If the
11640 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
11650 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
11660 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
11670 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
11680 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
11690 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
116a0 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
116b0 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
116c0 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
116d0 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
116e0 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
116f0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
11700 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
11710 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
11720 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
11730 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
11740 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
11750 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a  virtual table.**
11760 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
11770 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
11780 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
11790 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
117a0 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
117b0 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
117c0 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
117d0 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
117e0 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61  tabase.** schema
117f0 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
11800 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
11810 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
11820 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
11830 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
11840 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
11850 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
11860 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
11870 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
11880 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
11890 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
118a0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
118b0 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
118c0 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79   then be used by
118d0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
118e0 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
118f0 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c  n to access real
11900 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69   tables.** withi
11910 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
11920 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
11930 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
11940 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72  he callers.** tr
11950 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
11960 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
11970 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
11980 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a  e same database.
11990 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  ** connection as
119a0 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78   that used to ex
119b0 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74  ecute SQL operat
119c0 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74  ions on the virt
119d0 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ual table..**.**
119e0 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65   All VTable obje
119f0 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70  cts that corresp
11a00 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  ond to a single 
11a10 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65  table in a share
11a20 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63  d.** database sc
11a30 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c  hema are initial
11a40 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  ly stored in a l
11a50 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74  inked-list point
11a60 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20  ed to by.** the 
11a70 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65  Table.pVTable me
11a80 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66  mber variable of
11a90 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
11aa0 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e  ng Table object.
11ab0 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69  .** When an sqli
11ac0 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70  te3_prepare() op
11ad0 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69  eration is requi
11ae0 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  red to access th
11af0 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
11b00 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20  le, it searches 
11b10 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65  the list for the
11b20 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72   VTable that cor
11b30 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a  responds to the.
11b40 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
11b50 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65  ection doing the
11b60 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73   preparing so as
11b70 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72   to use the corr
11b80 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76  ect.** sqlite3_v
11b90 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74  tab* handle in t
11ba0 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
11bb0 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e  y..**.** When an
11bc0 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65   in-memory Table
11bd0 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74   object is delet
11be0 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20  ed (for example 
11bf0 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65  when the.** sche
11c00 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f  ma is being relo
11c10 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65  aded for some re
11c20 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c  ason), the VTabl
11c30 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f  e objects are no
11c40 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64  t.** deleted and
11c50 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
11c60 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e  b* handles are n
11c70 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29  ot xDisconnect()
11c80 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ed.** immediatel
11c90 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
11ca0 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
11cb0 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
11cc0 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
11cd0 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
11ce0 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
11cf0 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
11d00 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
11d10 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
11d20 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
11d30 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
11d40 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
11d50 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74  onnected.** next
11d60 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e   time a statemen
11d70 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73  t is prepared us
11d80 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33  ing said sqlite3
11d90 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a  *. This is done.
11da0 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64  ** to avoid dead
11db0 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f  lock issues invo
11dc0 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73  lving multiple s
11dd0 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
11de0 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74  exes..** Refer t
11df0 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65  o comments above
11e00 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   function sqlite
11e10 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
11e20 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c  ) for an.** expl
11e30 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68  anation as to wh
11e40 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20  y it is safe to 
11e50 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20  add an entry to 
11e60 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  an sqlite3.pDisc
11e70 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77  onnect.** list w
11e80 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74  ithout holding t
11e90 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
11ea0 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
11eb0 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  utex..**.** The 
11ec0 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63  memory for objec
11ed0 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ts of this type 
11ee0 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61  is always alloca
11ef0 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  ted by.** sqlite
11f00 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
11f10 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
11f20 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
11f30 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 0a  in VTable.db as.
11f40 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67  ** the first arg
11f50 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ument..*/.struct
11f60 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69   VTable {.  sqli
11f70 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
11f80 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
11f90 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73  e connection ass
11fa0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
11fb0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64  s table */.  Mod
11fc0 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20  ule *pMod;      
11fd0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
11fe0 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  r to module impl
11ff0 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
12000 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
12010 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69  tab;      /* Poi
12020 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73  nter to vtab ins
12030 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  tance */.  int n
12040 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
12050 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12060 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
12070 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  is structure */.
12080 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74    u8 bConstraint
12090 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
120a0 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
120b0 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ts are supported
120c0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70   */.  int iSavep
120d0 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
120e0 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20  /* Depth of the 
120f0 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20  SAVEPOINT stack 
12100 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65  */.  VTable *pNe
12110 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
12120 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64  * Next in linked
12130 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65   list (see above
12140 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
12150 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61  he schema for ea
12160 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64  ch SQL table and
12170 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73 65   view is represe
12180 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
12190 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  * by an instance
121a0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
121b0 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
121c0 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
121d0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
121e0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
121f0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
12200 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
12210 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
12220 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
12230 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
12240 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
12250 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
12260 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
12270 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
12280 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
12290 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
122a0 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
122b0 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
122c0 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
122d0 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
122e0 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
122f0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
12300 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
12310 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
12320 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
12330 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
12340 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
12350 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
12360 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
12370 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c  pCheck;    /* Al
12380 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  l CHECK constrai
12390 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nts */.         
123a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
123b0 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64     ... also used
123c0 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20   as column name 
123d0 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a  list in a VIEW *
123e0 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
123f0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
12400 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20   BTree page for 
12410 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
12420 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20 20 20  u32 nTabRef;    
12430 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12440 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
12450 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75 33  is Table */.  u3
12460 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20  2 tabFlags;     
12470 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46     /* Mask of TF
12480 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
12490 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20  16 iPKey;       
124a0 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65      /* If not ne
124b0 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c  gative, use aCol
124c0 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72  [iPKey] as the r
124d0 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43  owid */.  i16 nC
124e0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
124f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
12500 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
12510 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52  e */.  LogEst nR
12520 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45  owLogEst;   /* E
12530 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e  stimated rows in
12540 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71   table - from sq
12550 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
12560 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54   */.  LogEst szT
12570 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  abRow;     /* Es
12580 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
12590 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69  each table row i
125a0 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65  n bytes */.#ifde
125b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
125c0 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73  COSTMULT.  LogEs
125d0 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20  t costMult;     
125e0 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69  /* Cost multipli
125f0 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69  er for using thi
12600 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  s table */.#endi
12610 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  f.  u8 keyConf; 
12620 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74           /* What
12630 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
12640 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  f uniqueness con
12650 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a  flict on iPKey *
12660 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
12670 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
12680 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
12690 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
126a0 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
126b0 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
126c0 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
126d0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
126e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
126f0 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64  TABLE.  int nMod
12700 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20  uleArg;      /* 
12710 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
12720 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
12730 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
12740 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30  ModuleArg;  /* 0
12750 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65  : module 1: sche
12760 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20  ma 2: vtab name 
12770 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20  3...: args */.  
12780 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
12790 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
127a0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
127b0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
127c0 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
127d0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
127e0 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
127f0 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
12800 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
12810 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
12820 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
12830 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
12840 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
12850 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
12860 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
12870 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
12880 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
12890 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67  or Table.tabFlag
128a0 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48  s..**.** TF_OOOH
128b0 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f  idden applies to
128c0 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77 20   tables or view 
128d0 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e  that have hidden
128e0 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72   columns that ar
128f0 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79  e.** followed by
12900 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
12910 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20  mns.  Example:  
12920 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  "CREATE VIRTUAL 
12930 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a  TABLE x USING.**
12940 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c   vtab1(a HIDDEN,
12950 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62   b);".  Since "b
12960 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65  " is a non-hidde
12970 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22  n column but "a"
12980 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74   is hidden,.** t
12990 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  he TF_OOOHidden 
129a0 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20  attribute would 
129b0 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61  apply in this ca
129c0 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73  se.  Such tables
129d0 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63   require.** spec
129e0 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72  ial handling dur
129f0 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65  ing INSERT proce
12a00 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ssing..*/.#defin
12a10 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20  e TF_Readonly   
12a20 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
12a30 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74  * Read-only syst
12a40 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  em table */.#def
12a50 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c  ine TF_Ephemeral
12a60 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 20         0x0002   
12a70 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c   /* An ephemeral
12a80 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
12a90 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b  e TF_HasPrimaryK
12aa0 65 79 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  ey   0x0004    /
12ab0 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72  * Table has a pr
12ac0 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
12ad0 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72  fine TF_Autoincr
12ae0 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38 20 20  ement   0x0008  
12af0 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69    /* Integer pri
12b00 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f  mary key is auto
12b10 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65  increment */.#de
12b20 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61 74 31  fine TF_HasStat1
12b30 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20          0x0010  
12b40 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73 74 20    /* nRowLogEst 
12b50 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  set from sqlite_
12b60 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69 6e 65  stat1 */.#define
12b70 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
12b80 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a      0x0020    /*
12b90 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d   No rowid.  PRIM
12ba0 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
12bb0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
12bc0 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20  _NoVisibleRowid 
12bd0 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 4e 6f   0x0040    /* No
12be0 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72   user-visible "r
12bf0 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  owid" column */.
12c00 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69  #define TF_OOOHi
12c10 64 64 65 6e 20 20 20 20 20 20 20 30 78 30 30 38  dden       0x008
12c20 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f  0    /* Out-of-O
12c30 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75  rder hidden colu
12c40 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  mns */.#define T
12c50 46 5f 53 74 61 74 73 55 73 65 64 20 20 20 20 20  F_StatsUsed     
12c60 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a 20 51    0x0100    /* Q
12c70 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64 65 63  uery planner dec
12c80 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65 64 20  isions affected 
12c90 62 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  by.             
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cb0 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64 65 78          ** Index
12cc0 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d 20 76  .aiRowLogEst[] v
12cd0 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  alues */.#define
12ce0 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20 20   TF_HasNotNull  
12cf0 20 20 20 20 30 78 30 32 30 30 20 20 20 20 2f 2a      0x0200    /*
12d00 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20 4e 55   Contains NOT NU
12d10 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  LL constraints *
12d20 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  /../*.** Test to
12d30 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
12d40 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
12d50 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
12d60 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
12d70 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
12d80 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
12d90 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
12da0 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
12db0 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
12dc0 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
12dd0 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
12de0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
12df0 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
12e00 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
12e10 20 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f 64        ((X)->nMod
12e20 75 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a 23 20  uleArg).#else.# 
12e30 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
12e40 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e 64  l(X)      0.#end
12e50 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
12e60 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
12e70 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64   a column is hid
12e80 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72 79  den.  IsOrdinary
12e90 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a  HiddenColumn().*
12ea0 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
12eb0 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61 62   non-virtual tab
12ec0 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74 61  les (ordinary ta
12ed0 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29 20  bles and views) 
12ee0 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  and is.** always
12ef0 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53 51   false unless SQ
12f00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
12f10 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65  EN_COLUMNS is de
12f20 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49  fined.  The.** I
12f30 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20  sHiddenColumn() 
12f40 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61 6c  macro is general
12f50 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66   purpose..*/.#if
12f60 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
12f70 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
12f80 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e 65  LUMNS).#  define
12f90 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
12fa0 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
12fb0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
12fc0 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
12fd0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
12fe0 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
12ff0 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46  n(X) (((X)->colF
13000 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
13010 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66  IDDEN)!=0).#elif
13020 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
13030 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
13040 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  LE).#  define Is
13050 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
13060 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63          (((X)->c
13070 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
13080 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20  G_HIDDEN)!=0).# 
13090 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61   define IsOrdina
130a0 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  ryHiddenColumn(X
130b0 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ) 0.#else.#  def
130c0 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
130d0 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 30 0a  mn(X)         0.
130e0 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
130f0 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
13100 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f  (X) 0.#endif.../
13110 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65  * Does the table
13120 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f   have a rowid */
13130 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69  .#define HasRowi
13140 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e  d(X)     (((X)->
13150 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69  tabFlags & TF_Wi
13160 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a  thoutRowid)==0).
13170 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52  #define VisibleR
13180 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74  owid(X) (((X)->t
13190 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56  abFlags & TF_NoV
131a0 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29  isibleRowid)==0)
131b0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72  ../*.** Each for
131c0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
131d0 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  int is an instan
131e0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
131f0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
13200 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b  *.** A foreign k
13210 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64  ey is associated
13220 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73   with two tables
13230 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61  .  The "from" ta
13240 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61  ble is.** the ta
13250 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
13260 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  s the REFERENCES
13270 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65   clause that cre
13280 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e  ates the foreign
13290 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74  .** key.  The "t
132a0 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  o" table is the 
132b0 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61  table that is na
132c0 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52  med in the REFER
132d0 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a  ENCES clause..**
132e0 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65   Consider this e
132f0 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
13300 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65    CREATE TABLE e
13310 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49  x1(.**       a I
13320 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
13330 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49  EY,.**       b I
13340 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e  NTEGER CONSTRAIN
13350 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53  T fk1 REFERENCES
13360 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29   ex2(x).**     )
13370 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65  ;.**.** For fore
13380 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74  ign key "fk1", t
13390 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
133a0 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74   "ex1" and the t
133b0 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22  o-table is "ex2"
133c0 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20  ..** Equivalent 
133d0 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  names:.**.**    
133e0 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63   from-table == c
133f0 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20  hild-table.**   
13400 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20      to-table == 
13410 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a  parent-table.**.
13420 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
13430 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
13440 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
13450 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
13460 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
13470 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
13480 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
13490 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
134a0 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
134b0 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
134c0 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
134d0 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
134e0 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
134f0 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
13500 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74  ..**.** The list
13510 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20   of all parents 
13520 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20  for child Table 
13530 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70  X is held at X.p
13540 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69  FKey..**.** A li
13550 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72  st of all childr
13560 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e  en for a table n
13570 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69  amed Z (which mi
13580 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69  ght not even exi
13590 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69  st).** is held i
135a0 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73  n Schema.fkeyHas
135b0 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65  h with a hash ke
135c0 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63  y of Z..*/.struc
135d0 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65  t FKey {.  Table
135e0 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20   *pFrom;     /* 
135f0 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
13600 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
13610 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69  clause (aka: Chi
13620 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ld) */.  FKey *p
13630 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
13640 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65  xt FKey with the
13650 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20   same in pFrom. 
13660 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70  Next parent of p
13670 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
13680 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
13690 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
136a0 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
136b0 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74   to (aka: Parent
136c0 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
136d0 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74  xtTo;    /* Next
136e0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
136f0 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f  To. Next child o
13700 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79  f zTo. */.  FKey
13710 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a   *pPrevTo;    /*
13720 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74   Previous with t
13730 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20  he same zTo */. 
13740 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
13750 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13760 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
13770 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
13780 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
13790 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
137a0 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ;       /* True 
137b0 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
137c0 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
137d0 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
137e0 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
137f0 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20  ];        /* ON 
13800 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50  DELETE and ON UP
13810 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65  DATE actions, re
13820 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20  spectively */.  
13830 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67  Trigger *apTrigg
13840 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72  er[2];/* Trigger
13850 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20  s for aAction[] 
13860 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  actions */.  str
13870 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20  uct sColMap {   
13880 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66     /* Mapping of
13890 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
138a0 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
138b0 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
138c0 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20  From;           
138d0 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
138e0 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
138f0 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
13900 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
13910 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
13920 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65  To.  If NULL use
13930 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
13940 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20    } aCol[1];    
13950 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
13960 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
13970 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f   nCol columns */
13980 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74  .};../*.** SQLit
13990 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
139a0 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
139b0 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73  o resolve a cons
139c0 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  traint.** error.
139d0 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65    ROLLBACK proce
139e0 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
139f0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
13a00 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65  olation.** cause
13a10 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
13a20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61  in process to fa
13a30 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63  il and for the c
13a40 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
13a50 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c  on.** to be roll
13a60 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20  ed back.  ABORT 
13a70 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
13a80 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
13a90 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69  n process.** fai
13aa0 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72  ls and any prior
13ab0 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68   changes from th
13ac0 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e  at one operation
13ad0 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c   are backed out,
13ae0 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e  .** but the tran
13af0 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72  saction is not r
13b00 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49  olled back.  FAI
13b10 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  L processing mea
13b20 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f  ns that.** the o
13b30 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  peration in prog
13b40 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72  ress stops and r
13b50 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20  eturns an error 
13b60 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72  code.  But prior
13b70 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20  .** changes due 
13b80 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  to the same oper
13b90 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61  ation are not ba
13ba0 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20  cked out and no 
13bb0 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75  rollback.** occu
13bc0 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e  rs.  IGNORE mean
13bd0 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69  s that the parti
13be0 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63  cular row that c
13bf0 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72  aused the constr
13c00 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73  aint.** error is
13c10 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
13c20 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65   updated.  Proce
13c30 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
13c40 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20  and no error.** 
13c50 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45  is returned.  RE
13c60 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74  PLACE means that
13c70 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
13c80 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
13c90 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51  caused.** a UNIQ
13ca0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
13cb0 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
13cc0 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ved so that the 
13cd0 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a  new insert or.**
13ce0 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63   update can proc
13cf0 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  eed.  Processing
13d00 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
13d10 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72  o error is repor
13d20 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52  ted..**.** RESTR
13d30 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e  ICT, SETNULL, an
13d40 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e  d CASCADE action
13d50 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20  s apply only to 
13d60 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a  foreign keys..**
13d70 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65   RESTRICT is the
13d80 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66   same as ABORT f
13d90 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72  or IMMEDIATE for
13da0 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68  eign keys and th
13db0 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c  e.** same as ROL
13dc0 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52  LBACK for DEFERR
13dd0 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c  ED keys.  SETNUL
13de0 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  L means that the
13df0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
13e00 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20  is set to NULL. 
13e10 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74   CASCADE means t
13e20 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20  hat a DELETE or 
13e30 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a  UPDATE of the.**
13e40 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
13e50 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61  e row is propaga
13e60 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77  ted into the row
13e70 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a   that holds the.
13e80 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a  ** foreign key..
13e90 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
13ea0 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
13eb0 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
13ec0 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
13ed0 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
13ee0 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
13ef0 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
13f00 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
13f10 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
13f20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
13f30 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
13f40 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
13f50 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
13f60 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
13f70 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
13f80 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
13f90 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
13fa0 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
13fb0 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
13fc0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
13fd0 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
13fe0 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
13ff0 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
14000 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
14010 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
14020 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
14030 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
14040 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
14050 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
14060 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
14070 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
14080 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
14090 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
140a0 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
140b0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
140c0 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41  rict 6   /* OE_A
140d0 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
140e0 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
140f0 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
14100 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
14110 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74  ll  7   /* Set t
14120 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
14130 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
14140 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
14150 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  lt  8   /* Set t
14160 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
14170 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
14180 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
14190 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f  E_Cascade  9   /
141a0 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
141b0 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e  anges */..#defin
141c0 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30  e OE_Default  10
141d0 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
141e0 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
141f0 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
14200 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
14210 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
14220 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
14230 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
14240 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
14250 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
14260 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
14270 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a   to control the.
14280 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  ** comparison of
14290 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b   the two index k
142a0 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  eys..**.** Note 
142b0 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b  that aSortOrder[
142c0 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61  ] and aColl[] ha
142d0 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74  ve nField+1 slot
142e0 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  s.  There.** are
142f0 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f   nField slots fo
14300 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  r the columns of
14310 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f   an index then o
14320 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a  ne extra slot.**
14330 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61   for the rowid a
14340 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  t the end..*/.st
14350 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
14360 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20   u32 nRef;      
14370 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14380 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  f references to 
14390 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  this KeyInfo obj
143a0 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ect */.  u8 enc;
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
143c0 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
143d0 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
143e0 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f  E_UTF* values */
143f0 0a 20 20 75 31 36 20 6e 4b 65 79 46 69 65 6c 64  .  u16 nKeyField
14400 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
14410 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20   of key columns 
14420 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
14430 20 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c 64 3b    u16 nAllField;
14440 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 63        /* Total c
14450 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64 69 6e  olumns, includin
14460 67 20 6b 65 79 20 70 6c 75 73 20 6f 74 68 65 72  g key plus other
14470 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  s */.  sqlite3 *
14480 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
14490 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
144a0 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61  ction */.  u8 *a
144b0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f  SortOrder;     /
144c0 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72  * Sort order for
144d0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f   each column. */
144e0 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c  .  CollSeq *aCol
144f0 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  l[1];  /* Collat
14500 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ing sequence for
14510 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
14520 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  e key */.};../*.
14530 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68  ** This object h
14540 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 77 68  olds a record wh
14550 69 63 68 20 68 61 73 20 62 65 65 6e 20 70 61 72  ich has been par
14560 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
14570 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64  ividual.** field
14580 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  s, for the purpo
14590 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61 20 63  ses of doing a c
145a0 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a  omparison..**.**
145b0 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20   A record is an 
145c0 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74  object that cont
145d0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
145e0 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e   fields of data.
145f0 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20  .** Records are 
14600 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
14610 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74  e content of a t
14620 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20  able row and to 
14630 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79  store.** the key
14640 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41   of an index.  A
14650 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f   blob encoding o
14660 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72  f a record is cr
14670 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  eated by.** the 
14680 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  OP_MakeRecord op
14690 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45  code of the VDBE
146a0 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d   and is disassem
146b0 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f  bled by the.** O
146c0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
146d0 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  .**.** An instan
146e0 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
146f0 74 20 73 65 72 76 65 73 20 61 73 20 61 20 22 6b  t serves as a "k
14700 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20 61 20  ey" for doing a 
14710 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20  search on.** an 
14720 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20 54 68  index b+tree. Th
14730 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20 73 65  e goal of the se
14740 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e 64 20  arch is to find 
14750 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  the entry that.*
14760 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f 20 74  * is closed to t
14770 68 65 20 6b 65 79 20 64 65 73 63 72 69 62 65 64  he key described
14780 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63 74 2e   by this object.
14790 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 6d 69    This object mi
147a0 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74  ght hold.** just
147b0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
147c0 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d 62 65   key.  The numbe
147d0 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73 20 67  r of fields is g
147e0 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49  iven by.** pKeyI
147f0 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a  nfo->nField..**.
14800 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32  ** The r1 and r2
14810 20 66 69 65 6c 64 73 20 61 72 65 20 74 68 65 20   fields are the 
14820 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75 72 6e  values to return
14830 20 69 66 20 74 68 69 73 20 6b 65 79 20 69 73 20   if this key is 
14840 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20  less than.** or 
14850 67 72 65 61 74 65 72 20 74 68 61 6e 20 61 20 6b  greater than a k
14860 65 79 20 69 6e 20 74 68 65 20 62 74 72 65 65 2c  ey in the btree,
14870 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
14880 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c  These are normal
14890 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20  ly.** -1 and +1 
148a0 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 62 75  respectively, bu
148b0 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76 65 72  t might be inver
148c0 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31  ted to +1 and -1
148d0 20 69 66 20 74 68 65 20 62 2d 74 72 65 65 0a 2a   if the b-tree.*
148e0 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f 72 64  * is in DESC ord
148f0 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65  er..**.** The ke
14900 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e  y comparison fun
14910 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20  ctions actually 
14920 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 5f 72  return default_r
14930 63 20 77 68 65 6e 20 74 68 65 79 20 66 69 6e 64  c when they find
14940 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20 63 6f  .** an equals co
14950 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66 61 75  mparison.  defau
14960 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d 31 2c  lt_rc can be -1,
14970 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20 74   0, or +1.  If t
14980 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74  here are.** mult
14990 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20  iple entries in 
149a0 74 68 65 20 62 2d 74 72 65 65 20 77 69 74 68 20  the b-tree with 
149b0 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28 77 68  the same key (wh
149c0 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a  en only looking.
149d0 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73 74 20  ** at the first 
149e0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
149f0 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75 6c 74  s,) then default
14a00 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74 20 74  _rc can be set t
14a10 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65  o -1 to.** cause
14a20 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 20 66   the search to f
14a30 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74  ind the last mat
14a40 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75  ch, or +1 to cau
14a50 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
14a60 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72  .** find the fir
14a70 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20  st match..**.** 
14a80 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73  The key comparis
14a90 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c  on functions wil
14aa0 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20  l set eqSeen to 
14ab0 74 72 75 65 20 69 66 20 74 68 65 79 20 65 76 65  true if they eve
14ac0 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75  r.** get and equ
14ad0 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20  al results when 
14ae0 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73  comparing this s
14af0 74 72 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d  tructure to a b-
14b00 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  tree record..** 
14b10 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21  When default_rc!
14b20 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d  =0, the search m
14b30 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74  ight end up on t
14b40 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69  he record immedi
14b50 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20  ately.** before 
14b60 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 20  the first match 
14b70 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61  or immediately a
14b80 66 74 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61  fter the last ma
14b90 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53  tch.  The.** eqS
14ba0 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69  een field will i
14bb0 6e 64 69 63 61 74 65 20 77 68 65 74 68 65 72 20  ndicate whether 
14bc0 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20  or not an exact 
14bd0 6d 61 74 63 68 20 65 78 69 73 74 73 20 69 6e 20  match exists in 
14be0 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a  the.** b-tree..*
14bf0 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
14c00 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
14c10 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
14c20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
14c30 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
14c40 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d  rmation */.  Mem
14c50 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
14c60 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20   /* Values */.  
14c70 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
14c80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14c90 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
14ca0 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61  m[] */.  i8 defa
14cb0 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20  ult_rc;      /* 
14cc0 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
14cd0 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71  t if keys are eq
14ce0 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43  ual */.  u8 errC
14cf0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ode;         /* 
14d00 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62  Error detected b
14d10 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  y xRecordCompare
14d20 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d   (CORRUPT or NOM
14d30 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20  EM) */.  i8 r1; 
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14d50 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
14d60 69 66 20 28 6c 68 73 20 3c 20 72 68 73 29 20 2a  if (lhs < rhs) *
14d70 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20 20 20  /.  i8 r2;      
14d80 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
14d90 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
14da0 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 75  hs > rhs) */.  u
14db0 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20  8 eqSeen;       
14dc0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e     /* True if an
14dd0 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72   equality compar
14de0 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65  ison has been se
14df0 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a  en */.};.../*.**
14e00 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
14e10 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
14e20 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
14e30 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
14e40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
14e50 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
14e60 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
14e70 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
14e80 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
14e90 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
14ea0 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
14eb0 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
14ec0 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
14ed0 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
14ee0 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
14ef0 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
14f00 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
14f10 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
14f20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
14f30 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
14f40 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
14f50 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
14f60 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
14f70 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
14f80 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
14f90 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
14fa0 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
14fb0 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
14fc0 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
14fd0 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
14fe0 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
14ff0 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
15000 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
15010 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
15020 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
15030 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
15040 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
15050 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
15060 32 20 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a  2 because the.**
15070 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
15080 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
15090 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
150a0 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
150b0 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
150c0 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
150d0 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
150e0 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
150f0 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
15100 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
15110 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
15120 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
15130 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
15140 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
15150 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
15160 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
15170 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
15180 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
15190 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
151a0 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
151b0 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
151c0 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
151d0 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
151e0 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
151f0 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
15200 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
15210 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
15220 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
15230 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
15240 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  ion.** algorithm
15250 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
15260 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
15270 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
15280 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
15290 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20   element..**.** 
152a0 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20  While parsing a 
152b0 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20  CREATE TABLE or 
152c0 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
152d0 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20  tement in order 
152e0 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56  to.** generate V
152f0 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70  DBE code (as opp
15300 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20  osed to parsing 
15310 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e  one read from an
15320 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a   sqlite_master.*
15330 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20  * table as part 
15340 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78  of parsing an ex
15350 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
15360 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65  schema), transie
15370 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20  nt instances.** 
15380 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
15390 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64  e may be created
153a0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
153b0 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61  he Index.tnum va
153c0 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65  riable is.** use
153d0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61  d to store the a
153e0 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45  ddress of a VDBE
153f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f   instruction, no
15400 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  t a database pag
15410 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20  e.** number (it 
15420 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74  cannot - the dat
15430 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f  abase page is no
15440 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69  t allocated unti
15450 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72  l the VDBE.** pr
15460 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65  ogram is execute
15470 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54  d). See convertT
15480 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62  oWithoutRowidTab
15490 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  le() for details
154a0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
154b0 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
154c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
154d0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
154e0 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61  ndex */.  i16 *a
154f0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
15500 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
15510 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
15520 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
15530 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73   is 0 */.  LogEs
15540 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20  t *aiRowLogEst; 
15550 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
15560 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
15570 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
15580 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
15590 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
155a0 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
155b0 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
155c0 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
155d0 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
155e0 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
155f0 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
15600 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
15610 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
15620 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
15630 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
15640 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
15650 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
15660 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
15670 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
15680 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
15690 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
156a0 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
156b0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
156c0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
156d0 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
156e0 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73  e==ASC */.  cons
156f0 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b  t char **azColl;
15700 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
15710 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
15720 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
15730 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
15740 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20  PartIdxWhere;   
15750 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
15760 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
15770 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  dices */.  ExprL
15780 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20  ist *aColExpr;  
15790 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78      /* Column ex
157a0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
157b0 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
157c0 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61          /* DB Pa
157d0 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f  ge containing ro
157e0 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  ot of this index
157f0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49   */.  LogEst szI
15800 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f  dxRow;         /
15810 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72  * Estimated aver
15820 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20  age row size in 
15830 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  bytes */.  u16 n
15840 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  KeyCol;         
15850 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15860 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67   columns forming
15870 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31   the key */.  u1
15880 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 nColumn;      
15890 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
158a0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72   of columns stor
158b0 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ed in the index 
158c0 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b  */.  u8 onError;
158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
158e0 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
158f0 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
15900 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
15910 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79    unsigned idxTy
15920 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d  pe:2;      /* 1=
15930 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d  =UNIQUE, 2==PRIM
15940 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41  ARY KEY, 0==CREA
15950 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e  TE INDEX */.  un
15960 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65  signed bUnordere
15970 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68  d:1;   /* Use th
15980 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20  is index for == 
15990 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e  or IN queries on
159a0 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ly */.  unsigned
159b0 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20   uniqNotNull:1; 
159c0 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51   /* True if UNIQ
159d0 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
159e0 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  for all columns 
159f0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
15a00 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a  Resized:1;    /*
15a10 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49   True if resizeI
15a20 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73  ndexObject() has
15a30 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
15a40 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76    unsigned isCov
15a50 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72  ering:1;   /* Tr
15a60 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20  ue if this is a 
15a70 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a  covering index *
15a80 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53  /.  unsigned noS
15a90 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20  kipScan:1;   /* 
15aa0 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73  Do not try to us
15ab0 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74  e skip-scan if t
15ac0 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  rue */.  unsigne
15ad0 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20 20  d hasStat1:1;   
15ae0 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73 74    /* aiRowLogEst
15af0 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72 6f   values come fro
15b00 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a  m sqlite_stat1 *
15b10 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
15b20 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
15b30 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
15b40 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
15b50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
15b60 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
15b70 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
15b80 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
15b90 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
15ba0 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
15bb0 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
15bc0 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
15bd0 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
15be0 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
15bf0 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
15c00 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
15c10 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
15c20 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
15c30 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
15c40 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  key */.  tRowcnt
15c50 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
15c60 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
15c70 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20  hmic stat1 data 
15c80 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a  for this index *
15c90 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77  /.  tRowcnt nRow
15ca0 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20  Est0;        /* 
15cb0 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
15cc0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
15cd0 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23  n the index */.#
15ce0 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
15cf0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
15d00 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65  or Index.idxType
15d10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
15d20 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45  TE_IDXTYPE_APPDE
15d30 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72  F      0   /* Cr
15d40 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
15d50 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66  TE INDEX */.#def
15d60 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
15d70 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31  PE_UNIQUE      1
15d80 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73     /* Implements
15d90 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
15da0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
15db0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
15dc0 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f  RIMARYKEY  2   /
15dd0 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59  * Is the PRIMARY
15de0 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
15df0 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e  le */../* Return
15e00 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
15e10 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45   is a PRIMARY KE
15e20 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  Y index */.#defi
15e30 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49  ne IsPrimaryKeyI
15e40 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69  ndex(X)  ((X)->i
15e50 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49  dxType==SQLITE_I
15e60 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
15e70 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  Y)../* Return tr
15e80 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
15e90 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
15ea0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69  */.#define IsUni
15eb0 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20  queIndex(X)     
15ec0 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d   ((X)->onError!=
15ed0 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65  OE_None)../* The
15ee0 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b   Index.aiColumn[
15ef0 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72  ] values are nor
15f00 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69  mally positive i
15f10 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20  nteger.  But.** 
15f20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e  there are some n
15f30 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 74  egative values t
15f40 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61 6c  hat have special
15f50 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65   meaning:.*/.#de
15f60 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20  fine XN_ROWID   
15f70 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e    (-1)     /* In
15f80 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
15f90 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  the rowid */.#de
15fa0 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20  fine XN_EXPR    
15fb0 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e    (-2)     /* In
15fc0 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
15fd0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  an expression */
15fe0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d  ../*.** Each sam
15ff0 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ple stored in th
16000 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
16010 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
16020 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a  ted in memory.**
16030 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75   using a structu
16040 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e  re of this type.
16050 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74    See documentat
16060 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ion at the top o
16070 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65  f the.** analyze
16080 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  .c source file f
16090 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
160a0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
160b0 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
160c0 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20   {.  void *p;   
160d0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
160e0 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63  r to sampled rec
160f0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ord */.  int n; 
16100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
16110 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20  ze of record in 
16120 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63  bytes */.  tRowc
16130 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20  nt *anEq;    /* 
16140 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
16150 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
16160 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
16170 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
16180 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45  t *anLt;    /* E
16190 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
161a0 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
161b0 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
161c0 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
161d0 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20  nt *anDLt;   /* 
161e0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
161f0 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
16200 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
16210 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
16220 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
16230 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
16240 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
16250 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
16260 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
16270 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
16280 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
16290 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  ession..**.** No
162a0 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30  te if Token.z==0
162b0 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20   then Token.dyn 
162c0 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20  and Token.n are 
162d0 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a  undefined and.**
162e0 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e   may contain ran
162f0 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20  dom values.  Do 
16300 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73  not make any ass
16310 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54  umptions about T
16320 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20  oken.dyn.** and 
16330 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b  Token.n when Tok
16340 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75  en.z==0..*/.stru
16350 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
16360 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
16370 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
16380 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
16390 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
163a0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
163b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
163c0 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
163d0 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
163e0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
163f0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
16400 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
16410 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
16420 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
16430 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
16440 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
16450 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16460 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
16470 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
16480 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
16490 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
164a0 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
164b0 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
164c0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
164d0 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
164e0 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
164f0 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
16500 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
16510 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
16520 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
16530 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
16540 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
16550 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
16560 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
16570 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
16580 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
16590 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
165a0 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
165b0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
165c0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
165d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
165e0 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
165f0 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
16600 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
16610 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
16620 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
16630 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
16640 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
16650 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
16660 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
16670 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
16680 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
16690 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
166a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
166b0 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
166c0 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
166d0 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
166e0 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
166f0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
16700 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
16710 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
16720 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
16730 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
16750 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
16760 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
16770 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
16780 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
16790 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
167a0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
167b0 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
167c0 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
167d0 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
167e0 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
167f0 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
16800 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16810 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
16820 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
16830 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
16840 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
16850 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
16860 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
16870 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
16880 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
16890 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
168a0 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
168b0 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
168c0 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
168d0 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
168e0 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
168f0 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
16900 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
16910 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
16920 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
16930 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
16940 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
16950 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
16960 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
16970 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16990 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
169a0 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
169b0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
169c0 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
169d0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
169e0 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
169f0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
16a00 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
16a10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
16a20 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
16a30 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
16a40 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
16a50 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
16a60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
16a70 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
16a80 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
16a90 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
16aa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16ab0 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
16ac0 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
16ad0 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
16ae0 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
16af0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16b00 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
16b10 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
16b20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b30 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
16b40 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
16b50 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
16b60 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
16b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b80 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
16b90 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16ba0 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
16bb0 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
16bc0 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
16bd0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
16be0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
16bf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16c00 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
16c10 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
16c20 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
16c30 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
16c40 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
16c50 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
16c60 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
16c70 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
16c80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
16c90 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
16ca0 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
16cb0 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
16cc0 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
16cd0 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
16ce0 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
16cf0 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
16d00 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
16d10 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
16d20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16d30 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
16d40 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
16d50 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
16d60 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
16d70 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
16d80 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
16d90 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
16da0 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
16db0 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
16dc0 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
16dd0 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
16de0 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
16df0 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
16e00 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
16e10 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
16e20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
16e30 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
16e40 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
16e50 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
16e60 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
16e70 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
16e80 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
16e90 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
16ea0 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
16eb0 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
16ec0 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
16ed0 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
16ee0 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
16ef0 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
16f00 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
16f10 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
16f20 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
16f30 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
16f40 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
16f50 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
16f60 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
16f70 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
16f80 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
16f90 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
16fa0 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
16fb0 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
16fc0 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
16fd0 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
16fe0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
16ff0 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
17000 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
17010 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
17020 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
17030 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
17040 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
17050 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
17060 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
17070 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
17080 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
17090 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
170a0 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
170b0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
170c0 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
170d0 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
170e0 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
170f0 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
17100 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
17110 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
17120 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
17130 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
17140 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
17150 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
17160 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
17170 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
17180 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
17190 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20  AT, TK_BLOB,.** 
171a0 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
171b0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
171c0 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
171d0 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
171e0 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
171f0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
17200 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
17210 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
17220 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
17230 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  the.** variable 
17240 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
17250 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17260 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
17270 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
17280 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
17290 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
172a0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
172b0 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
172c0 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
172d0 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
172e0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
172f0 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
17300 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
17310 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
17320 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
17330 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
17340 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
17350 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
17360 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17370 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
17380 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
17390 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
173a0 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
173b0 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
173c0 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
173d0 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
173e0 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
173f0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17400 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
17410 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
17420 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
17430 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
17440 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
17450 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
17460 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
17470 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
17480 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
17490 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
174a0 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
174b0 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76  .x.pList is.** v
174c0 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
174d0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
174e0 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
174f0 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
17500 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
17510 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
17520 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
17530 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
17540 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
17550 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
17560 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
17570 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
17580 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
17590 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
175a0 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
175b0 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
175c0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
175d0 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
175e0 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
175f0 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
17600 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
17610 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
17620 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
17630 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
17640 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
17650 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
17660 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
17670 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
17680 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
17690 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
176a0 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
176b0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
176c0 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
176d0 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
176e0 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
176f0 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  ark.** character
17700 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
17710 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
17720 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
17730 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a  olds the index.*
17740 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
17750 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
17760 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
17770 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
17780 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
17790 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
177a0 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
177b0 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
177c0 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
177d0 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
177e0 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
177f0 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
17800 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
17810 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
17820 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
17830 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
17840 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
17850 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
17860 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
17870 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
17880 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
17890 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
178a0 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
178b0 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
178c0 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
178d0 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
178e0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
178f0 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
17900 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
17910 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
17920 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
17930 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
17940 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
17950 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
17960 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
17970 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
17980 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
17990 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
179a0 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
179b0 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
179c0 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
179d0 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
179e0 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
179f0 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
17a00 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
17a10 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
17a20 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
17a30 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
17a40 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
17a50 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
17a60 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
17a70 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
17a80 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
17a90 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
17aa0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
17ab0 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
17ac0 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
17ad0 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
17ae0 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
17af0 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
17b00 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
17b10 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
17b20 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
17b30 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
17b40 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
17b50 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
17b60 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
17b70 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
17b80 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
17b90 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
17ba0 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
17bb0 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
17bc0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
17bd0 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
17be0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
17bf0 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
17c00 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
17c10 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
17c20 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
17c30 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
17c40 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
17c50 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
17c60 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
17c70 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
17c80 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
17c90 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
17ca0 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
17cb0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
17cc0 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
17cd0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
17ce0 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c  inity of the col
17cf0 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20  umn or 0 if not 
17d00 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  a column */.  u3
17d10 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  2 flags;        
17d20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
17d30 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65  flags.  EP_* See
17d40 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f   below */.  unio
17d50 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54  n {.    char *zT
17d60 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  oken;          /
17d70 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a  * Token value. Z
17d80 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61  ero terminated a
17d90 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20  nd dequoted */. 
17da0 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20     int iValue;  
17db0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e            /* Non
17dc0 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65  -negative intege
17dd0 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e  r value if EP_In
17de0 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b  tValue */.  } u;
17df0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
17e00 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
17e10 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
17e20 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
17e30 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
17e40 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
17e50 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
17e60 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
17e70 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
17e80 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
17e90 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
17ea0 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
17eb0 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
17ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17ee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17ef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17f00 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74  /..  Expr *pLeft
17f10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
17f20 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  eft subnode */. 
17f30 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20   Expr *pRight;  
17f40 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74          /* Right
17f50 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e   subnode */.  un
17f60 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
17f70 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f  st *pList;     /
17f80 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  * op = IN, EXIST
17f90 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c  S, SELECT, CASE,
17fa0 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45   FUNCTION, BETWE
17fb0 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  EN */.    Select
17fc0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
17fd0 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61  * EP_xIsSelect a
17fe0 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  nd op = IN, EXIS
17ff0 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  TS, SELECT */.  
18000 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } x;..  /* If th
18010 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
18020 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
18030 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
18040 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
18050 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
18060 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
18070 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
18080 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
18090 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
180a0 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
180b0 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
180c0 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
180d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
180e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
180f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18110 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  **/..#if SQLITE_
18120 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
18130 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
18140 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69            /* Hei
18150 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20  ght of the tree 
18160 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e  headed by this n
18170 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
18180 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
18190 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
181a0 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62  UMN: cursor numb
181b0 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64  er of table hold
181c0 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181e0 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54      ** TK_REGIST
181f0 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  ER: register num
18200 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ber.            
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
18220 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e  TK_TRIGGER: 1 ->
18230 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20   new, 0 -> old. 
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e          ** EP_Un
18260 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37  likely:  1342177
18270 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68  28 times likelih
18280 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  ood.            
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
182a0 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72  TK_SELECT: 1st r
182b0 65 67 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c  egister of resul
182c0 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e  t vector */.  yn
182d0 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  Var iColumn;    
182e0 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
182f0 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e  N: column index.
18300 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a    -1 for rowid..
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56           ** TK_V
18330 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c  ARIABLE: variabl
18340 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73  e number (always
18350 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20   >= 1)..        
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18370 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f   ** TK_SELECT_CO
18380 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20  LUMN: column of 
18390 74 68 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f  the result vecto
183a0 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  r */.  i16 iAgg;
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
183c0 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
183d0 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
183e0 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
183f0 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
18400 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
18410 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
18420 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
18430 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
18440 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
18450 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
18460 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
18470 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18490 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
184a0 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
184b0 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
184c0 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
184e0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
184f0 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
18500 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
18510 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
18520 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
18530 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
18540 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62  UNCTION */.  Tab
18550 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
18560 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72      /* Table for
18570 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65   TK_COLUMN expre
18580 73 73 69 6f 6e 73 2e 20 20 43 61 6e 20 62 65 20  ssions.  Can be 
18590 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20  NULL.           
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
185b0 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66   for a column of
185c0 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20   an index on an 
185d0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b  expression */.};
185e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
185f0 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
18600 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
18610 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
18620 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
18630 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
18640 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
18650 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49  inates in ON/USI
18660 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74  NG clause of out
18670 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
18680 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
18690 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
186a0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
186b0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
186c0 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  ions */.        
186d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 78 30            /* 0x0
186e0 30 30 30 30 34 20 2f 2f 20 61 76 61 69 6c 61 62  00004 // availab
186f0 6c 65 20 66 6f 72 20 75 73 65 20 2a 2f 0a 20 20  le for use */.  
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18710 2f 2a 20 30 78 30 30 30 30 30 38 20 2f 2f 20 61  /* 0x000008 // a
18720 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 75 73 65  vailable for use
18730 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
18740 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
18750 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
18760 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
18770 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
18780 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
18790 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
187a0 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
187b0 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
187c0 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
187d0 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
187e0 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
187f0 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
18800 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
18810 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
18820 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
18830 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
18840 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
18850 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
18860 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
18870 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
18880 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
18890 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  _COLLATE operato
188a0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
188b0 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32  Generic   0x0002
188c0 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c  00 /* Ignore COL
188d0 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79  LATE or affinity
188e0 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f   on this tree */
188f0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56  .#define EP_IntV
18900 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f  alue  0x000400 /
18910 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
18920 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69  contained in u.i
18930 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Value */.#define
18940 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78   EP_xIsSelect 0x
18950 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c  000800 /* x.pSel
18960 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74  ect is valid (ot
18970 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20  herwise x.pList 
18980 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  is) */.#define E
18990 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30  P_Skip      0x00
189a0 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c  1000 /* COLLATE,
189b0 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59   AS, or UNLIKELY
189c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
189d0 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30  educed   0x00200
189e0 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
189f0 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
18a00 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
18a10 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
18a20 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a  Only 0x004000 /*
18a30 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
18a40 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
18a50 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
18a60 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
18a70 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48     0x008000 /* H
18a80 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
18a90 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
18aa0 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66  malloc() */.#def
18ab0 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20  ine EP_MemToken 
18ac0 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
18ad0 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
18ae0 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
18af0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
18b00 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30  oReduce  0x02000
18b10 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52  0 /* Cannot EXPR
18b20 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
18b30 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  Expr */.#define 
18b40 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30  EP_Unlikely  0x0
18b50 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c  40000 /* unlikel
18b60 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  y() or likelihoo
18b70 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  d() function */.
18b80 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74  #define EP_Const
18b90 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a  Func 0x080000 /*
18ba0 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43   A SQLITE_FUNC_C
18bb0 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43  ONSTANT or _SLOC
18bc0 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  HNG function */.
18bd0 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
18be0 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a  Null 0x100000 /*
18bf0 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
18c00 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
18c10 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
18c20 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20  ine EP_Subquery 
18c30 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65   0x200000 /* Tre
18c40 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
18c50 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20  SELECT operator 
18c60 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c  */.#define EP_Al
18c70 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30  ias     0x400000
18c80 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20   /* Is an alias 
18c90 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74  for a result set
18ca0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
18cb0 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20  ne EP_Leaf      
18cc0 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72  0x800000 /* Expr
18cd0 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c  .pLeft, .pRight,
18ce0 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20   .u.pSelect all 
18cf0 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  NULL */../*.** C
18d00 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74  ombinations of t
18d10 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20  wo or more EP_* 
18d20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  flags.*/.#define
18d30 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45   EP_Propagate (E
18d40 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62  P_Collate|EP_Sub
18d50 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61 67  query) /* Propag
18d60 61 74 65 20 74 68 65 73 65 20 62 69 74 73 20 75  ate these bits u
18d70 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  p tree */../*.**
18d80 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
18d90 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
18da0 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
18db0 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20   bits in the.** 
18dc0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
18dd0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70  ..*/.#define Exp
18de0 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50  rHasProperty(E,P
18df0 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61  )     (((E)->fla
18e00 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
18e10 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72  ine ExprHasAllPr
18e20 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
18e30 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
18e40 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
18e50 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50  rSetProperty(E,P
18e60 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  )     (E)->flags
18e70 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  |=(P).#define Ex
18e80 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  prClearProperty(
18e90 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67  E,P)   (E)->flag
18ea0 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20  s&=~(P)../* The 
18eb0 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
18ec0 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  ty() macro is us
18ed0 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74  ed for Verificat
18ee0 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
18ef0 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74  .** and Accredit
18f00 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20  ation only.  It 
18f10 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53  works like ExprS
18f20 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72  etProperty() dur
18f30 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65  ing VVA.** proce
18f40 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f  sses but is a no
18f50 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79  -op for delivery
18f60 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
18f70 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e  TE_DEBUG.# defin
18f80 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
18f90 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e  erty(E,P)  (E)->
18fa0 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65  flags|=(P).#else
18fb0 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
18fc0 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
18fd0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
18fe0 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
18ff0 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
19000 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64  f bytes required
19010 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70   by a normal Exp
19020 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20  r.** struct, an 
19030 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
19040 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
19050 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72  flag set in Expr
19060 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e  .flags.** and an
19070 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
19080 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  h the EP_TokenOn
19090 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a  ly flag set..*/.
190a0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c  #define EXPR_FUL
190b0 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20  LSIZE           
190c0 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20  sizeof(Expr)    
190d0 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73         /* Full s
190e0 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ize */.#define E
190f0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
19100 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28         offsetof(
19110 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a  Expr,iTable)  /*
19120 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73   Common features
19130 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
19140 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20  _TOKENONLYSIZE  
19150 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
19160 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65  r,pLeft)   /* Fe
19170 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  wer features */.
19180 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73  ./*.** Flags pas
19190 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74  sed to the sqlit
191a0 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63  e3ExprDup() func
191b0 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65  tion. See the he
191c0 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20  ader comment.** 
191d0 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70  above sqlite3Exp
191e0 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69  rDup() for detai
191f0 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ls..*/.#define E
19200 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20  XPRDUP_REDUCE   
19210 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
19220 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69   Used reduced-si
19230 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f  ze Expr nodes */
19240 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
19250 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
19260 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
19270 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
19280 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
19290 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
192a0 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
192b0 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
192c0 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
192d0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
192e0 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
192f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
19300 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
19310 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
19320 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
19330 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
19340 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
19350 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
19360 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
19370 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
19380 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
19390 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
193a0 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
193b0 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65  sed..**.** By de
193c0 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a  fault the Expr.z
193d0 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73  Span field holds
193e0 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
193f0 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
19400 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
19410 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20  on that is used 
19420 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
19430 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61  n of error messa
19440 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d  ges and.** colum
19450 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68  n labels.  In th
19460 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53  is case, Expr.zS
19470 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79  pan is typically
19480 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a   the text of a.*
19490 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * column express
194a0 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73  ion as it exists
194b0 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
194c0 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72  tement.  However
194d0 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61  , if.** the bSpa
194e0 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73  nIsTab flag is s
194f0 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69  et, then zSpan i
19500 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20  s overloaded to 
19510 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a  mean the name.**
19520 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
19530 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72  olumn in the for
19540 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c  m: DATABASE.TABL
19550 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20  E.COLUMN.  This 
19560 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73  later.** form is
19570 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72   used for name r
19580 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e  esolution with n
19590 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  ested FROM claus
195a0 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  es..*/.struct Ex
195b0 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  prList {.  int n
195c0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
195d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
195e0 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68  xpressions on th
195f0 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20  e list */.  int 
19600 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  nAlloc;         
19610 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19620 61 5b 5d 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61  a[] slots alloca
19630 74 65 64 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ted */.  struct 
19640 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20  ExprList_item { 
19650 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72  /* For each expr
19660 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
19670 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  st */.    Expr *
19680 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
19690 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74    /* The parse t
196a0 72 65 65 20 66 6f 72 20 74 68 69 73 20 65 78 70  ree for this exp
196b0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63  ression */.    c
196c0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
196d0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
196e0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
196f0 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
19700 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
19710 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
19720 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
19730 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
19740 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
19750 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
19760 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
19770 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
19780 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
19790 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
197a0 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
197b0 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
197c0 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
197d0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
197e0 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
197f0 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
19800 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
19810 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61    unsigned reusa
19820 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e  ble :1;   /* Con
19830 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
19840 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a   is reusable */.
19850 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
19860 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
19870 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43     u16 iOrderByC
19880 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  ol;      /* For 
19890 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e  ORDER BY, column
198a0 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c   number in resul
198b0 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20  t set */.       
198c0 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20   u16 iAlias;    
198d0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
198e0 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61  into Parse.aAlia
198f0 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f  s[] for zName */
19900 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20  .      } x;.    
19910 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72    int iConstExpr
19920 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67  Reg;      /* Reg
19930 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45  ister in which E
19940 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63  xpr value is cac
19950 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a  hed */.    } u;.
19960 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
19970 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
19980 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68 20  e slot for each 
19990 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
199a0 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
199b0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
199c0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
199d0 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  e is used by the
199e0 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72   parser to recor
199f0 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61  d both.** the pa
19a00 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20  rse tree for an 
19a10 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74  expression and t
19a20 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74  he span of input
19a30 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20   text for an.** 
19a40 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73  expression..*/.s
19a50 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b  truct ExprSpan {
19a60 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20  .  Expr *pExpr; 
19a70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19a80 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65  expression parse
19a90 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74   tree */.  const
19aa0 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20   char *zStart;  
19ab0 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63   /* First charac
19ac0 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78  ter of input tex
19ad0 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
19ae0 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20  r *zEnd;     /* 
19af0 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61  One character pa
19b00 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e  st the end of in
19b10 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a  put text */.};..
19b20 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
19b30 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
19b40 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
19b50 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
19b60 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
19b70 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
19b80 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
19b90 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
19ba0 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
19bb0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
19bc0 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
19bd0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
19be0 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
19bf0 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
19c00 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
19c10 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
19c20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
19c30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
19c40 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
19c50 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
19c60 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
19c70 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
19c80 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
19c90 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
19ca0 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
19cb0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
19cc0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
19cd0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
19ce0 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
19cf0 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
19d00 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
19d10 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
19d20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
19d30 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
19d40 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
19d50 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
19d60 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
19d70 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
19d80 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
19d90 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
19da0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
19db0 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
19dc0 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
19dd0 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
19de0 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
19df0 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
19e00 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
19e10 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
19e20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
19e30 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
19e40 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
19e50 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
19e60 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
19e70 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
19e80 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
19e90 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
19ea0 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
19eb0 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
19ec0 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
19ed0 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
19ee0 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
19ef0 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
19f00 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
19f10 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
19f20 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66   on ix86..*/.#if
19f30 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41  def SQLITE_BITMA
19f40 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65  SK_TYPE.  typede
19f50 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
19f60 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23  _TYPE Bitmask;.#
19f70 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
19f80 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64  64 Bitmask;.#end
19f90 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  if../*.** The nu
19fa0 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20  mber of bits in 
19fb0 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53  a Bitmask.  "BMS
19fc0 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b  " means "BitMask
19fd0 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Size"..*/.#defi
19fe0 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73  ne BMS  ((int)(s
19ff0 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38  izeof(Bitmask)*8
1a000 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20  ))../*.** A bit 
1a010 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a  in a Bitmask.*/.
1a020 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28  #define MASKBIT(
1a030 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29  n)   (((Bitmask)
1a040 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65  1)<<(n)).#define
1a050 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28   MASKBIT32(n) ((
1a060 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29  (unsigned int)1)
1a070 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41  <<(n)).#define A
1a080 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69  LLBITS      ((Bi
1a090 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  tmask)-1)../*.**
1a0a0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
1a0b0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
1a0c0 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
1a0d0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
1a0e0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
1a0f0 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
1a100 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
1a110 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
1a120 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
1a130 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
1a140 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
1a150 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
1a160 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
1a170 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
1a180 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1a190 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
1a1a0 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
1a1b0 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
1a1c0 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
1a1d0 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
1a1e0 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
1a1f0 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
1a200 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
1a210 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
1a220 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
1a230 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
1a240 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
1a250 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
1a260 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
1a270 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
1a280 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
1a290 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
1a2a0 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
1a2b0 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
1a2c0 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
1a2d0 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
1a2e0 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
1a2f0 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
1a300 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
1a310 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
1a320 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
1a330 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
1a340 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
1a350 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
1a360 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
1a370 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
1a380 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
1a390 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
1a3a0 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
1a3b0 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
1a3c0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
1a3d0 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
1a3e0 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
1a3f0 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
1a400 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
1a410 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
1a420 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
1a430 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
1a440 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
1a450 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
1a460 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
1a470 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
1a480 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
1a490 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
1a4a0 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
1a4b0 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
1a4c0 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
1a4d0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1a4e0 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
1a4f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a500 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
1a510 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
1a520 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
1a530 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
1a540 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1a550 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
1a560 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
1a570 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
1a580 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
1a590 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
1a5a0 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
1a5b0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1a5c0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1a5d0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1a5e0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1a5f0 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
1a600 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
1a610 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
1a620 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
1a630 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
1a640 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1a650 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
1a660 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1a670 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
1a680 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1a690 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
1a6a0 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
1a6b0 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
1a6c0 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
1a6d0 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
1a6e0 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
1a6f0 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
1a700 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
1a710 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
1a720 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
1a730 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
1a740 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
1a750 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
1a760 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
1a770 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
1a780 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
1a790 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
1a7a0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20  /.    struct {. 
1a7b0 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65       u8 jointype
1a7c0 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
1a7d0 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
1a7e0 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68  his table and th
1a7f0 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
1a800 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
1a810 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
1a820 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1a830 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
1a840 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1a850 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65   unsigned isInde
1a860 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54  xedBy :1;   /* T
1a870 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1a880 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  an INDEXED BY cl
1a890 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1a8a0 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63  signed isTabFunc
1a8b0 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65   :1;     /* True
1a8c0 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   if table-valued
1a8d0 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78  -function syntax
1a8e0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1a8f0 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
1a900 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
1a910 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
1a920 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  related */.     
1a930 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
1a940 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
1a950 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
1a960 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1a970 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
1a980 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
1a990 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
1a9a0 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
1a9b0 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20  n WITH */.    } 
1a9c0 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  fg;.#ifndef SQLI
1a9d0 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1a9e0 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64      u8 iSelectId
1a9f0 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c  ;     /* If pSel
1aa00 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f  ect!=0, the id o
1aa10 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74  f the sub-select
1aa20 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69   in EQP */.#endi
1aa30 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f  f.    int iCurso
1aa40 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56  r;      /* The V
1aa50 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
1aa60 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
1aa70 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
1aa80 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20     Expr *pOn;   
1aa90 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63       /* The ON c
1aaa0 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
1aab0 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70  */.    IdList *p
1aac0 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20  Using;   /* The 
1aad0 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
1aae0 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69  a join */.    Bi
1aaf0 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20  tmask colUsed;  
1ab00 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20  /* Bit N (1<<N) 
1ab10 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20  set if column N 
1ab20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20  of pTab is used 
1ab30 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
1ab40 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65       char *zInde
1ab50 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65  xedBy;    /* Ide
1ab60 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e  ntifier from "IN
1ab70 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78  DEXED BY <zIndex
1ab80 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  >" clause */.   
1ab90 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75     ExprList *pFu
1aba0 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d  ncArg;  /* Argum
1abb0 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61  ents to table-va
1abc0 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f  lued-function */
1abd0 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49  .    } u1;.    I
1abe0 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20  ndex *pIBIndex; 
1abf0 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
1ac00 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
1ac10 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64  g to u1.zIndexed
1ac20 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  By */.  } a[1]; 
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1ac40 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
1ac50 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
1ac60 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
1ac70 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
1ac80 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
1ac90 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
1aca0 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
1acb0 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
1acc0 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
1acd0 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
1ace0 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
1acf0 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
1ad00 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
1ad10 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
1ad20 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
1ad30 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
1ad40 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
1ad50 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
1ad60 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
1ad70 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1ad80 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
1ad90 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
1ada0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
1adb0 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
1adc0 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
1add0 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
1ade0 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
1adf0 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
1ae00 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
1ae10 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
1ae20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
1ae30 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
1ae40 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
1ae50 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
1ae60 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
1ae70 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
1ae80 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
1ae90 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
1aea0 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
1aeb0 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
1aec0 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
1aed0 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
1aee0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1aef0 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
1af00 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1af10 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53  .**     WHERE_US
1af20 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46  E_LIMIT  == SF_F
1af30 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65  ixedLimit.*/.#de
1af40 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1af50 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30  BY_NORMAL   0x00
1af60 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23  00 /* No-op */.#
1af70 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1af80 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78  ERBY_MIN      0x
1af90 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59  0001 /* ORDER BY
1afa0 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
1afb0 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  min() func */.#d
1afc0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1afd0 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30  RBY_MAX      0x0
1afe0 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  002 /* ORDER BY 
1aff0 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
1b000 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  ax() func */.#de
1b010 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1b020 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30  SS_DESIRED  0x00
1b030 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f  04 /* Want to do
1b040 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45   one-pass UPDATE
1b050 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  /DELETE */.#defi
1b060 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
1b070 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38  _MULTIROW 0x0008
1b080 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f   /* ONEPASS is o
1b090 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  k with multiple 
1b0a0 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1b0b0 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
1b0c0 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a  _OK    0x0010 /*
1b0d0 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
1b0e0 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
1b0f0 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
1b100 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45  ERE_OR_SUBCLAUSE
1b110 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50       0x0020 /* P
1b120 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d  rocessing a sub-
1b130 57 48 45 52 45 20 61 73 20 70 61 72 74 20 6f 66  WHERE as part of
1b140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b160 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52         ** the OR
1b170 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a   optimization  *
1b180 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b190 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20  GROUPBY         
1b1a0 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65   0x0040 /* pOrde
1b1b0 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rBy is really a 
1b1c0 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1b1d0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1b1e0 43 54 42 59 20 20 20 20 20 20 20 30 78 30 30 38  CTBY       0x008
1b1f0 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73  0 /* pOrderby is
1b200 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e   really a DISTIN
1b210 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  CT clause */.#de
1b220 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f  fine WHERE_WANT_
1b230 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 31  DISTINCT    0x01
1b240 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74  00 /* All output
1b250 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73   needs to be dis
1b260 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65  tinct */.#define
1b270 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f   WHERE_SORTBYGRO
1b280 55 50 20 20 20 20 20 20 30 78 30 32 30 30 20 2f  UP      0x0200 /
1b290 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65  * Support sqlite
1b2a0 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29  3WhereIsSorted()
1b2b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b2c0 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20  E_SEEK_TABLE    
1b2d0 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20     0x0400 /* Do 
1b2e0 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20  not defer seeks 
1b2f0 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f  on main table */
1b300 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b310 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20  RDERBY_LIMIT    
1b320 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42  0x0800 /* ORDERB
1b330 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69  Y+LIMIT on the i
1b340 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65  nner loop */.#de
1b350 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f  fine WHERE_SEEK_
1b360 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30  UNIQ_TABLE  0x10
1b370 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66  00 /* Do not def
1b380 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71  er seeks if uniq
1b390 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ue */.          
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b3b0 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20 6e       0x2000    n
1b3c0 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1b3d0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
1b3e0 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20  RE_USE_LIMIT    
1b3f0 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73      0x4000 /* Us
1b400 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63  e the LIMIT in c
1b410 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f  ost estimates */
1b420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b430 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1b440 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x8000    not cu
1b450 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1b460 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
1b470 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
1b480 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
1b490 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
1b4a0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1b4b0 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
1b4c0 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
1b4d0 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
1b4e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1b4f0 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
1b500 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
1b510 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
1b520 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
1b530 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
1b540 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
1b550 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
1b560 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1b570 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
1b580 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
1b590 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
1b5a0 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
1b5b0 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
1b5c0 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
1b5d0 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
1b5e0 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
1b5f0 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
1b600 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
1b610 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
1b620 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
1b630 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
1b640 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
1b650 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
1b660 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
1b670 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
1b680 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
1b690 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
1b6a0 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
1b6b0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
1b6c0 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
1b6d0 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
1b6e0 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
1b6f0 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
1b700 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
1b710 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1b720 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
1b730 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
1b740 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
1b750 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
1b760 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
1b770 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
1b780 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
1b790 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
1b7a0 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e  nner-most.** con
1b7b0 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
1b7c0 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
1b7d0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1b7e0 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
1b7f0 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
1b800 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
1b810 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
1b820 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
1b830 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
1b840 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
1b850 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
1b860 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
1b870 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
1b880 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
1b890 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
1b8a0 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1b8b0 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
1b8c0 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
1b8d0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
1b8e0 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
1b8f0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  ted..**.** Each 
1b900 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20  subquery gets a 
1b910 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e  new NameContext.
1b920 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c    The pNext fiel
1b930 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  d points to the.
1b940 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69  ** NameContext i
1b950 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65  n the parent que
1b960 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72  ry.  Thus the pr
1b970 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e  ocess of scannin
1b980 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  g the.** NameCon
1b990 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73  text list corres
1b9a0 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69  ponds to searchi
1b9b0 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65  ng through succe
1b9c0 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a  ssively outer.**
1b9d0 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b   subqueries look
1b9e0 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e  ing for a match.
1b9f0 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43  .*/.struct NameC
1ba00 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65  ontext {.  Parse
1ba10 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1ba20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f  /* The parser */
1ba30 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
1ba40 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  List;   /* One o
1ba50 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73  r more tables us
1ba60 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61  ed to resolve na
1ba70 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  mes */.  ExprLis
1ba80 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
1ba90 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
1baa0 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  f result-set col
1bab0 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  umns */.  AggInf
1bac0 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
1bad0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1bae0 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
1baf0 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
1bb00 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
1bb10 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
1bb20 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
1bb30 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
1bb40 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
1bb50 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
1bb60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
1bb70 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
1bb80 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
1bb90 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1bba0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bbb0 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
1bbc0 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
1bbd0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
1bbe0 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20    u16 ncFlags;  
1bbf0 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
1bc00 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
1bc10 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
1bc20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
1bc30 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1bc40 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
1bc50 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
1bc60 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1bc70 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65  traints (all che
1bc80 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28  cked via assert(
1bc90 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73  )):.**    NC_Has
1bca0 41 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73  Agg    == SF_Has
1bcb0 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e  Agg.**    NC_Min
1bcc0 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e  MaxAgg == SF_Min
1bcd0 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45  MaxAgg == SQLITE
1bce0 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a  _FUNC_MINMAX.**.
1bcf0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
1bd00 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20  lowAgg  0x0001  
1bd10 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
1bd20 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
1bd30 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
1bd40 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
1bd50 30 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20  0x0002  /* True 
1bd60 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
1bd70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
1bd80 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
1bd90 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30  _IsCheck   0x000
1bda0 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  4  /* True if re
1bdb0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
1bdc0 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
1bdd0 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
1bde0 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30  C_InAggFunc 0x00
1bdf0 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61  08  /* True if a
1be00 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
1be10 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
1be20 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
1be30 48 61 73 41 67 67 20 20 20 20 30 78 30 30 31 30  HasAgg    0x0010
1be40 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
1be50 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1be60 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
1be70 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20  fine NC_IdxExpr 
1be80 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75    0x0020  /* Tru
1be90 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63  e if resolving c
1bea0 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45  olumns of CREATE
1beb0 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
1bec0 65 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30  e NC_VarSelect 0
1bed0 78 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72  x0040  /* A corr
1bee0 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
1bef0 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
1bf00 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
1bf10 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
1bf20 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
1bf30 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
1bf40 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a  ote above */../*
1bf50 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1bf60 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1bf70 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1bf80 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
1bf90 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
1bfa0 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
1bfb0 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
1bfc0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
1bfd0 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
1bfe0 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
1bff0 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
1c000 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
1c010 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
1c020 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
1c030 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
1c040 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
1c050 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
1c060 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
1c070 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
1c080 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
1c090 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
1c0a0 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
1c0b0 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
1c0c0 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
1c0d0 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
1c0e0 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
1c0f0 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
1c100 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
1c110 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
1c120 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
1c130 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
1c140 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
1c150 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
1c160 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
1c170 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
1c180 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
1c190 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
1c1a0 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
1c1b0 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
1c1c0 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
1c1d0 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
1c1e0 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
1c1f0 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
1c200 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
1c210 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1c220 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
1c230 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
1c240 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
1c250 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
1c260 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
1c270 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
1c280 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
1c290 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
1c2a0 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
1c2b0 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
1c2c0 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
1c2d0 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
1c2e0 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
1c2f0 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1c300 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
1c310 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
1c320 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
1c330 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
1c340 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
1c350 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
1c360 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
1c370 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
1c380 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
1c390 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
1c3a0 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
1c3b0 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
1c3c0 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
1c3f0 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
1c400 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
1c410 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  PT */.  LogEst n
1c420 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f  SelectRow;     /
1c430 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
1c440 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
1c450 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c  s */.  u32 selFl
1c460 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
1c470 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
1c480 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
1c490 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
1c4a0 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1c4b0 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
1c4c0 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
1c4d0 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45  ters */.#if SELE
1c4e0 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1c4f0 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b    char zSelName[
1c500 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62  12];     /* Symb
1c510 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69  olic name of thi
1c520 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72  s SELECT use for
1c530 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65   debugging */.#e
1c540 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f  ndif.  int addrO
1c550 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a  penEphm[2];   /*
1c560 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70   OP_OpenEphem op
1c570 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f  codes related to
1c580 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a   this select */.
1c590 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
1c5a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1c5b0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1c5c0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
1c5d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1c5e0 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
1c5f0 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
1c600 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
1c610 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
1c620 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
1c630 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
1c640 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
1c650 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1c660 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
1c670 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1c680 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
1c690 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
1c6a0 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
1c6b0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
1c6c0 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
1c6d0 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
1c6e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
1c6f0 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
1c700 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
1c710 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nd */.  Expr *pL
1c720 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
1c730 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
1c740 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
1c750 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78  ot used. */.  Ex
1c760 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20  pr *pOffset;    
1c770 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65       /* OFFSET e
1c780 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
1c790 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
1c7a0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1c7b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
1c7c0 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
1c7d0 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
1c7e0 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
1c7f0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1c800 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
1c810 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
1c820 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
1c830 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
1c840 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a  lect Flag"..**.*
1c850 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1c860 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1c870 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a   via assert()).*
1c880 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67 20  *     SF_HasAgg 
1c890 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67      == NC_HasAgg
1c8a0 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61  .**     SF_MinMa
1c8b0 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d  xAgg  == NC_MinM
1c8c0 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c  axAgg     == SQL
1c8d0 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1c8e0 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c  **     SF_FixedL
1c8f0 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53  imit == WHERE_US
1c900 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69  E_LIMIT.*/.#defi
1c910 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
1c920 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a       0x00001  /*
1c930 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
1c940 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
1c950 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20  efine SF_All    
1c960 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32 20          0x00002 
1c970 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65   /* Includes the
1c980 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a   ALL keyword */.
1c990 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c  #define SF_Resol
1c9a0 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30 30  ved       0x0000
1c9b0 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  4  /* Identifier
1c9c0 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
1c9d0 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lved */.#define 
1c9e0 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20  SF_Aggregate    
1c9f0 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f    0x00008  /* Co
1ca00 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74  ntains agg funct
1ca10 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20  ions or a GROUP 
1ca20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  BY */.#define SF
1ca30 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20 20  _HasAgg         
1ca40 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74  0x00010  /* Cont
1ca50 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
1ca60 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1ca70 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
1ca80 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f  eral  0x00020  /
1ca90 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
1caa0 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
1cab0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
1cac0 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30  panded       0x0
1cad0 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0040  /* sqlite3
1cae0 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
1caf0 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
1cb00 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
1cb10 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30  ypeInfo    0x000
1cb20 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  80  /* FROM subq
1cb30 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
1cb40 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
1cb50 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
1cb60 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30 20  d       0x00100 
1cb70 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
1cb80 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
1cb90 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
1cba0 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32 30  s         0x0020
1cbb0 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
1cbc0 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
1cbd0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1cbe0 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
1cbf0 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69    0x00400  /* Si
1cc00 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
1cc10 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1cc20 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
1cc30 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
1cc40 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72   0x00800  /* Par
1cc50 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
1cc60 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
1cc70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1cc80 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78  inMaxAgg      0x
1cc90 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  01000  /* Aggreg
1cca0 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
1ccb0 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
1ccc0 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
1ccd0 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30  rsive      0x020
1cce0 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
1ccf0 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
1cd00 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
1cd10 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64  #define SF_Fixed
1cd20 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30  Limit     0x0400
1cd30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77  0  /* nSelectRow
1cd40 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61   set by a consta
1cd50 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66  nt LIMIT */.#def
1cd60 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
1cd70 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20 2f  ert   0x08000  /
1cd80 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
1cd90 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1cda0 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1cdb0 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64  ine SF_Converted
1cdc0 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20 2f        0x10000  /
1cdd0 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70  * By convertComp
1cde0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1cdf0 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1ce00 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64  e SF_IncludeHidd
1ce10 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20  en  0x20000  /* 
1ce20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63  Include hidden c
1ce30 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74  olumns in output
1ce40 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   */.../*.** The 
1ce50 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
1ce60 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72  ECT can be distr
1ce70 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61  ibuted in severa
1ce80 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e  l ways, as defin
1ce90 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20  ed.** by one of 
1cea0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  the following ma
1ceb0 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22  cros.  The "SRT"
1cec0 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
1ced0 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20  ELECT Result.** 
1cee0 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Type"..**.**    
1cef0 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1cf00 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
1cf10 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d  s a key in a tem
1cf20 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20  porary index.** 
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf40 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62      identified b
1cf50 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  y pDest->iSDParm
1cf60 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1cf70 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f  Except      Remo
1cf80 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  ve results from 
1cf90 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  the temporary in
1cfa0 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61  dex pDest->iSDPa
1cfb0 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
1cfc0 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74  T_Exists      St
1cfd0 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72  ore a 1 in memor
1cfe0 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53  y cell pDest->iS
1cff0 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73  DParm if the res
1d000 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ult.**          
1d010 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69             set i
1d020 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a  s not empty..**.
1d030 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61  **     SRT_Disca
1d040 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65  rd     Throw the
1d050 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20   results away.  
1d060 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
1d070 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20  SELECT.**       
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1d090 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
1d0a0 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f  triggers whose o
1d0b0 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a  nly purpose is.*
1d0c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d0d0 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65        the side-e
1d0e0 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69  ffects of functi
1d0f0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  ons..**.** All o
1d100 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1d110 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74  free to ignore t
1d120 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c  heir ORDER BY cl
1d130 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74  ause. Those that
1d140 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20  .** follow must 
1d150 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20  honor the ORDER 
1d160 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1d170 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20       SRT_Output 
1d180 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20       Generate a 
1d190 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75  row of output (u
1d1a0 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75  sing the OP_Resu
1d1b0 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  ltRow.**        
1d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63               opc
1d1d0 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f  ode) for each ro
1d1e0 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  w in the result 
1d1f0 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  set..**.**     S
1d200 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f  RT_Mem         O
1d210 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65  nly valid if the
1d220 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e   result is a sin
1d230 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20  gle column..**  
1d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d250 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72     Store the fir
1d260 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  st column of the
1d270 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f   first result ro
1d280 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
1d290 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69           in regi
1d2a0 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1d2b0 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e  arm then abandon
1d2c0 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20   the rest.**    
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20   of the query.  
1d2f0 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  This destination
1d300 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20   implies "LIMIT 
1d310 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  1"..**.**     SR
1d320 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68  T_Set         Th
1d330 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65  e result must be
1d340 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1d350 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a  .  Store each.**
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75       row of resu
1d380 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e  lt as the key in
1d390 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1d3a0 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1d3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70                Ap
1d3c0 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79  ply the affinity
1d3d0 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20   pDest->affSdst 
1d3e0 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a  before storing.*
1d3f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d400 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20        results.  
1d410 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  Used to implemen
1d420 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  t "IN (SELECT ..
1d430 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  .)"..**.**     S
1d440 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43  RT_EphemTab    C
1d450 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61  reate an tempora
1d460 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1d470 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72  iSDParm and stor
1d480 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1d490 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73           the res
1d4a0 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63  ult there. The c
1d4b0 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70  ursor is left op
1d4c0 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20  en after.**     
1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4e0 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73  returning.  This
1d4f0 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62   is like SRT_Tab
1d500 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  le except that.*
1d510 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d520 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69        this desti
1d530 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f  nation uses OP_O
1d540 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20  penEphemeral to 
1d550 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  create.**       
1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1d570 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a  e table first..*
1d580 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72  *.**     SRT_Cor
1d590 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74  outine   Generat
1d5a0 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74  e a co-routine t
1d5b0 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65  hat returns a ne
1d5c0 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20  w row of.**     
1d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5e0 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d  results each tim
1d5f0 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e  e it is invoked.
1d600 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e    The entry poin
1d610 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1d620 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1d630 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74  co-routine is st
1d640 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1d650 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a   pDest->iSDParm.
1d660 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d670 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72         and the r
1d680 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f  esult row is sto
1d690 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44  red in pDest->nD
1d6a0 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  est registers.**
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6c0 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69       starting wi
1d6d0 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e  th pDest->iSdst.
1d6e0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54  .**.**     SRT_T
1d6f0 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65  able       Store
1d700 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70   results in temp
1d710 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1d720 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1d730 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20     SRT_Fifo     
1d740 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20     This is like 
1d750 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63  SRT_EphemTab exc
1d760 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62  ept that the tab
1d770 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
1d780 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73            is ass
1d790 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20  umed to already 
1d7a0 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69  be open.  SRT_Fi
1d7b0 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20  fo has.**       
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1d7d0 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f  e additional pro
1d7e0 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61  perty of being a
1d7f0 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a  ble to ignore.**
1d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d810 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42       the ORDER B
1d820 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1d830 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f      SRT_DistFifo
1d840 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1d850 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  s in a temporary
1d860 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1d870 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75                Bu
1d890 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f  t also use tempo
1d8a0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1d8b0 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a  ->iSDParm+1 as.*
1d8c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d8d0 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f        a record o
1d8e0 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75  f all prior resu
1d8f0 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61  lts and ignore a
1d900 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20  ny duplicate.** 
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d920 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20      rows.  Name 
1d930 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63  means:  "Distinc
1d940 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20  t Fifo"..**.**  
1d950 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20     SRT_Queue    
1d960 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1d970 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1d980 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1d990 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20  m (really.**    
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9b0 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70   an index).  App
1d9c0 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e  end a sequence n
1d9d0 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c  umber so that al
1d9e0 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20  l entries.**    
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da00 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a   are distinct..*
1da10 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1da20 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72  tQueue   Store r
1da30 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1da40 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1da50 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a  iSDParm only if.
1da60 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1da70 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20         the same 
1da80 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72  record has never
1da90 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66   been stored bef
1daa0 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20  ore.  The.**    
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dac0 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d   index at pDest-
1dad0 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20  >iSDParm+1 hold 
1dae0 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73  all prior stores
1daf0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
1db00 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
1db10 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1db20 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1db30 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1db40 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1db50 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
1db60 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
1db70 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
1db80 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
1db90 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
1dba0 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
1dbb0 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
1dbc0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
1dbd0 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
1dbe0 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
1dbf0 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
1dc00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46  */.#define SRT_F
1dc10 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f  ifo         5  /
1dc20 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1dc30 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
1dc40 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
1dc50 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1dc60 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a  stFifo     6  /*
1dc70 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20   Like SRT_Fifo, 
1dc80 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1dc90 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ts only */.#defi
1dca0 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20  ne SRT_Queue    
1dcb0 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
1dcc0 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65  result in an que
1dcd0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ue */.#define SR
1dce0 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38  T_DistQueue    8
1dcf0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75    /* Like SRT_Qu
1dd00 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20  eue, but unique 
1dd10 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1dd20 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59  ./* The ORDER BY
1dd30 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72   clause is ignor
1dd40 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ed for all of th
1dd50 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69  e above */.#defi
1dd60 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65  ne IgnorableOrde
1dd70 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73  rby(X) ((X->eDes
1dd80 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75  t)<=SRT_DistQueu
1dd90 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  e)..#define SRT_
1dda0 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20  Output       9  
1ddb0 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72  /* Output each r
1ddc0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1ddd0 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20  #define SRT_Mem 
1dde0 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53          10  /* S
1ddf0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1de00 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a   memory cell */.
1de10 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20  #define SRT_Set 
1de20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53          11  /* S
1de30 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1de40 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1de50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1de60 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20  EphemTab    12  
1de70 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69  /* Create transi
1de80 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72  ent tab and stor
1de90 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  e like SRT_Table
1dea0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1deb0 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20  Coroutine   13  
1dec0 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69  /* Generate a si
1ded0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
1dee0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1def0 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34  T_Table       14
1df00 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1df10 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
1df20 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
1df30 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  d */../*.** An i
1df40 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1df50 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
1df60 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66   where to put of
1df70 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
1df80 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  ** a SELECT stat
1df90 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
1dfa0 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20   SelectDest {.  
1dfb0 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20  u8 eDest;       
1dfc0 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
1dfd0 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
1dfe0 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52  sults.  On of SR
1dff0 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20  T_* above. */.  
1e000 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20  int iSDParm;    
1e010 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65       /* A parame
1e020 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20  ter used by the 
1e030 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d  eDest disposal m
1e040 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ethod */.  int i
1e050 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1e060 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
1e070 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61   where results a
1e080 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  re written */.  
1e090 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20  int nSdst;      
1e0a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e0b0 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
1e0c0 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  cated */.  char 
1e0d0 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20  *zAffSdst;      
1e0e0 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64  /* Affinity used
1e0f0 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54   when eDest==SRT
1e100 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69  _Set */.  ExprLi
1e110 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f  st *pOrderBy;  /
1e120 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f  * Key columns fo
1e130 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20  r SRT_Queue and 
1e140 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f  SRT_DistQueue */
1e150 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e  .};../*.** Durin
1e160 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
1e170 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20  n of statements 
1e180 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20  that do inserts 
1e190 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45  into AUTOINCREME
1e1a0 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  NT.** tables, th
1e1b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
1e1c0 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
1e1d0 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
1e1e0 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
1e1f0 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
1e200 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
1e210 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
1e220 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
1e230 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
1e240 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
1e250 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
1e260 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
1e270 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
1e280 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
1e290 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
1e2a0 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72  e done within tr
1e2b0 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
1e2c0 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
1e2d0 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
1e2e0 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
1e2f0 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
1e300 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
1e310 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
1e320 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
1e330 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
1e340 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1e350 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
1e360 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
1e370 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
1e380 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
1e390 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
1e3a0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
1e3b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1e3c0 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
1e3d0 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
1e3e0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1e3f0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1e400 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
1e410 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
1e420 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
1e430 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
1e440 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
1e450 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1e460 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
1e470 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
1e480 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
1e490 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
1e4a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
1e4b0 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
1e4c0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1e4d0 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
1e4e0 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
1e4f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1e500 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1e510 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
1e520 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67  or each.** trigg
1e530 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
1e540 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
1e550 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
1e560 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
1e570 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
1e580 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
1e590 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
1e5a0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
1e5b0 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
1e5c0 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
1e5d0 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
1e5e0 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
1e5f0 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
1e600 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
1e610 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
1e620 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
1e630 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
1e640 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
1e650 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
1e660 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
1e670 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
1e680 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1e690 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
1e6a0 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
1e6b0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
1e6c0 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
1e6d0 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
1e6e0 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
1e6f0 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
1e700 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
1e710 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
1e720 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
1e730 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
1e740 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
1e750 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
1e760 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
1e770 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
1e780 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
1e790 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
1e7a0 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
1e7b0 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
1e7c0 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
1e7d0 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74  f INSERT.** stat
1e7e0 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72  ements). Similar
1e7f0 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50  ly, the TriggerP
1e800 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76  rg.aColmask[1] v
1e810 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
1e820 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e  o.** a mask of n
1e830 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65  ew.* columns use
1e840 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
1e850 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  ..*/.struct Trig
1e860 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67  gerPrg {.  Trigg
1e870 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
1e880 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68     /* Trigger th
1e890 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63  is program was c
1e8a0 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54  oded from */.  T
1e8b0 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74  riggerPrg *pNext
1e8c0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65  ;      /* Next e
1e8d0 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54  ntry in Parse.pT
1e8e0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a  riggerPrg list *
1e8f0 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
1e900 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50  pProgram;   /* P
1e910 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74  rogram implement
1e920 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63  ing pTrigger/orc
1e930 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63  onf */.  int orc
1e940 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  onf;            
1e950 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
1e960 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a  ONFLICT policy *
1e970 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
1e980 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
1e990 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
1e9a0 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
1e9b0 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  essed */.};../*.
1e9c0 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64  ** The yDbMask d
1e9d0 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20  atatype for the 
1e9e0 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61  bitmask of all a
1e9f0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1ea00 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  s..*/.#if SQLITE
1ea10 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
1ea20 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
1ea30 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b  ned char yDbMask
1ea40 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  [(SQLITE_MAX_ATT
1ea50 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64  ACHED+9)/8];.# d
1ea60 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
1ea70 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28  (M,I)    (((M)[(
1ea80 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37  I)/8]&(1<<((I)&7
1ea90 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
1eaa0 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
1eab0 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30      memset((M),0
1eac0 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65  ,sizeof(M)).# de
1ead0 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
1eae0 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f  ,I)     (M)[(I)/
1eaf0 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29  8]|=(1<<((I)&7))
1eb00 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1eb10 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c  AllZero(M)   sql
1eb20 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1eb30 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62  o(M).# define Db
1eb40 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1eb50 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41   (sqlite3DbMaskA
1eb60 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65  llZero(M)==0).#e
1eb70 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e  lse.  typedef un
1eb80 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61  signed int yDbMa
1eb90 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  sk;.# define DbM
1eba0 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1ebb0 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b  (((M)&(((yDbMask
1ebc0 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23  )1)<<(I)))!=0).#
1ebd0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1ebe0 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30  ro(M)      (M)=0
1ebf0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1ec00 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1ec10 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  |=(((yDbMask)1)<
1ec20 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44  <(I)).# define D
1ec30 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1ec40 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e    (M)==0.# defin
1ec50 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28  e DbMaskNonZero(
1ec60 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64  M)   (M)!=0.#end
1ec70 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c  if../*.** An SQL
1ec80 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   parser context.
1ec90 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73    A copy of this
1eca0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
1ecb0 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20  ssed through.** 
1ecc0 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64  the parser and d
1ecd0 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65  own into all the
1ece0 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72   parser action r
1ecf0 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20  outine in order 
1ed00 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75  to.** carry arou
1ed10 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  nd information t
1ed20 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f  hat is global to
1ed30 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73   the entire pars
1ed40 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  e..**.** The str
1ed50 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65  ucture is divide
1ed60 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73  d into two parts
1ed70 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73  .  When the pars
1ed80 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67  er and code.** g
1ed90 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65  enerate call the
1eda0 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76  mselves recursiv
1edb0 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70  ely, the first p
1edc0 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63  art of the struc
1edd0 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74  ture.** is const
1ede0 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f  ant but the seco
1edf0 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74  nd part is reset
1ee00 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
1ee10 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20  g and end of.** 
1ee20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a  each recursion..
1ee30 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65  **.** The nTable
1ee40 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c  Lock and aTableL
1ee50 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72  ock variables ar
1ee60 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74  e only used if t
1ee70 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a  he shared-cache.
1ee80 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
1ee90 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
1eea0 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
1eeb0 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
1eec0 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
1eed0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
1eee0 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
1eef0 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
1ef00 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
1ef10 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
1ef20 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
1ef30 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
1ef40 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
1ef50 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
1ef60 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
1ef70 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1ef80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1ef90 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
1efa0 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
1efb0 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
1efc0 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
1efd0 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
1efe0 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
1eff0 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
1f000 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
1f010 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
1f020 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1f030 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
1f040 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
1f050 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
1f060 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
1f070 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
1f080 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
1f090 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
1f0a0 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
1f0b0 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
1f0c0 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
1f0d0 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
1f0e0 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
1f0f0 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
1f100 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f110 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
1f120 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
1f130 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1f140 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
1f150 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f160 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
1f170 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
1f180 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73  Reg[] */.  u8 is
1f190 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20  MultiWrite;     
1f1a0 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1f1b0 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f  ment may modify/
1f1c0 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20  insert multiple 
1f1d0 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79  rows */.  u8 may
1f1e0 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f  Abort;         /
1f1f0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1f200 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e  ent may throw an
1f210 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
1f220 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70   */.  u8 hasComp
1f230 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65  ound;      /* Ne
1f240 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e  ed to invoke con
1f250 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1f260 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1f270 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61  /.  u8 okConstFa
1f280 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74  ctor;    /* OK t
1f290 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  o factor out con
1f2a0 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64  stants */.  u8 d
1f2b0 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b  isableLookaside;
1f2c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69   /* Number of ti
1f2d0 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61  mes lookaside ha
1f2e0 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20  s been disabled 
1f2f0 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68  */.  u8 nColCach
1f300 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  e;        /* Num
1f310 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
1f320 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f  n aColCache[] */
1f330 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67  .  int nRangeReg
1f340 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20  ;       /* Size 
1f350 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
1f360 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1f370 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52  */.  int iRangeR
1f380 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72  eg;       /* Fir
1f390 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74  st register in t
1f3a0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1f3b0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1f3c0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
1f3d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1f3e0 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
1f3f0 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20  int nTab;       
1f400 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f410 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c  f previously all
1f420 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73  ocated VDBE curs
1f430 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ors */.  int nMe
1f440 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1f450 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
1f460 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20  y cells used so 
1f470 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70  far */.  int nOp
1f480 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1f490 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
1f4a0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
1f4b0 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
1f4c0 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20  nt szOpAlloc;   
1f4d0 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
1f4e0 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c  memory space all
1f4f0 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
1f500 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  aOp[] */.  int i
1f510 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20  SelfTab;        
1f520 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 61 73 73  /* Table for ass
1f530 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 6e 20  ociated with an 
1f540 69 6e 64 65 78 20 6f 6e 20 65 78 70 72 2c 20 6f  index on expr, o
1f550 72 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20  r negative.     
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 20 2a 2a 20 6f 66 20 74 68 65 20 62 61 73 65    ** of the base
1f580 20 72 65 67 69 73 74 65 72 20 64 75 72 69 6e 67   register during
1f590 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69 6e   check-constrain
1f5a0 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74 20  t eval */.  int 
1f5b0 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20  iCacheLevel;    
1f5c0 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c   /* ColCache val
1f5d0 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68  id when aColCach
1f5e0 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63  e[].iLevel<=iCac
1f5f0 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74  heLevel */.  int
1f600 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20   iCacheCnt;     
1f610 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65    /* Counter use
1f620 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43  d to generate aC
1f630 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61  olCache[].lru va
1f640 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  lues */.  int nL
1f650 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  abel;          /
1f660 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65  * Number of labe
1f670 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74  ls used */.  int
1f680 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20   *aLabel;       
1f690 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f    /* Space to ho
1f6a0 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f  ld the labels */
1f6b0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f  .  ExprList *pCo
1f6c0 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74  nstExpr;/* Const
1f6d0 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
1f6e0 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74  */.  Token const
1f6f0 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d  raintName;/* Nam
1f700 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
1f710 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65  int currently be
1f720 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ing parsed */.  
1f730 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
1f740 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
1f750 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
1f760 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
1f770 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
1f780 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
1f790 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
1f7a0 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
1f7b0 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
1f7c0 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20  regRowid;       
1f7d0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1f7e0 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52  ding rowid of CR
1f7f0 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79  EATE TABLE entry
1f800 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f   */.  int regRoo
1f810 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  t;         /* Re
1f820 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
1f830 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
1f840 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20  for new objects 
1f850 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67  */.  int nMaxArg
1f860 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  ;         /* Max
1f870 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20   args passed to 
1f880 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79  user function by
1f890 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
1f8a0 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
1f8b0 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53  ENABLED.  int nS
1f8c0 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f  elect;         /
1f8d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45  * Number of SELE
1f8e0 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65  CT statements se
1f8f0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c  en */.  int nSel
1f900 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20  ectIndent;   /* 
1f910 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e  How far to inden
1f920 74 20 53 45 4c 45 43 54 54 52 41 43 45 28 29 20  t SELECTTRACE() 
1f930 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66  output */.#endif
1f940 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1f950 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
1f960 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f  E.  int nTableLo
1f970 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ck;        /* Nu
1f980 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e  mber of locks in
1f990 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20   aTableLock */. 
1f9a0 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62   TableLock *aTab
1f9b0 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69  leLock; /* Requi
1f9c0 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20  red table locks 
1f9d0 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  for shared-cache
1f9e0 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   mode */.#endif.
1f9f0 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
1fa00 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d  Ainc;  /* Inform
1fa10 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f  ation about AUTO
1fa20 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65  INCREMENT counte
1fa30 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  rs */.  Parse *p
1fa40 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
1fa50 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
1fa60 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
1fa70 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
1fa80 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
1fa90 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
1faa0 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
1fab0 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
1fac0 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20  int addrCrTab;  
1fad0 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1fae0 6f 66 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65  of OP_CreateBtre
1faf0 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41  e opcode on CREA
1fb00 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33  TE TABLE */.  u3
1fb10 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20  2 nQueryLoop;   
1fb20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72     /* Est number
1fb30 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
1fb40 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f  f a query (10*lo
1fb50 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20  g2(N)) */.  u32 
1fb60 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  oldmask;        
1fb70 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e   /* Mask of old.
1fb80 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1fb90 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65  nced */.  u32 ne
1fba0 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  wmask;         /
1fbb0 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  * Mask of new.* 
1fbc0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1fbd0 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67  ed */.  u8 eTrig
1fbe0 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20  gerOp;       /* 
1fbf0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1fc00 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54  SERT or TK_DELET
1fc10 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e  E */.  u8 eOrcon
1fc20 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  f;          /* D
1fc30 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1fc40 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72  CT policy for tr
1fc50 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20  igger steps */. 
1fc60 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67   u8 disableTrigg
1fc70 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f  ers;  /* True to
1fc80 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72   disable trigger
1fc90 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  s */..  /*******
1fca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fcb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fcc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fcd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fce0 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20  ***.  ** Fields 
1fcf0 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69 6e  above must be in
1fd00 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72  itialized to zer
1fd10 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20 74  o.  The fields t
1fd20 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a  hat follow,.  **
1fd30 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65 67   down to the beg
1fd40 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65  inning of the re
1fd50 63 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e 2c  cursive section,
1fd60 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
1fd70 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69  be.  ** initiali
1fd80 7a 65 64 20 61 73 20 74 68 65 79 20 77 69 6c 6c  zed as they will
1fd90 20 62 65 20 73 65 74 20 62 65 66 6f 72 65 20 62   be set before b
1fda0 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 20  eing used.  The 
1fdb0 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a  boundary is.  **
1fdc0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6f   determined by o
1fdd0 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43  ffsetof(Parse,aC
1fde0 6f 6c 43 61 63 68 65 29 2e 0a 20 20 2a 2a 2a 2a  olCache)..  ****
1fdf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe30 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72 75 63  ******/..  struc
1fe40 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20  t yColCache {.  
1fe50 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
1fe60 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1fe70 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
1fe80 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d  /.    i16 iColum
1fe90 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
1fea0 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62  able column numb
1feb0 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d  er */.    u8 tem
1fec0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  pReg;           
1fed0 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d  /* iReg is a tem
1fee0 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  p register that 
1fef0 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65  needs to be free
1ff00 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65  d */.    int iLe
1ff10 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  vel;           /
1ff20 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20  * Nesting level 
1ff30 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b  */.    int iReg;
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ff50 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f  Reg with value o
1ff60 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30  f this column. 0
1ff70 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a   means none. */.
1ff80 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20      int lru;    
1ff90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61            /* Lea
1ffa0 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64  st recently used
1ffb0 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73   entry has the s
1ffc0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f  mallest value */
1ffd0 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53  .  } aColCache[S
1ffe0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1fff0 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65  ];  /* One for e
20000 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  ach column cache
20010 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
20020 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
20030 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61      /* Holding a
20040 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  rea for temporar
20050 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20  y registers */. 
20060 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65   Token sNameToke
20070 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65  n;       /* Toke
20080 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69  n with unqualifi
20090 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  ed schema object
200a0 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a   name */..  /***
200b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
200c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
200d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
200e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
200f0 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65  *****.  ** Above
20100 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74   is constant bet
20110 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e  ween recursions.
20120 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74    Below is reset
20130 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
20140 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75  r.  ** each recu
20150 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e  rsion.  The boun
20160 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65  dary between the
20170 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69  se two regions i
20180 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a  s determined.  *
20190 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66  * using offsetof
201a0 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65  (Parse,sLastToke
201b0 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74 54  n) so the sLastT
201c0 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74 20  oken field must 
201d0 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72 73  be the.  ** firs
201e0 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72  t field in the r
201f0 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e  ecursive region.
20200 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
20210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20240 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
20250 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
20260 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c  ;       /* The l
20270 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  ast token parsed
20280 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72   */.  ynVar nVar
20290 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
202a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27  /* Number of '?'
202b0 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20   variables seen 
202c0 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61  in the SQL so fa
202d0 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72  r */.  u8 iPkSor
202e0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
202f0 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20   /* ASC or DESC 
20300 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d  for INTEGER PRIM
20310 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20  ARY KEY */.  u8 
20320 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
20330 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
20340 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
20350 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
20360 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e  he query */.#ifn
20370 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20380 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75  VIRTUALTABLE.  u
20390 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20  8 declareVtab;  
203a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
203b0 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74   if inside sqlit
203c0 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
203d0 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62  ) */.  int nVtab
203e0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
203f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
20400 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20  rtual tables to 
20410 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lock */.#endif. 
20420 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
20430 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
20440 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65  pression tree he
20450 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20  ight of current 
20460 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69  sub-select */.#i
20470 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
20480 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20  T_EXPLAIN.  int 
20490 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  iSelectId;      
204a0 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63        /* ID of c
204b0 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f  urrent select fo
204c0 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
204d0 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53   */.  int iNextS
204e0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
204f0 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c  /* Next availabl
20500 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20  e select ID for 
20510 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
20520 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74  /.#endif.  VList
20530 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20   *pVList;       
20540 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
20550 62 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65  between variable
20560 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65   names and numbe
20570 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52  rs */.  Vdbe *pR
20580 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20  eprepare;       
20590 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65    /* VM being re
205a0 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65  prepared (sqlite
205b0 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f  3Reprepare()) */
205c0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
205d0 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  Tail;        /* 
205e0 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73  All SQL text pas
205f0 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63  t the last semic
20600 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  olon parsed */. 
20610 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c   Table *pNewTabl
20620 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
20630 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73  table being cons
20640 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
20650 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69  E TABLE */.  Tri
20660 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65  gger *pNewTrigge
20670 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  r;     /* Trigge
20680 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63  r under construc
20690 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52  t by a CREATE TR
206a0 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74  IGGER */.  const
206b0 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
206c0 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20  ext; /* The 6th 
206d0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d  parameter to db-
206e0 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73  >xAuth callbacks
206f0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
20700 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
20710 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
20720 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
20730 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
20740 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
20750 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
20760 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
20770 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
20780 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
20790 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
207a0 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
207b0 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
207c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
207d0 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
207e0 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
207f0 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
20800 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
20810 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
20820 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
20830 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20  d triggers */.  
20840 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
20850 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
20860 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65  rent WITH clause
20870 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57  , or NULL */.  W
20880 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65  ith *pWithToFree
20890 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65  ;        /* Free
208a0 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63   this WITH objec
208b0 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  t at the end of 
208c0 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a  the parse */.};.
208d0 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64  ./*.** Sizes and
208e0 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61 72   pointers of var
208f0 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74 68  ious parts of th
20900 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a  e Parse object..
20910 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  */.#define PARSE
20920 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66  _HDR_SZ offsetof
20930 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65  (Parse,aColCache
20940 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70  ) /* Recursive p
20950 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68  art w/o aColCach
20960 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  e*/.#define PARS
20970 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66  E_RECURSE_SZ off
20980 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73  setof(Parse,sLas
20990 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65  tToken)    /* Re
209a0 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a  cursive part */.
209b0 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41  #define PARSE_TA
209c0 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61  IL_SZ (sizeof(Pa
209d0 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52  rse)-PARSE_RECUR
209e0 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65  SE_SZ) /* Non-re
209f0 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a  cursive part */.
20a00 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41  #define PARSE_TA
20a10 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29 28  IL(X) (((char*)(
20a20 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53  X))+PARSE_RECURS
20a30 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65  E_SZ)  /* Pointe
20a40 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a  r to tail */../*
20a50 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
20a60 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
20a70 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
20a80 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
20a90 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
20aa0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
20ab0 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
20ac0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
20ad0 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
20ae0 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
20af0 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c  AB (pParse->decl
20b00 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a  areVtab).#endif.
20b10 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
20b20 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
20b30 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
20b40 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
20b50 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
20b60 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
20b70 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
20b80 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
20b90 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
20ba0 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
20bb0 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
20bc0 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
20bd0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
20be0 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
20bf0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
20c00 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
20c10 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
20c20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
20c30 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
20c40 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
20c50 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
20c60 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
20c70 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a  us opcodes..**.*
20c80 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
20c90 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
20ca0 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
20cb0 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48     OPFLAG_LENGTH
20cc0 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
20cd0 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20  _FUNC_LENGTH.** 
20ce0 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46     OPFLAG_TYPEOF
20cf0 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
20d00 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20  _FUNC_TYPEOF.** 
20d10 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53     OPFLAG_BULKCS
20d20 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  R      == BTREE_
20d30 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f  BULKLOAD.**    O
20d40 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
20d50 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b     == BTREE_SEEK
20d60 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  _EQ.**    OPFLAG
20d70 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d  _FORDELETE    ==
20d80 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
20d90 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41  .**    OPFLAG_SA
20da0 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54  VEPOSITION == BT
20db0 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  REE_SAVEPOSITION
20dc0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55  .**    OPFLAG_AU
20dd0 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54  XDELETE    == BT
20de0 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f  REE_AUXDELETE.*/
20df0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20e00 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
20e10 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65  01    /* OP_Inse
20e20 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74  rt: Set to updat
20e30 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f  e db->nChange */
20e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e60 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73        /* Also us
20e70 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35  ed in P2 (not P5
20e80 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a  ) of OP_Delete *
20e90 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20ea0 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20 30  _EPHEM         0
20eb0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x01    /* OP_Col
20ec0 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f  umn: Ephemeral o
20ed0 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23  utput is ok */.#
20ee0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
20ef0 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 32 30  STROWID     0x20
20f00 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
20f10 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
20f20 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
20f30 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
20f40 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
20f50 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
20f60 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
20f70 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20f80 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
20f90 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
20fa0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
20fb0 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
20fc0 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
20fd0 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
20fe0 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
20ff0 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
21000 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
21010 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50  ne OPFLAG_ISNOOP
21020 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20 20          0x40    
21030 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65  /* OP_Delete doe
21040 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f  s pre-update-hoo
21050 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
21060 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  e OPFLAG_LENGTHA
21070 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f  RG     0x40    /
21080 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
21090 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68   used for length
210a0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
210b0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20  FLAG_TYPEOFARG  
210c0 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50     0x80    /* OP
210d0 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
210e0 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a  d for typeof() *
210f0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21100 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30  _BULKCSR       0
21110 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x01    /* OP_Ope
21120 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e  n** used to open
21130 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a   bulk cursor */.
21140 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
21150 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78 30  EEKEQ        0x0
21160 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  2    /* OP_Open*
21170 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45 51  * cursor uses EQ
21180 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64   seek only */.#d
21190 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52  efine OPFLAG_FOR
211a0 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38 20  DELETE     0x08 
211b0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68     /* OP_Open sh
211c0 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46  ould use BTREE_F
211d0 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  ORDELETE */.#def
211e0 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  ine OPFLAG_P2ISR
211f0 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20 20  EG       0x10   
21200 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65   /* P2 to OP_Ope
21210 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65  n** is a registe
21220 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66  r number */.#def
21230 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  ine OPFLAG_PERMU
21240 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  TE       0x01   
21250 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20   /* OP_Compare: 
21260 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74  use the permutat
21270 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
21280 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
21290 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f  ON  0x02    /* O
212a0 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a  P_Delete/Insert:
212b0 20 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f 73   save cursor pos
212c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
212d0 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20  AG_AUXDELETE    
212e0 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44   0x04    /* OP_D
212f0 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20  elete: index in 
21300 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a  a DELETE op */..
21310 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67  /*. * Each trigg
21320 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  er present in th
21330 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
21340 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  a is stored as a
21350 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a  n instance of. *
21360 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
21370 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
21380 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
21390 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
213a0 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
213b0 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
213c0 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
213d0 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
213e0 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
213f0 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
21400 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61  the. *    databa
21410 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
21420 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
21430 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
21440 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
21450 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
21460 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
21470 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
21480 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
21490 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
214a0 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
214b0 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
214c0 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
214d0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
214e0 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
214f0 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
21500 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
21510 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
21520 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
21530 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
21540 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
21550 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
21560 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
21570 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
21580 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
21590 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
215a0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
215b0 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
215c0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
215d0 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
215e0 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
215f0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
21600 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
21610 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
21620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21630 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
21640 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
21650 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
21660 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
21670 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
21680 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
21690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
216a0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
216b0 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
216c0 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
216d0 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
216e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
216f0 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
21700 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
21710 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
21720 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
21730 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
21740 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
21750 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
21760 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
21770 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
21780 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
21790 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
217a0 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
217b0 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
217c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217d0 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
217e0 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
217f0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
21800 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
21810 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
21820 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
21830 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
21840 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
21850 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
21860 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
21870 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
21880 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
21890 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
218a0 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
218b0 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
218c0 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
218d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
218e0 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
218f0 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
21900 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
21910 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
21920 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
21930 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
21940 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
21950 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
21960 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a  ermine which..**
21970 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
21980 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
21990 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
219a0 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
219b0 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
219c0 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
219d0 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
219e0 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
219f0 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
21a00 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
21a10 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
21a20 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
21a30 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
21a40 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
21a50 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
21a60 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
21a70 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
21a80 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
21a90 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
21aa0 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49  program.. *. * I
21ab0 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
21ac0 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
21ad0 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
21ae0 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
21af0 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
21b00 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
21b10 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
21b20 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
21b30 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
21b40 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  he. * associated
21b50 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
21b60 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
21b70 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
21b80 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
21b90 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
21ba0 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
21bb0 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
21bc0 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
21bd0 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
21be0 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
21bf0 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
21c00 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
21c10 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
21c20 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
21c30 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
21c40 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
21c50 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76  ined by the. * v
21c60 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
21c70 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
21c80 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
21c90 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
21ca0 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
21cb0 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
21cc0 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
21cd0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
21ce0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
21cf0 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
21d00 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
21d10 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
21d20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
21d30 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
21d40 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
21d50 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61  ise NULL.. * zTa
21d60 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
21d70 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
21d80 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
21d90 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
21da0 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
21db0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
21dc0 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
21dd0 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
21de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
21df0 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
21e00 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
21e10 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
21e20 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
21e30 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
21e40 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
21e50 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
21e60 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20  VALUES .... *   
21e70 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
21e80 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
21e90 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
21ea0 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
21ec0 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
21ed0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
21ee0 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ETE). * zTarget 
21ef0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
21f00 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
21f10 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
21f20 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
21f30 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
21f40 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
21f50 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
21f60 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
21f80 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
21f90 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
21fa0 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  DATE). * zTarget
21fb0 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
21fc0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
21fd0 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70   to update.. * p
21fe0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
21ff0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
22000 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
22010 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
22020 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
22030 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
22040 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
22050 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
22060 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
22070 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
22080 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
22090 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
220a0 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
220b0 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
220c0 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
220d0 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
220e0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
220f0 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a   argument.. *. *
22100 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
22110 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
22120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22130 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
22140 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
22150 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
22160 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
22170 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
22180 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
22190 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
221a0 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
221b0 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
221c0 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
221d0 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
221e0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
221f0 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
22200 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
22210 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54  SERT INTO SELECT
22220 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a   ... */.  char *
22230 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f  zTarget;       /
22240 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
22250 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
22260 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
22270 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
22280 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
22290 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
222a0 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
222b0 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
222c0 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
222d0 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
222e0 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69  PDATE. */.  IdLi
222f0 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20  st *pIdList;    
22300 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
22310 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
22320 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e   TriggerStep *pN
22330 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e  ext;  /* Next in
22340 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a   the link-list *
22350 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
22360 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74  *pLast;  /* Last
22370 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b   element in link
22380 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72  -list. Valid for
22390 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a   1st elem only *
223a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
223b0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
223c0 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
223d0 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
223e0 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
223f0 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
22400 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
22410 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
22420 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
22430 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
22440 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  t..*/.typedef st
22450 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46  ruct DbFixer DbF
22460 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46  ixer;.struct DbF
22470 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  ixer {.  Parse *
22480 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20  pParse;      /* 
22490 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74  The parsing cont
224a0 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73  ext.  Error mess
224b0 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72  ages written her
224c0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
224d0 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69  Schema;    /* Fi
224e0 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20  x items to this 
224f0 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
22500 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20  bVarOnly;       
22510 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72  /* Check for var
22520 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  iable references
22530 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74   only */.  const
22540 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
22550 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
22560 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
22570 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
22580 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
22590 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
225a0 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
225b0 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
225c0 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
225d0 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
225e0 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
225f0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
22600 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
22610 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
22620 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
22630 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
22640 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
22650 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
22660 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
22670 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
22680 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
22690 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
226a0 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
226b0 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a  ruct StrAccum {.
226c0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
226d0 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e         /* Option
226e0 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20  al database for 
226f0 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20  lookaside.  Can 
22700 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61  be NULL */.  cha
22710 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
22720 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
22730 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
22740 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f   */.  u32  nAllo
22750 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d  c;         /* Am
22760 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c  ount of space al
22770 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74  located in zText
22780 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c   */.  u32  mxAll
22790 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  oc;        /* Ma
227a0 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c  ximum allowed al
227b0 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72  location.  0 for
227c0 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65   no malloc usage
227d0 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72   */.  u32  nChar
227e0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
227f0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
22800 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ng so far */.  u
22810 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20  8   accError;   
22820 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f      /* STRACCUM_
22830 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55  NOMEM or STRACCU
22840 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38  M_TOOBIG */.  u8
22850 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20     printfFlags; 
22860 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49     /* SQLITE_PRI
22870 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20  NTF flags below 
22880 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54  */.};.#define ST
22890 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31  RACCUM_NOMEM   1
228a0 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55  .#define STRACCU
228b0 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66  M_TOOBIG  2.#def
228c0 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
228d0 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20  F_INTERNAL 0x01 
228e0 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65   /* Internal-use
228f0 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73  -only converters
22900 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
22910 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
22920 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20  F_SQLFUNC  0x02 
22930 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   /* SQL function
22940 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58   arguments to VX
22950 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e  Printf */.#defin
22960 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
22970 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f  MALLOCED 0x04  /
22980 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20  * True if xText 
22990 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  is allocated spa
229a0 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69  ce */..#define i
229b0 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28  sMalloced(X)  ((
229c0 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73  (X)->printfFlags
229d0 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46   & SQLITE_PRINTF
229e0 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a  _MALLOCED)!=0)..
229f0 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
22a00 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
22a10 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
22a20 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
22a30 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
22a40 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
22a50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
22a60 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
22a70 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
22a80 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
22a90 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
22aa0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
22ab0 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
22ac0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
22ad0 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
22ae0 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
22af0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
22b00 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
22b10 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
22b20 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
22b30 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
22b40 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
22b50 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
22b60 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
22b70 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
22b80 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a  */.} InitData;..
22b90 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20  /*.** Structure 
22ba0 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61  containing globa
22bb0 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  l configuration 
22bc0 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c  data for the SQL
22bd0 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a  ite library..**.
22be0 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
22bf0 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  e also contains 
22c00 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72  some state infor
22c10 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
22c20 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
22c30 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74  {.  int bMemstat
22c40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22c50 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
22c60 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73   enable memory s
22c70 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62  tatus */.  int b
22c80 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20  CoreMutex;      
22c90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22ca0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63  True to enable c
22cb0 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ore mutexing */.
22cc0 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78    int bFullMutex
22cd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22ce0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
22cf0 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78  nable full mutex
22d00 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70  ing */.  int bOp
22d10 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20  enUri;          
22d20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
22d30 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20  ue to interpret 
22d40 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49  filenames as URI
22d50 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43  s */.  int bUseC
22d60 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  is;             
22d70 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
22d80 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73  covering indices
22d90 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20   for full-scans 
22da0 2a 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d  */.  int bSmallM
22db0 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
22dc0 20 20 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20         /* Avoid 
22dd0 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  large memory all
22de0 6f 63 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65  ocations if true
22df0 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c   */.  int mxStrl
22e00 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
22e10 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
22e20 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  um string length
22e30 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43   */.  int neverC
22e40 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20  orrupt;         
22e50 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
22e60 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65  ase is always we
22e70 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69  ll-formed */.  i
22e80 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
22eb0 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
22ec0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
22ed0 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
22ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
22ef0 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
22f00 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
22f10 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20  int nStmtSpill; 
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f30 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61    /* Stmt-journa
22f40 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20  l spill-to-disk 
22f50 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73  threshold */.  s
22f60 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
22f70 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
22f80 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
22f90 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
22fa0 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
22fb0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
22fc0 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
22fd0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
22fe0 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
22ff0 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
23000 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
23010 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
23020 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
23030 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
23040 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23060 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
23070 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
23080 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
23090 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
230a0 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
230b0 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
230c0 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
230d0 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
230e0 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
230f0 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c  s sizes */.  sql
23100 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61  ite3_int64 szMma
23110 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
23120 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70  * mmap() space p
23130 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a  er open file */.
23140 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
23150 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  mxMmap;         
23160 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76      /* Maximum v
23170 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20  alue for szMmap 
23180 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
23190 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
231a0 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
231b0 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
231c0 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
231d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231e0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
231f0 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
23200 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
23210 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
23220 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
23230 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
23240 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
23250 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
23260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23270 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
23280 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
23290 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
232a0 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
232b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
232c0 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
232d0 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
232e0 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20  */.  u32 szPma; 
232f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23300 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
23310 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a  m Sorter PMA siz
23320 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62  e */.  /* The ab
23330 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69  ove might be ini
23340 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d  tialized to non-
23350 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  zero.  The follo
23360 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77  wing need to alw
23370 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  ays.  ** initial
23380 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65  ly be zero, howe
23390 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ver. */.  int is
233a0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
233b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
233c0 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
233d0 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
233e0 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
233f0 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23410 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
23420 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
23430 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
23440 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20  sMutexInit;     
23450 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23460 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78  True after mutex
23470 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
23480 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61  ed */.  int isMa
23490 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20  llocInit;       
234a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
234b0 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
234c0 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
234d0 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49  .  int isPCacheI
234e0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
234f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
23500 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
23510 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
23520 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b  t nRefInitMutex;
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23540 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
23550 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78  rs of pInitMutex
23560 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
23570 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
23580 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
23590 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
235a0 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
235b0 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
235c0 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
235d0 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
235e0 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
235f0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
23600 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
23610 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
23620 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
23630 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  Log() */.#ifdef 
23640 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51  SQLITE_ENABLE_SQ
23650 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71  LLOG.  void(*xSq
23660 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69  llog)(void*,sqli
23670 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
23680 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
23690 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64  pSqllogArg;.#end
236a0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
236b0 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20  _VDBE_COVERAGE. 
236c0 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
236d0 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e  g callback (if n
236e0 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f  ot NULL) is invo
236f0 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42  ked on every VDB
23700 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70  E branch.  ** op
23710 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68  eration.  Set th
23720 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  e callback using
23730 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
23740 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a  _VDBE_COVERAGE..
23750 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56    */.  void (*xV
23760 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a  dbeBranch)(void*
23770 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38  ,int iSrcLine,u8
23780 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
23790 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
237a0 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
237b0 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
237c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
237e0 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
237f0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
23800 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
23810 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c    int (*xTestCal
23820 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20  lback)(int);    
23830 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62      /* Invoked b
23840 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  y sqlite3FaultSi
23850 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  m() */.#endif.  
23860 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61  int bLocaltimeFa
23870 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ult;            
23880 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69    /* True to fai
23890 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61  l localtime() ca
238a0 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e  lls */.  int iOn
238b0 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64  ceResetThreshold
238c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
238d0 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f  en to reset OP_O
238e0 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  nce counters */.
238f0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
23900 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
23910 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
23920 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
23930 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
23940 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
23950 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
23960 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
23970 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
23980 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
23990 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
239a0 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
239b0 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
239c0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
239d0 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
239e0 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
239f0 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
23a00 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
23a10 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
23a20 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
23a30 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
23a40 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
23a50 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
23a60 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
23a70 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
23a80 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
23a90 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
23aa0 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
23ab0 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
23ac0 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
23ad0 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
23ae0 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
23af0 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
23b00 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
23b10 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
23b20 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
23b30 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
23b40 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
23b50 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
23b60 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
23b70 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
23b80 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
23b90 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
23ba0 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
23bb0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
23bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
23be0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
23bf0 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72  */.  int (*xExpr
23c00 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
23c10 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f  *, Expr*);     /
23c20 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65  * Callback for e
23c30 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
23c40 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  int (*xSelectCal
23c50 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53  lback)(Walker*,S
23c60 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c  elect*);  /* Cal
23c70 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
23c80 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  s */.  void (*xS
23c90 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28  electCallback2)(
23ca0 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
23cb0 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62  ;/* Second callb
23cc0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
23cd0 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
23ce0 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23d00 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
23d10 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65  ueries */.  u8 e
23d20 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c        /* A small
23d50 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65   processing code
23d60 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
23d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d90 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
23da0 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
23db0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
23dc0 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23de0 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
23df0 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  .    int n;     
23e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23e20 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  * A counter */. 
23e30 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20     int iCur;    
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23e60 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  A cursor number 
23e70 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
23e80 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ea0 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
23eb0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
23ec0 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
23ed0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
23ee0 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
23ef0 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
23f00 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75  /.    struct CCu
23f10 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74  rHint *pCCurHint
23f20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23f30 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43  /* Used by codeC
23f40 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20  ursorHint() */. 
23f50 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20     int *aiCol;  
23f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23f80 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20  array of column 
23f90 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73  indexes */.    s
23fa0 74 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a  truct IdxCover *
23fb0 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20  pIdxCover;      
23fc0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63           /* Chec
23fd0 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65  k for index cove
23fe0 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  rage */.    stru
23ff0 63 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20  ct IdxExprTrans 
24000 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20  *pIdxTrans;     
24010 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
24020 20 69 6e 64 65 78 65 64 20 65 78 70 72 20 74 6f   indexed expr to
24030 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45   column */.    E
24040 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
24050 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
24060 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55           /* GROU
24070 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  P BY clause */. 
24080 20 20 20 73 74 72 75 63 74 20 48 61 76 69 6e 67     struct Having
24090 54 6f 57 68 65 72 65 43 74 78 20 2a 70 48 61 76  ToWhereCtx *pHav
240a0 69 6e 67 43 74 78 3b 20 20 20 20 20 20 2f 2a 20  ingCtx;      /* 
240b0 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20  HAVING to WHERE 
240c0 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20  clause ctx */.  
240d0 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
240e0 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
240f0 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
24100 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
24110 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
24120 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
24130 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
24140 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
24150 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
24160 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
24170 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
24180 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
24190 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
241a0 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
241b0 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
241c0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
241d0 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70  ite3ExprWalkNoop
241e0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
241f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
24200 65 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  ectWalkNoop(Walk
24210 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
24220 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
24230 57 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a  WalkFail(Walker*
24240 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64  , Select*);.#ifd
24250 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
24260 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
24270 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61  ctWalkAssert2(Wa
24280 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
24290 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
242a0 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
242b0 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77  the parse-tree w
242c0 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65  alking primitive
242d0 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63  s and their.** c
242e0 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65  allbacks..*/.#de
242f0 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75  fine WRC_Continu
24300 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74  e    0   /* Cont
24310 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63  inue down into c
24320 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69  hildren */.#defi
24330 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20  ne WRC_Prune    
24340 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63     1   /* Omit c
24350 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74  hildren but cont
24360 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62  inue walking sib
24370 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lings */.#define
24380 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20   WRC_Abort      
24390 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20   2   /* Abandon 
243a0 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f  the tree walk */
243b0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
243c0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
243d0 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73  cture represents
243e0 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72   a set of one or
243f0 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63   more CTEs.** (c
24400 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
24410 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64  essions) created
24420 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54   by a single WIT
24430 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  H clause..*/.str
24440 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74  uct With {.  int
24450 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20   nCte;          
24460 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24470 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69  Number of CTEs i
24480 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
24490 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75  e */.  With *pOu
244a0 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ter;            
244b0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69         /* Contai
244c0 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65  ning WITH clause
244d0 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73  , or NULL */.  s
244e0 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20  truct Cte {     
244f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24500 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69  * For each CTE i
24510 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
24520 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61  e.... */.    cha
24530 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24550 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45  Name of this CTE
24560 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
24570 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20   *pCols;        
24580 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
24590 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75  of explicit colu
245a0 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c  mn names, or NUL
245b0 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  L */.    Select 
245c0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20  *pSelect;       
245d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
245e0 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68  definition of th
245f0 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f  is CTE */.    co
24600 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72  nst char *zCteEr
24610 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
24620 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66   Error message f
24630 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65  or circular refe
24640 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b  rences */.  } a[
24650 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53  1];.};..#ifdef S
24660 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
24670 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
24680 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62   the TreeView ob
24690 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72  ject is used for
246a0 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f   printing the co
246b0 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61  ntent of.** data
246c0 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73   structures on s
246d0 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
246e0 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65  f() using a tree
246f0 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73  -like view..*/.s
24700 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b  truct TreeView {
24710 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20  .  int iLevel;  
24720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
24730 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65  ich level of the
24740 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20   tree we are on 
24750 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31  */.  u8  bLine[1
24760 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  00];         /* 
24770 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e  Draw vertical in
24780 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69   column i if bLi
24790 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f  ne[i] is true */
247a0 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .};.#endif /* SQ
247b0 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f  LITE_DEBUG */../
247c0 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49  *.** Assuming zI
247d0 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  n points to the 
247e0 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20  first byte of a 
247f0 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c  UTF-8 character,
24800 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20  .** advance zIn 
24810 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
24820 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68  first byte of th
24830 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61  e next UTF-8 cha
24840 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  racter..*/.#defi
24850 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55  ne SQLITE_SKIP_U
24860 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20  TF8(zIn) {      
24870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24880 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e    \.  if( (*(zIn
24890 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20  ++))>=0xc0 ){   
248a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248b0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
248c0 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20   while( (*zIn & 
248d0 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a  0xc0)==0x80 ){ z
248e0 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20  In++; }         
248f0 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20      \.  }       
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24920 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d               \.}
24930 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
24940 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73  TE_*_BKPT macros
24950 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73   are substitutes
24960 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63   for the error c
24970 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65  odes with.** the
24980 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77   same name but w
24990 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54  ithout the _BKPT
249a0 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20   suffix.  These 
249b0 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a  macros invoke.**
249c0 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72   routines that r
249d0 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e  eport the line-n
249e0 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74  umber on which t
249f0 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61  he error origina
24a00 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c  ted.** using sql
24a10 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65  ite3_log().  The
24a20 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70   routines also p
24a30 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69  rovide a conveni
24a40 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20  ent place.** to 
24a50 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62  set a debugger b
24a60 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e  reakpoint..*/.in
24a70 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
24a80 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
24a90 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
24aa0 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
24ab0 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
24ac0 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20  r(int);.#define 
24ad0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
24ae0 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75  KPT sqlite3Corru
24af0 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  ptError(__LINE__
24b00 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
24b10 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c  _MISUSE_BKPT sql
24b20 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
24b30 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
24b40 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  e SQLITE_CANTOPE
24b50 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61  N_BKPT sqlite3Ca
24b60 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49  ntopenError(__LI
24b70 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c  NE__).#ifdef SQL
24b80 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
24b90 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f  sqlite3NomemErro
24ba0 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  r(int);.  int sq
24bb0 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
24bc0 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74  rror(int);.  int
24bd0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
24be0 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e  gnoError(int,Pgn
24bf0 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  o);.# define SQL
24c00 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73  ITE_NOMEM_BKPT s
24c10 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
24c20 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66  (__LINE__).# def
24c30 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ine SQLITE_IOERR
24c40 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69  _NOMEM_BKPT sqli
24c50 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
24c60 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64  or(__LINE__).# d
24c70 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
24c80 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c  RUPT_PGNO(P) sql
24c90 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45  ite3CorruptPgnoE
24ca0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50  rror(__LINE__,(P
24cb0 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  )).#else.# defin
24cc0 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
24cd0 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  KPT SQLITE_NOMEM
24ce0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
24cf0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
24d00 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  T SQLITE_IOERR_N
24d10 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
24d20 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e  LITE_CORRUPT_PGN
24d30 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72  O(P) sqlite3Corr
24d40 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
24d50 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  _).#endif../*.**
24d60 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62   FTS3 and FTS4 b
24d70 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74  oth require virt
24d80 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72  ual table suppor
24d90 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  t.*/.#if defined
24da0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
24db0 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64  TUALTABLE).# und
24dc0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
24dd0 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51  _FTS3.# undef SQ
24de0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
24df0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
24e00 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
24e10 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
24e20 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
24e30 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
24e40 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
24e50 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
24e60 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
24e70 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a  on we also call.
24e80 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
24e90 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
24ea0 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
24eb0 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f  lias for SQLITE_
24ec0 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
24ed0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
24ee0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
24ef0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24f00 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
24f10 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
24f20 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65  ENABLE_FTS3 1.#e
24f30 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
24f40 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
24f50 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
24f60 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
24f70 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
24f80 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
24f90 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
24fa0 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
24fb0 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
24fc0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
24fd0 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
24fe0 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
24ff0 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
25000 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
25010 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
25020 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
25030 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
25040 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
25050 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
25060 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
25070 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
25080 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
25090 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
250a0 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
250b0 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
250c0 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
250d0 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
250e0 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
250f0 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
25100 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
25110 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
25120 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
25130 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
25140 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
25150 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
25160 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
25170 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
25180 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
25190 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
251a0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
251b0 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
251c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
251d0 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
251e0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
251f0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25200 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
25210 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
25220 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
25230 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
25240 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
25250 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25260 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
25270 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
25280 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25290 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
252a0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
252b0 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
252c0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
252d0 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
252e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
252f0 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
25300 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
25310 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
25320 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20  )(x)]).# define 
25330 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
25340 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
25350 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
25360 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23  har)(x)]&0x80).#
25370 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
25380 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
25390 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
253a0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
253b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
253c0 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
253d0 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
253e0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
253f0 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
25400 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
25410 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
25420 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25430 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
25440 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
25450 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
25460 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
25470 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
25480 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25490 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
254a0 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
254b0 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
254c0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
254d0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
254e0 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
254f0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
25500 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
25510 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
25520 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29    ((x)=='"'||(x)
25530 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27  =='\''||(x)=='['
25540 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64  ||(x)=='`').#end
25550 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
25560 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
25570 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73  TION_DIAGS.int s
25580 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75  qlite3IsIdChar(u
25590 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  8);.#endif../*.*
255a0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
255b0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
255c0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
255d0 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a  ICmp(const char*
255e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
255f0 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
25600 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
25610 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f  .char *sqlite3Co
25620 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a  lumnType(Column*
25630 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65  ,char*);.#define
25640 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
25650 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
25660 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
25670 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
25680 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
25690 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
256a0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
256b0 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
256c0 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75  ite3MallocZero(u
256d0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
256e0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
256f0 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
25700 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
25710 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
25720 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
25730 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
25740 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  NN(sqlite3*, u64
25750 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25760 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
25770 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
25780 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
25790 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
257a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34  const char*, u64
257b0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
257c0 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75  Realloc(void*, u
257d0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
257e0 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
257f0 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
25800 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
25810 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
25820 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
25830 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
25840 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
25850 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
25860 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
25870 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76  eeNN(sqlite3*, v
25880 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
25890 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
258a0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
258b0 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
258c0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
258d0 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
258e0 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
258f0 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
25900 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
25910 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
25920 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64  ult(void);.#ifnd
25930 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
25940 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
25950 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f  3BenignMallocHoo
25960 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ks(void (*)(void
25970 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ), void (*)(void
25980 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  ));.#endif.int s
25990 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
259a0 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
259b0 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
259c0 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
259d0 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
259e0 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
259f0 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
25a00 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
25a10 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
25a20 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
25a30 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
25a40 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
25a50 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
25a60 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
25a70 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
25a80 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
25a90 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
25aa0 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
25ab0 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
25ac0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
25ad0 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
25ae0 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
25af0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
25b00 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
25b10 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
25b20 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
25b30 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
25b40 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
25b50 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
25b60 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
25b70 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
25b80 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
25b90 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  D,P).#else.# def
25ba0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
25bb0 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
25bc0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
25bd0 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  aw(D,N).# define
25be0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
25bf0 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c  ocZero(D,N)  sql
25c00 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
25c10 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
25c20 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
25c30 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74  D,P)       sqlit
25c40 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65  e3DbFree(D,P).#e
25c50 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20  ndif../* Do not 
25c60 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59  allow both MEMSY
25c70 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74  S5 and MEMSYS3 t
25c80 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67  o be defined tog
25c90 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a  ether.  If they.
25ca0 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20  ** are, disable 
25cb0 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65  MEMSYS3.*/.#ifde
25cc0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
25cd0 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
25ce0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
25cf0 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
25d00 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
25d10 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
25d20 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64  BLE_MEMSYS3.#end
25d30 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
25d40 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
25d50 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
25d60 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
25d70 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28  e3MemGetMemsys3(
25d80 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
25d90 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
25da0 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
25db0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
25dc0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
25dd0 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
25de0 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
25df0 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
25e00 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
25e10 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
25e20 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
25e30 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
25e40 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
25e50 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
25e60 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
25e70 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
25e80 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
25e90 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
25ea0 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  OMIT) && !define
25eb0 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e  d(SQLITE_MUTEX_N
25ec0 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  OOP).  void sqli
25ed0 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72  te3MemoryBarrier
25ee0 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20  (void);.#else.# 
25ef0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
25f00 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65  moryBarrier().#e
25f10 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e  ndif..sqlite3_in
25f20 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75  t64 sqlite3Statu
25f30 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
25f40 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55  d sqlite3StatusU
25f50 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  p(int, int);.voi
25f60 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44  d sqlite3StatusD
25f70 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  own(int, int);.v
25f80 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
25f90 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20  sHighwater(int, 
25fa0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
25fb0 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28 73  3LookasideUsed(s
25fc0 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a  qlite3*,int*);..
25fd0 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74  /* Access to mut
25fe0 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c  exes used by sql
25ff0 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f  ite3_status() */
26000 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
26010 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75  sqlite3Pcache1Mu
26020 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74  tex(void);.sqlit
26030 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
26040 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69  3MallocMutex(voi
26050 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  d);..#ifndef SQL
26060 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
26070 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71  G_POINT.  int sq
26080 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c  lite3IsNaN(doubl
26090 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
260a0 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ne sqlite3IsNaN(
260b0 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  X)  0.#endif../*
260c0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
260d0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
260e0 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
260f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
26100 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69  ut SQL.** functi
26110 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68  ons arguments th
26120 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d  at are the param
26130 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69  eters to the pri
26140 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  ntf() function..
26150 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66  */.struct Printf
26160 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e  Arguments {.  in
26170 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  t nArg;         
26180 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20         /* Total 
26190 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
261a0 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73  nts */.  int nUs
261b0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
261c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
261d0 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f  rguments used so
261e0 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65   far */.  sqlite
261f0 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b  3_value **apArg;
26200 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65     /* The argume
26210 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a  nt values */.};.
26220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
26230 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
26240 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61   const char*, va
26250 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c  _list);.void sql
26260 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41  ite3XPrintf(StrA
26270 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ccum*, const cha
26280 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
26290 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
262a0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
262b0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
262c0 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
262d0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
262e0 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
262f0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
26300 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
26310 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
26320 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f  E_OS_TRACE).  vo
26330 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
26340 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
26350 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
26360 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
26370 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20  TE_TEST).  void 
26380 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74  *sqlite3TestText
26390 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72  ToPtr(const char
263a0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
263b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
263c0 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
263d0 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
263e0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
263f0 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  t Expr*, u8);.  
26400 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
26410 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74  ViewBareExprList
26420 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
26430 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  t ExprList*, con
26440 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
26450 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
26460 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  wExprList(TreeVi
26470 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
26480 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20  ist*, u8, const 
26490 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
264a0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65  qlite3TreeViewSe
264b0 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20  lect(TreeView*, 
264c0 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75  const Select*, u
264d0 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
264e0 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54  e3TreeViewWith(T
264f0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
26500 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64  With*, u8);.#end
26510 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  if...void sqlite
26520 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20  3SetString(char 
26530 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f  **, sqlite3*, co
26540 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
26550 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
26560 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
26570 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
26580 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
26590 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
265a0 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f  ite3TokenInit(To
265b0 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74  ken*,char*);.int
265c0 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43   sqlite3KeywordC
265d0 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ode(const unsign
265e0 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  ed char*, int);.
265f0 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61  int sqlite3RunPa
26600 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rser(Parse*, con
26610 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a  st char*, char *
26620 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26630 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72  FinishCoding(Par
26640 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
26650 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73  3GetTempReg(Pars
26660 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
26670 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28  3ReleaseTempReg(
26680 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
26690 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
266a0 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  ange(Parse*,int)
266b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
266c0 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50  leaseTempRange(P
266d0 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
266e0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61  void sqlite3Clea
266f0 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61  rTempRegCache(Pa
26700 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  rse*);.#ifdef SQ
26710 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
26720 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52  qlite3NoTempsInR
26730 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
26740 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70  int);.#endif.Exp
26750 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
26760 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
26770 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
26780 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
26790 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
267a0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
267b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
267c0 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
267d0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
267e0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
267f0 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
26800 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
26810 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
26820 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64   sqlite3PExprAdd
26830 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  Select(Parse*, E
26840 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xpr*, Select*);.
26850 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
26860 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
26870 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
26880 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
26890 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
268a0 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
268b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
268c0 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
268d0 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
268e0 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
268f0 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
26900 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
26910 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
26920 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
26930 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
26940 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73  ,Expr*);.ExprLis
26950 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
26960 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50  stAppendVector(P
26970 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
26980 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  IdList*,Expr*);.
26990 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
269a0 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72  ListSetSortOrder
269b0 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  (ExprList*,int);
269c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
269d0 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
269e0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
269f0 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
26a00 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
26a10 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
26a20 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
26a30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26a40 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
26a50 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
26a60 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  t*);.u32 sqlite3
26a70 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f  ExprListFlags(co
26a80 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nst ExprList*);.
26a90 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28  int sqlite3Init(
26aa0 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a  sqlite3*, char**
26ab0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
26ac0 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a  itCallback(void*
26ad0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63  , int, char**, c
26ae0 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
26af0 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65  ite3Pragma(Parse
26b00 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
26b10 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66  Token*,int);.#if
26b20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26b30 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f  _VIRTUALTABLE.Mo
26b40 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61  dule *sqlite3Pra
26b50 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28  gmaVtabRegister(
26b60 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
26b70 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e  har *zName);.#en
26b80 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
26b90 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
26ba0 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
26bb0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
26bc0 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
26bd0 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
26be0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
26bf0 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
26c00 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
26c10 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
26c20 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
26c30 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
26c40 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c  sqlite3DeleteCol
26c50 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33  umnNames(sqlite3
26c60 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  *,Table*);.int s
26c70 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f  qlite3ColumnsFro
26c80 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
26c90 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c  ,ExprList*,i16*,
26ca0 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20  Column**);.void 
26cb0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64  sqlite3SelectAdd
26cc0 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c  ColumnTypeAndCol
26cd0 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  lation(Parse*,Ta
26ce0 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54  ble*,Select*);.T
26cf0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
26d00 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
26d10 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  arse*,Select*);.
26d20 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
26d30 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
26d40 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78  e *, int);.Index
26d50 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79   *sqlite3Primary
26d60 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29  KeyIndex(Table*)
26d70 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c  ;.i16 sqlite3Col
26d80 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78  umnOfIndex(Index
26d90 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71  *, i16);.void sq
26da0 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
26db0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
26dc0 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
26dd0 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54  ,int);.#if SQLIT
26de0 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
26df0 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73  COLUMNS.  void s
26e00 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
26e10 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
26e20 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  able*, Column*);
26e30 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
26e40 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
26e50 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
26e60 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  T,C) /* no-op */
26e70 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
26e80 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
26e90 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
26ea0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26eb0 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73  3AddNotNull(Pars
26ec0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
26ed0 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79  qlite3AddPrimary
26ee0 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
26ef0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
26f00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26f10 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74  te3AddCheckConst
26f20 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78  raint(Parse*, Ex
26f30 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
26f40 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
26f50 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61  e(Parse*,ExprSpa
26f60 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26f70 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
26f80 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
26f90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
26fa0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
26fb0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
26fc0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
26fd0 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
26fe0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
26ff0 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
27000 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
27010 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
27020 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
27030 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
27040 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
27050 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
27060 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66   char*);..#ifdef
27070 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
27080 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  LE.# define sqli
27090 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53  te3FaultSim(X) S
270a0 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20  QLITE_OK.#else. 
270b0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c   int sqlite3Faul
270c0 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69  tSim(int);.#endi
270d0 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74  f..Bitvec *sqlit
270e0 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75  e3BitvecCreate(u
270f0 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
27100 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65  BitvecTest(Bitve
27110 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
27120 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e  lite3BitvecTestN
27130 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20  otNull(Bitvec*, 
27140 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
27150 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65  3BitvecSet(Bitve
27160 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  c*, u32);.void s
27170 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61  qlite3BitvecClea
27180 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20  r(Bitvec*, u32, 
27190 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
271a0 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f  ite3BitvecDestro
271b0 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20  y(Bitvec*);.u32 
271c0 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a  sqlite3BitvecSiz
271d0 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e  e(Bitvec*);.#ifn
271e0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
271f0 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65  TABLE.int sqlite
27200 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
27210 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65  st(int,int*);.#e
27220 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71  ndif..RowSet *sq
27230 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
27240 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
27250 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
27260 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
27270 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
27280 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
27290 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
272a0 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
272b0 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
272c0 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
272d0 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
272e0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
272f0 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
27300 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
27310 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
27320 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
27330 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
27340 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
27350 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
27360 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
27370 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
27380 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
27390 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
273a0 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
273b0 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
273c0 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
273d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
273e0 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
273f0 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23  A,B) 0.#endif..#
27400 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
27410 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20  TACHED>30.  int 
27420 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
27430 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23  Zero(yDbMask);.#
27440 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
27450 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  e3DropTable(Pars
27460 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
27470 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27480 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62  lite3CodeDropTab
27490 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  le(Parse*, Table
274a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
274b0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
274c0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
274d0 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Table*);.#ifndef
274e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
274f0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
27500 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
27510 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
27520 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
27530 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
27540 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
27550 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
27560 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27570 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
27580 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
27590 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
275a0 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
275b0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
275c0 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
275d0 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
275e0 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  IdList*, int);.v
275f0 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
27600 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
27610 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
27620 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20  *,int*);.IdList 
27630 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70  *sqlite3IdListAp
27640 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49  pend(sqlite3*, I
27650 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
27660 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
27670 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
27680 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
27690 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
276a0 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c  cListEnlarge(sql
276b0 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
276c0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c   int, int);.SrcL
276d0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
276e0 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
276f0 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  3*, SrcList*, To
27700 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53  ken*, Token*);.S
27710 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
27720 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d  rcListAppendFrom
27730 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  Term(Parse*, Src
27740 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
27750 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
27760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b               Tok
27780 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  en*, Select*, Ex
27790 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  pr*, IdList*);.v
277a0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
277b0 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73  stIndexedBy(Pars
277c0 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  e *, SrcList *, 
277d0 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
277e0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e  qlite3SrcListFun
277f0 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72  cArgs(Parse*, Sr
27800 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
27810 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
27820 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50  ndexedByLookup(P
27830 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53  arse *, struct S
27840 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
27850 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
27860 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
27870 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  (SrcList*);.void
27880 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41   sqlite3SrcListA
27890 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72  ssignCursors(Par
278a0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
278b0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69  void sqlite3IdLi
278c0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
278d0 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
278e0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
278f0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
27900 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65   SrcList*);.Inde
27910 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61  x *sqlite3Alloca
27920 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71  teIndexObject(sq
27930 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63  lite3*,i16,int,c
27940 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
27950 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28  ite3CreateIndex(
27960 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
27970 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ken*,SrcList*,Ex
27980 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65  prList*,int,Toke
27990 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
279a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
279b0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  pr*, int, int, u
279c0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
279d0 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
279e0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
279f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
27a00 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
27a10 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
27a20 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
27a30 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
27a40 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
27a50 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
27a60 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
27a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a80 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
27a90 75 33 32 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u32,Expr*,Expr*)
27aa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
27ab0 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
27ac0 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
27ad0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
27ae0 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
27af0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
27b00 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
27b10 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
27b20 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
27b30 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
27b40 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
27b50 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
27b60 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
27b70 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
27b80 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
27b90 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
27ba0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27bb0 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
27bc0 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
27bd0 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
27be0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
27bf0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
27c00 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
27c10 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
27c20 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
27c30 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
27c40 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
27c50 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
27c60 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
27c70 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
27c80 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
27c90 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
27ca0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
27cb0 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
27cc0 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
27cd0 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
27ce0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f  (WhereInfo*);.Lo
27cf0 67 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72  gEst sqlite3Wher
27d00 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28  eOutputRowCount(
27d10 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
27d20 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
27d30 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66  istinct(WhereInf
27d40 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
27d50 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57  WhereIsOrdered(W
27d60 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
27d70 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65  sqlite3WhereOrde
27d80 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57 68 65  redInnerLoop(Whe
27d90 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
27da0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
27db0 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
27dc0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
27dd0 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
27de0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
27df0 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
27e00 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
27e10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
27e20 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
27e30 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
27e40 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
27e50 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20  OFF      0      
27e60 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50    /* Use of ONEP
27e70 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  ASS not allowed 
27e80 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
27e90 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20  SS_SINGLE   1   
27ea0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
27eb0 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67  valid for a sing
27ec0 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f  le row update */
27ed0 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
27ee0 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20  _MULTI    2     
27ef0 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73     /* ONEPASS is
27f00 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69   valid for multi
27f10 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64  ple rows */.void
27f20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
27f30 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28  LoadIndexColumn(
27f40 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
27f50 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
27f60 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
27f70 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
27f80 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
27f90 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
27fa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27fb0 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f  rCodeGetColumnTo
27fc0 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  Reg(Parse*, Tabl
27fd0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
27fe0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27ff0 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
28000 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
28010 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
28020 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28030 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
28040 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
28050 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
28060 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74  lite3ExprCacheSt
28070 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ore(Parse*, int,
28080 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28090 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
280a0 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76  ePush(Parse*);.v
280b0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
280c0 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b  achePop(Parse*);
280d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
280e0 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
280f0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
28100 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28110 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
28120 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28130 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
28140 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
28150 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28160 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28  sqlite3ExprCode(
28170 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28180 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28190 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61  3ExprCodeCopy(Pa
281a0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
281b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
281c0 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c  xprCodeFactorabl
281d0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
281e0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
281f0 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74  e3ExprCodeAtInit
28200 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
28210 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28220 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61  3ExprCodeTemp(Pa
28230 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
28240 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
28250 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61  xprCodeTarget(Pa
28260 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
28270 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28280 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28  xprCodeAndCache(
28290 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
282a0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
282b0 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74  ExprCodeExprList
282c0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
282d0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  t*, int, int, u8
282e0 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
282f0 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20  E_ECEL_DUP      
28300 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e  0x01  /* Deep, n
28310 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65  ot shallow copie
28320 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
28330 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20  ITE_ECEL_FACTOR 
28340 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f    0x02  /* Facto
28350 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74  r out constant t
28360 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
28370 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20  SQLITE_ECEL_REF 
28380 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73       0x04  /* Us
28390 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69  e ExprList.u.x.i
283a0 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64  OrderByCol */.#d
283b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
283c0 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20  L_OMITREF  0x08 
283d0 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72   /* Omit if Expr
283e0 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42  List.u.x.iOrderB
283f0 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  yCol */.void sql
28400 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
28410 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
28420 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
28430 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
28440 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
28450 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28460 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
28470 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78  seDup(Parse*, Ex
28480 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
28490 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
284a0 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
284b0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
284c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
284d0 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20  ine LOCATE_VIEW 
284e0 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20     0x01.#define 
284f0 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30  LOCATE_NOERR   0
28500 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  x02.Table *sqlit
28510 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
28520 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63  rse*,u32 flags,c
28530 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
28540 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
28550 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
28560 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75  bleItem(Parse*,u
28570 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20  32 flags,struct 
28580 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
28590 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46  .Index *sqlite3F
285a0 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33  indIndex(sqlite3
285b0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
285c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
285d0 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
285e0 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  ndDeleteTable(sq
285f0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
28600 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
28610 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
28620 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65  leteIndex(sqlite
28630 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
28640 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28650 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54  3Vacuum(Parse*,T
28660 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
28670 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
28680 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69  r**, sqlite3*, i
28690 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
286a0 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
286b0 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
286c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
286d0 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a  prCompare(Parse*
286e0 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  ,Expr*, Expr*, i
286f0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28700 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28  ExprCompareSkip(
28710 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
28720 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
28730 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
28740 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
28750 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
28760 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
28770 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78 70  sExpr(Parse*,Exp
28780 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
28790 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
287a0 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
287b0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
287c0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
287d0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
287e0 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
287f0 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
28800 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28810 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45  CoveredByIndex(E
28820 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  xpr*, int iCur, 
28830 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e  Index *pIdx);.in
28840 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
28850 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
28860 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
28870 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
28880 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  dbe(Parse*);.#if
28890 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
288a0 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
288b0 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
288c0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
288d0 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
288e0 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64  tate(void);.#end
288f0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
28900 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
28910 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
28920 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
28930 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69  Schema(Parse*, i
28940 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28950 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64  3CodeVerifyNamed
28960 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63  Schema(Parse*, c
28970 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b  onst char *zDb);
28980 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
28990 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  inTransaction(Pa
289a0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
289b0 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73   sqlite3EndTrans
289c0 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e  action(Parse*,in
289d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
289e0 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
289f0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
28a00 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
28a10 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
28a20 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
28a30 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
28a40 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
28a50 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
28a60 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
28a70 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
28a80 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
28a90 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
28aa0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28ab0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
28ac0 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38  nction(Expr*, u8
28ad0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28ae0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72  prIsConstantOrGr
28af0 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 45 78  oupBy(Parse*, Ex
28b00 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  pr*, ExprList*);
28b10 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28b20 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28  IsTableConstant(
28b30 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64  Expr*,int);.#ifd
28b40 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28b50 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e  _CURSOR_HINTS.in
28b60 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e  t sqlite3ExprCon
28b70 74 61 69 6e 73 53 75 62 71 75 65 72 79 28 45 78  tainsSubquery(Ex
28b80 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  pr*);.#endif.int
28b90 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e   sqlite3ExprIsIn
28ba0 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74  teger(Expr*, int
28bb0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
28bc0 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e  xprCanBeNull(con
28bd0 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  st Expr*);.int s
28be0 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
28bf0 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
28c00 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
28c10 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
28c20 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
28c30 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28c40 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65  3GenerateRowDele
28c50 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54  te(.    Parse*,T
28c60 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69  able*,Trigger*,i
28c70 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75  nt,int,int,i16,u
28c80 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f  8,u8,u8,int);.vo
28c90 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
28ca0 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65  teRowIndexDelete
28cb0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
28cc0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
28cd0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28ce0 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b  e3GenerateIndexK
28cf0 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ey(Parse*, Index
28d00 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
28d10 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e  , int*,Index*,in
28d20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28d30 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61  ResolvePartIdxLa
28d40 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  bel(Parse*,int);
28d50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
28d60 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
28d70 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
28d80 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  le*,int*,int,int
28d90 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
28da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
28dc0 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  8,u8,int,int*,in
28dd0 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  t*);.#ifdef SQLI
28de0 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54  TE_ENABLE_NULL_T
28df0 52 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  RIM.  void sqlit
28e00 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50  e3SetMakeRecordP
28e10 35 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b  5(Vdbe*,Table*);
28e20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28e30 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65  sqlite3SetMakeRe
28e40 63 6f 72 64 50 35 28 41 2c 42 29 0a 23 65 6e 64  cordP5(A,B).#end
28e50 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  if.void sqlite3C
28e60 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e  ompleteInsertion
28e70 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
28e80 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c  nt,int,int,int*,
28e90 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e  int,int,int);.in
28ea0 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  t sqlite3OpenTab
28eb0 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72  leAndIndices(Par
28ec0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
28ed0 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20  , u8, int, u8*, 
28ee0 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69  int*, int*);.voi
28ef0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72  d sqlite3BeginWr
28f00 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72  iteOperation(Par
28f10 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
28f20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74  void sqlite3Mult
28f30 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a  iWrite(Parse*);.
28f40 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41  void sqlite3MayA
28f50 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  bort(Parse*);.vo
28f60 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f  id sqlite3HaltCo
28f70 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
28f80 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a   int, int, char*
28f90 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20  , i8, u8);.void 
28fa0 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e  sqlite3UniqueCon
28fb0 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
28fc0 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  int, Index*);.vo
28fd0 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43  id sqlite3RowidC
28fe0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
28ff0 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a  , int, Table*);.
29000 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
29010 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  rDup(sqlite3*,Ex
29020 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69  pr*,int);.ExprLi
29030 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
29040 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
29050 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
29060 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
29070 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74  SrcListDup(sqlit
29080 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74  e3*,SrcList*,int
29090 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
290a0 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69  e3IdListDup(sqli
290b0 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53  te3*,IdList*);.S
290c0 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
290d0 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a  lectDup(sqlite3*
290e0 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23  ,Select*,int);.#
290f0 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
29100 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69  NABLED.void sqli
29110 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65  te3SelectSetName
29120 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63  (Select*,const c
29130 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
29140 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
29150 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a  ectSetName(A,B).
29160 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
29170 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e  te3InsertBuiltin
29180 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69  Funcs(FuncDef*,i
29190 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  nt);.FuncDef *sq
291a0 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
291b0 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
291c0 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38   char*,int,u8,u8
291d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
291e0 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
291f0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
29200 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
29210 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
29220 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
29230 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
29240 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69  PerConnectionBui
29250 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71  ltinFunctions(sq
29260 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
29270 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
29280 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
29290 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
292a0 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
292b0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
292c0 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
292d0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
292e0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
292f0 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
29300 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
29310 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
29320 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
29330 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
29340 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
29350 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
29360 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29370 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
29380 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
29390 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
293a0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
293b0 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
293c0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
293d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293e0 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
293f0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29400 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
29410 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
29420 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
29430 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
29440 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
29450 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
29460 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
29470 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
29480 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
29490 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
294a0 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
294b0 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
294c0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
294d0 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
294e0 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
294f0 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
29500 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
29510 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
29520 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
29530 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
29540 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
29550 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
29560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29570 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
29580 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
29590 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
295a0 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
295b0 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
295c0 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
295d0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
295e0 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
295f0 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
29600 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
29610 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
29620 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
29630 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
29640 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
29650 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
29660 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
29670 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
29680 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
29690 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
296a0 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
296b0 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
296c0 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
296d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
296e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296f0 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a           Select*
29700 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ,u8);.  TriggerS
29710 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
29720 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71  gerUpdateStep(sq
29730 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  lite3*,Token*,Ex
29740 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
29750 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
29760 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
29770 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c  erDeleteStep(sql
29780 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  ite3*,Token*, Ex
29790 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
297a0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
297b0 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
297c0 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
297d0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
297e0 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
297f0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
29800 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
29810 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
29820 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
29830 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
29840 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
29850 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
29860 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
29870 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
29880 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
29890 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66  vel : (p)).# def
298a0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
298b0 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
298c0 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c  Toplevel==0).#el
298d0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
298e0 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
298f0 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20  (B,C,D,E,F) 0.# 
29900 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65  define sqlite3De
29910 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29  leteTrigger(A,B)
29920 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29930 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
29940 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
29950 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
29960 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
29970 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
29980 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
29990 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
299a0 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71  H,I).# define sq
299b0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
299c0 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c  gerDirect(A,B,C,
299d0 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20  D,E,F).# define 
299e0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
299f0 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66  st(X, Y) 0.# def
29a00 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
29a10 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20  Toplevel(p) p.# 
29a20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
29a30 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20  Toplevel(p) 1.# 
29a40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
29a50 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42  iggerColmask(A,B
29a60 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65  ,C,D,E,F,G) 0.#e
29a70 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
29a80 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a  3JoinType(Parse*
29a90 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
29aa0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
29ab0 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72  sqlite3CreateFor
29ac0 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
29ad0 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
29ae0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
29af0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29b00 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28  DeferForeignKey(
29b10 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Parse*, int);.#i
29b20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29b30 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
29b40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
29b50 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78  thRead(Parse*,Ex
29b60 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c  pr*,Schema*,SrcL
29b70 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ist*);.  int sql
29b80 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61  ite3AuthCheck(Pa
29b90 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  rse*,int, const 
29ba0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
29bb0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
29bc0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29bd0 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
29be0 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74  Parse*, AuthCont
29bf0 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ext*, const char
29c00 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
29c10 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
29c20 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a  (AuthContext*);.
29c30 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
29c40 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c  hReadCol(Parse*,
29c50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
29c60 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
29c70 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29c80 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  e sqlite3AuthRea
29c90 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66  d(a,b,c,d).# def
29ca0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
29cb0 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20  heck(a,b,c,d,e) 
29cc0 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64     SQLITE_OK.# d
29cd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
29ce0 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62  hContextPush(a,b
29cf0 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,c).# define sql
29d00 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
29d10 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61  op(a)  ((void)(a
29d20 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  )).#endif.void s
29d30 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72  qlite3Attach(Par
29d40 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
29d50 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
29d60 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61  sqlite3Detach(Pa
29d70 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
29d80 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  id sqlite3FixIni
29d90 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
29da0 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
29db0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
29dc0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
29dd0 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
29de0 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
29df0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
29e00 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
29e10 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
29e20 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
29e30 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
29e40 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
29e50 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
29e60 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
29e70 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
29e80 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
29e90 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
29ea0 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
29eb0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
29ec0 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
29ed0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
29ee0 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
29ef0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
29f00 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
29f10 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  har*);.#ifndef S
29f20 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
29f30 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
29f40 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
29f50 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
29f60 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69  nChar);.#endif.i
29f70 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68  nt sqlite3Utf8Ch
29f80 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  arLen(const char
29f90 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79   *pData, int nBy
29fa0 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  te);.u32 sqlite3
29fb0 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75  Utf8Read(const u
29fc0 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  8**);.LogEst sql
29fd0 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b  ite3LogEst(u64);
29fe0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
29ff0 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c  ogEstAdd(LogEst,
2a000 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66  LogEst);.#ifndef
2a010 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2a020 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74  TUALTABLE.LogEst
2a030 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
2a040 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29  omDouble(double)
2a050 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
2a060 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2a070 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
2a080 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  US) || \.    def
2a090 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2a0a0 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
2a0b0 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69  4) || \.    defi
2a0c0 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41  ned(SQLITE_EXPLA
2a0d0 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57  IN_ESTIMATED_ROW
2a0e0 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f  S).u64 sqlite3Lo
2a0f0 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74  gEstToInt(LogEst
2a100 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74 20  );.#endif.VList 
2a110 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64  *sqlite3VListAdd
2a120 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a  (sqlite3*,VList*
2a130 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2a140 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61  ,int);.const cha
2a150 72 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  r *sqlite3VListN
2a160 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c  umToName(VList*,
2a170 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a180 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28  3VListNameToNum(
2a190 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  VList*,const cha
2a1a0 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20  r*,int);../*.** 
2a1b0 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
2a1c0 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
2a1d0 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
2a1e0 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
2a1f0 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
2a200 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
2a210 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
2a220 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
2a230 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
2a240 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ile..*/.int sqli
2a250 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
2a260 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
2a270 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
2a280 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73  Varint(const uns
2a290 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36  igned char *, u6
2a2a0 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  4 *);.u8 sqlite3
2a2b0 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73  GetVarint32(cons
2a2c0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2a2d0 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73  *, u32 *);.int s
2a2e0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
2a2f0 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54  u64 v);../*.** T
2a300 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69  he common case i
2a310 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74  s for a varint t
2a320 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79  o be a single by
2a330 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77  te.  They follow
2a340 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61  ing.** macros ha
2a350 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  ndle the common 
2a360 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70  case without a p
2a370 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62  rocedure call, b
2a380 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20  ut then call.** 
2a390 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f  the procedure fo
2a3a0 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73  r larger varints
2a3b0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74  ..*/.#define get
2a3c0 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
2a3d0 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75  .  (u8)((*(A)<(u
2a3e0 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33  8)0x80)?((B)=(u3
2a3f0 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65  2)*(A)),1:sqlite
2a400 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29  3GetVarint32((A)
2a410 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23  ,(u32 *)&(B))).#
2a420 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
2a430 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
2a440 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32  )(((u32)(B)<(u32
2a450 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e  )0x80)?(*(A)=(un
2a460 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29  signed char)(B))
2a470 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75  ,1:\.  sqlite3Pu
2a480 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29  tVarint((A),(B))
2a490 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
2a4a0 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
2a4b0 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
2a4c0 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
2a4d0 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
2a4e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2a4f0 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
2a500 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e  Str(sqlite3*, In
2a510 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2a520 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79  te3TableAffinity
2a530 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
2a540 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  int);.char sqlit
2a550 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74  e3CompareAffinit
2a560 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  y(Expr *pExpr, c
2a570 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73  har aff2);.int s
2a580 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
2a590 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70  ityOk(Expr *pExp
2a5a0 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69  r, char idx_affi
2a5b0 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69  nity);.char sqli
2a5c0 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66  te3TableColumnAf
2a5d0 66 69 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e  finity(Table*,in
2a5e0 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
2a5f0 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70  ExprAffinity(Exp
2a600 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
2a610 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e  qlite3Atoi64(con
2a620 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20  st char*, i64*, 
2a630 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
2a640 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
2a650 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
2a660 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  i64*);.void sqli
2a670 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28  te3ErrorWithMsg(
2a680 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
2a690 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
2a6a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
2a6b0 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
2a6c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 79  ;.void sqlite3Sy
2a6d0 73 74 65 6d 45 72 72 6f 72 28 73 71 6c 69 74 65  stemError(sqlite
2a6e0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  3*,int);.void *s
2a6f0 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
2a700 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
2a710 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
2a720 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f  .u8 sqlite3HexTo
2a730 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20  Int(int h);.int 
2a740 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
2a750 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
2a760 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
2a770 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65  ken **);..#if de
2a780 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45  fined(SQLITE_NEE
2a790 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73  D_ERR_NAME).cons
2a7a0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
2a7b0 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e  rrName(int);.#en
2a7c0 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
2a7d0 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
2a7e0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a7f0 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
2a800 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
2a810 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
2a820 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
2a830 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
2a840 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65  ar*,int);.CollSe
2a850 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
2a860 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2a870 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
2a880 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
2a890 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
2a8a0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2a8b0 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
2a8c0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2a8d0 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
2a8e0 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
2a8f0 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
2a900 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78  Token*, int);.Ex
2a910 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2a920 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
2a930 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
2a940 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
2a950 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
2a960 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
2a970 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2a980 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2a990 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
2a9a0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a   sqlite3CheckObj
2a9b0 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  ectName(Parse *,
2a9c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2a9d0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
2a9e0 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74  SetChanges(sqlit
2a9f0 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  e3 *, int);.int 
2aa00 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
2aa10 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2aa20 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69  qlite3SubInt64(i
2aa30 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2aa40 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36  lite3MulInt64(i6
2aa50 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2aa60 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74  ite3AbsInt32(int
2aa70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2aa80 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45  _ENABLE_8_3_NAME
2aa90 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  S.void sqlite3Fi
2aaa0 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20  leSuffix3(const 
2aab0 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23  char*, char*);.#
2aac0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2aad0 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2aae0 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20  (X,Y).#endif.u8 
2aaf0 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
2ab00 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  n(const char *z,
2ab10 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64  u8);..const void
2ab20 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65   *sqlite3ValueTe
2ab30 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  xt(sqlite3_value
2ab40 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
2ab50 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71  te3ValueBytes(sq
2ab60 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
2ab70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2ab80 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74  alueSetStr(sqlit
2ab90 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20  e3_value*, int, 
2aba0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c  const void *,u8,
2abb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2abc0 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29           void(*)
2abd0 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
2abe0 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75  qlite3ValueSetNu
2abf0 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ll(sqlite3_value
2ac00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ac10 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65  ValueFree(sqlite
2ac20 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74  3_value*);.sqlit
2ac30 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65  e3_value *sqlite
2ac40 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65  3ValueNew(sqlite
2ac50 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  3 *);.#ifndef SQ
2ac60 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
2ac70 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
2ac80 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
2ac90 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2aca0 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69  t, u8);.#endif.i
2acb0 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  nt sqlite3ValueF
2acc0 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20  romExpr(sqlite3 
2acd0 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75  *, Expr *, u8, u
2ace0 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
2acf0 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
2ad00 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
2ad10 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c  nity(sqlite3_val
2ad20 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23  ue *, u8, u8);.#
2ad30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2ad40 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72  ALGAMATION.exter
2ad50 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2ad60 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63   char sqlite3Opc
2ad70 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65  odeProperty[];.e
2ad80 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72  xtern const char
2ad90 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52   sqlite3StrBINAR
2ada0 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  Y[];.extern cons
2adb0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2adc0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
2add0 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
2ade0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2adf0 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
2ae00 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
2ae10 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
2ae20 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
2ae30 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
2ae40 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
2ae50 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
2ae60 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66  ;.extern FuncDef
2ae70 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c  Hash sqlite3Buil
2ae80 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69  tinFunctions;.#i
2ae90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2aea0 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74  T_WSD.extern int
2aeb0 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42   sqlite3PendingB
2aec0 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64  yte;.#endif.#end
2aed0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
2aee0 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c  ootPageMoved(sql
2aef0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
2af00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2af10 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65  te3Reindex(Parse
2af20 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2af30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2af40 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76  AlterFunctions(v
2af50 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2af60 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62  e3AlterRenameTab
2af70 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
2af80 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
2af90 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65  t sqlite3GetToke
2afa0 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n(const unsigned
2afb0 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b   char *, int *);
2afc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73  .void sqlite3Nes
2afd0 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c  tedParse(Parse*,
2afe0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
2aff0 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
2b000 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
2b010 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33  atements(sqlite3
2b020 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2b030 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72  odeSubselect(Par
2b040 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  se*, Expr *, int
2b050 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2b060 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
2b070 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2b080 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2b090 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2b0a0 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72  tWrongNumTermsEr
2b0b0 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ror(Parse *pPars
2b0c0 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69  e, Select *p);.i
2b0d0 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
2b0e0 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
2b0f0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2b100 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2b110 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
2b120 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2b130 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
2b140 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  text*, Expr*);.i
2b150 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
2b160 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e  eExprListNames(N
2b170 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2b180 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
2b190 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
2b1a0 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
2b1b0 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
2b1c0 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
2b1d0 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
2b1e0 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
2b1f0 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
2b200 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
2b210 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
2b220 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
2b230 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
2b240 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2b250 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2b260 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
2b270 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
2b280 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b290 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
2b2a0 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
2b2b0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
2b2c0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2b2d0 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
2b2e0 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
2b2f0 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71   *);.CollSeq *sq
2b300 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
2b310 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
2b320 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
2b330 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
2b340 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
2b350 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b  nst char*, u8*);
2b360 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2b370 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
2b380 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
2b390 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
2b3a0 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
2b3b0 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71  andler*);.int sq
2b3c0 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69  lite3FindDb(sqli
2b3d0 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
2b3e0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
2b3f0 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Name(sqlite3 *, 
2b400 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
2b410 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73  nt sqlite3Analys
2b420 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c  isLoad(sqlite3*,
2b430 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73  int iDB);.void s
2b440 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65  qlite3DeleteInde
2b450 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33  xSamples(sqlite3
2b460 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  *,Index*);.void 
2b470 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f  sqlite3DefaultRo
2b480 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f  wEst(Index*);.vo
2b490 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
2b4a0 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
2b4b0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
2b4c0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b  int sqlite3IsLik
2b4d0 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  eFunction(sqlite
2b4e0 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68  3*,Expr*,int*,ch
2b4f0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2b500 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
2b510 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
2b520 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
2b530 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
2b540 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2b550 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
2b560 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
2b570 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
2b580 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
2b590 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
2b5a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b5b0 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b  e3KeyInfoUnref(K
2b5c0 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
2b5d0 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2b5e0 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  oRef(KeyInfo*);.
2b5f0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2b600 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50  KeyInfoOfIndex(P
2b610 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  arse*, Index*);.
2b620 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2b630 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  BUG.int sqlite3K
2b640 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c  eyInfoIsWriteabl
2b650 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e  e(KeyInfo*);.#en
2b660 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  dif.int sqlite3C
2b670 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65  reateFunc(sqlite
2b680 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
2b690 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69  *, int, int, voi
2b6a0 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  d *,.  void (*)(
2b6b0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2b6c0 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
2b6d0 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28  ue **),.  void (
2b6e0 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2b6f0 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2b700 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20  value **), void 
2b710 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2b720 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73  ext*),.  FuncDes
2b730 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
2b740 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c  ctor.);.void sql
2b750 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c  ite3OomFault(sql
2b760 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2b770 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c  ite3OomClear(sql
2b780 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2b790 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74  te3ApiExit(sqlit
2b7a0 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e  e3 *db, int);.in
2b7b0 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  t sqlite3OpenTem
2b7c0 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20  pDatabase(Parse 
2b7d0 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
2b7e0 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74  3StrAccumInit(St
2b7f0 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33  rAccum*, sqlite3
2b800 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  *, char*, int, i
2b810 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b820 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
2b830 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
2b840 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  char*,int);.void
2b850 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b860 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63  AppendAll(StrAcc
2b870 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  um*,const char*)
2b880 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70  ;.void sqlite3Ap
2b890 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63 75  pendChar(StrAccu
2b8a0 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68  m*,int,char);.ch
2b8b0 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
2b8c0 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
2b8d0 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
2b8e0 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28  e3StrAccumReset(
2b8f0 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
2b900 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
2b910 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73  stInit(SelectDes
2b920 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70  t*,int,int);.Exp
2b930 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  r *sqlite3Create
2b940 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74  ColumnExpr(sqlit
2b950 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  e3 *, SrcList *,
2b960 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69   int, int);..voi
2b970 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52  d sqlite3BackupR
2b980 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62  estart(sqlite3_b
2b990 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73  ackup *);.void s
2b9a0 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61  qlite3BackupUpda
2b9b0 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  te(sqlite3_backu
2b9c0 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74  p *, Pgno, const
2b9d0 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66   u8 *);..#ifndef
2b9e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42   SQLITE_OMIT_SUB
2b9f0 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65  QUERY.int sqlite
2ba00 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72  3ExprCheckIN(Par
2ba10 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c  se*, Expr*);.#el
2ba20 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2ba30 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78  te3ExprCheckIN(x
2ba40 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  ,y) SQLITE_OK.#e
2ba50 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2ba60 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
2ba70 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
2ba80 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
2ba90 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
2baa0 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
2bab0 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20  obeSetValue(.   
2bac0 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55   Parse*,Index*,U
2bad0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c  npackedRecord**,
2bae0 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  Expr*,int,int,in
2baf0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2bb00 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78  Stat4ValueFromEx
2bb10 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  pr(Parse*, Expr*
2bb20 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2bb30 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lue**);.void sql
2bb40 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72  ite3Stat4ProbeFr
2bb50 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ee(UnpackedRecor
2bb60 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
2bb70 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69  Stat4Column(sqli
2bb80 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  te3*, const void
2bb90 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c  *, int, int, sql
2bba0 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63  ite3_value**);.c
2bbb0 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78  har sqlite3Index
2bbc0 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
2bbd0 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c  qlite3*, Index*,
2bbe0 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f   int);.#endif../
2bbf0 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
2bc00 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
2bc10 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
2bc20 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
2bc30 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
2bc40 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50    void *sqlite3P
2bc50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
2bc60 28 2a 29 28 75 36 34 29 29 3b 0a 20 20 76 6f 69  (*)(u64));.  voi
2bc70 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
2bc80 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
2bc90 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64  *)(void*));.#end
2bca0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  if.void sqlite3P
2bcb0 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
2bcc0 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29  , Token, Parse*)
2bcd0 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
2bce0 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
2bcf0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2bd00 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
2bd10 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
2bd20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
2bd30 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
2bd40 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
2bd50 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
2bd60 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
2bd70 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2bd80 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
2bd90 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2bda0 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2bdb0 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
2bdc0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2bdd0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2bde0 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
2bdf0 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
2be00 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
2be10 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2be20 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2be30 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2be40 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
2be50 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2be60 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
2be70 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
2be80 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
2be90 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2bea0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2beb0 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
2bec0 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
2bed0 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
2bee0 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
2bef0 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
2bf00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2bf10 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
2bf20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2bf30 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
2bf40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2bf50 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
2bf60 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2bf70 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64  VtabLock(X).#  d
2bf80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2bf90 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
2bfa0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2bfb0 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
2bfc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2bfd0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
2bfe0 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
2bff0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2c000 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
2c010 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
2c020 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
2c030 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
2c040 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
2c050 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2c060 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
2c070 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
2c080 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
2c090 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2c0a0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
2c0b0 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
2c0c0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
2c0d0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2c0e0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2c0f0 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
2c100 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
2c110 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
2c120 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2c130 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2c140 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
2c150 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c160 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
2c170 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
2c180 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
2c190 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
2c1a0 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
2c1b0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
2c1c0 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
2c1d0 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
2c1e0 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
2c1f0 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
2c200 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  e3*, Table*);.  
2c210 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33   Module *sqlite3
2c220 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65  VtabCreateModule
2c230 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c  (.     sqlite3*,
2c240 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  .     const char
2c250 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71  *,.     const sq
2c260 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20  lite3_module*,. 
2c270 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20      void*,.     
2c280 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20  void(*)(void*). 
2c290 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73    );.#  define s
2c2a0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2c2b0 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
2c2c0 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
2c2d0 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
2c2e0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  f.int sqlite3Vta
2c2f0 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49  bEponymousTableI
2c300 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c  nit(Parse*,Modul
2c310 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2c320 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
2c330 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33  bleClear(sqlite3
2c340 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2c350 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65   sqlite3VtabMake
2c360 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c  Writable(Parse*,
2c370 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
2c380 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
2c390 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
2c3a0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
2c3b0 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
2c3c0 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68  qlite3VtabFinish
2c3d0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
2c3e0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2c3f0 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50  te3VtabArgInit(P
2c400 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2c410 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e  ite3VtabArgExten
2c420 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  d(Parse*, Token*
2c430 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2c440 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c  abCallCreate(sql
2c450 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2c460 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a  t char *, char *
2c470 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2c480 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50  tabCallConnect(P
2c490 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
2c4a0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2c4b0 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74  allDestroy(sqlit
2c4c0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2c4d0 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2c4e0 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71  ite3VtabBegin(sq
2c4f0 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20  lite3 *, VTable 
2c500 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
2c510 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64  ite3VtabOverload
2c520 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2c530 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74   *,FuncDef*, int
2c540 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76   nArg, Expr*);.v
2c550 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c  oid sqlite3Inval
2c560 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  idFunction(sqlit
2c570 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2c580 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2c590 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  ;.sqlite3_int64 
2c5a0 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65  sqlite3StmtCurre
2c5b0 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63  ntTime(sqlite3_c
2c5c0 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
2c5d0 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74  lite3VdbeParamet
2c5e0 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63  erIndex(Vdbe*, c
2c5f0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
2c600 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61  ;.int sqlite3Tra
2c610 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71  nsferBindings(sq
2c620 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71  lite3_stmt *, sq
2c630 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76  lite3_stmt *);.v
2c640 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2c650 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a  rReset(Parse*);.
2c660 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
2c670 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
2c680 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
2c690 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
2c6a0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2c6b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
2c6c0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
2c6d0 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
2c6e0 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
2c6f0 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
2c700 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
2c710 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
2c720 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
2c730 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
2c740 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
2c750 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c760 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
2c770 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
2c780 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
2c790 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
2c7a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
2c7b0 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
2c7c0 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
2c7d0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
2c7e0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2c7f0 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69  TE_OMIT_CTE.  Wi
2c800 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41  th *sqlite3WithA
2c810 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c  dd(Parse*,With*,
2c820 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
2c830 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69  ,Select*);.  voi
2c840 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  d sqlite3WithDel
2c850 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74  ete(sqlite3*,Wit
2c860 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  h*);.  void sqli
2c870 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73  te3WithPush(Pars
2c880 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  e*, With*, u8);.
2c890 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
2c8a0 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c  lite3WithPush(x,
2c8b0 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  y,z).#define sql
2c8c0 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78  ite3WithDelete(x
2c8d0 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ,y).#endif../* D
2c8e0 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
2c8f0 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
2c900 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
2c910 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
2c920 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
2c930 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
2c940 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
2c950 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
2c960 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
2c970 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
2c980 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
2c990 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
2c9a0 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
2c9b0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2c9c0 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
2c9d0 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
2c9e0 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
2c9f0 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
2ca00 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
2ca10 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
2ca20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
2ca30 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64  ity is.** provid
2ca40 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
2ca50 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
2ca60 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
2ca70 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
2ca80 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
2ca90 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2caa0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
2cab0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2cac0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
2cad0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
2cae0 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
2caf0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2cb00 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
2cb10 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
2cb20 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
2cb30 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
2cb40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2cb50 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
2cb60 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
2cb70 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
2cb80 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
2cb90 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
2cba0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2cbb0 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
2cbc0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
2cbd0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2cbe0 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
2cbf0 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
2cc00 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
2cc10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2cc20 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
2cc30 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
2cc40 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
2cc50 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
2cc60 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
2cc70 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
2cc80 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2cc90 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
2cca0 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
2ccb0 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
2ccc0 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
2ccd0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2cce0 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
2ccf0 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e  (a)        0.#en
2cd00 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2cd10 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2cd20 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
2cd30 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
2cd40 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
2cd50 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
2cd60 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
2cd70 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
2cd80 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
2cd90 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2cda0 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
2cdb0 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
2cdc0 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2cdd0 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
2cde0 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
2cdf0 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
2ce00 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
2ce10 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
2ce20 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
2ce30 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2ce40 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
2ce50 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
2ce60 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2ce70 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
2ce80 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
2ce90 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
2cea0 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
2ceb0 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
2cec0 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
2ced0 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
2cee0 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
2cef0 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
2cf00 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69  _UNTESTABLE.** i
2cf10 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
2cf20 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2cf30 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f  _UNTESTABLE.  vo
2cf40 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
2cf50 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
2cf60 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2cf70 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2cf80 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
2cf90 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
2cfa0 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2cfb0 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
2cfc0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2cfd0 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  loc().#endif../*
2cfe0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  .** Allowed retu
2cff0 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
2d000 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2d010 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  x().*/.#define I
2d020 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
2d030 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72       1   /* Sear
2d040 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ch the rowid of 
2d050 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  the table */.#de
2d060 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
2d070 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f  H          2   /
2d080 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65  * Search an ephe
2d090 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a  meral b-tree */.
2d0a0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2d0b0 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20  _INDEX_ASC    3 
2d0c0 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2d0d0 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f  dex ASCENDING */
2d0e0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2d0f0 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34  X_INDEX_DESC   4
2d100 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2d110 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20  ndex DESCENDING 
2d120 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2d130 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20  DEX_NOOP        
2d140 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65   5   /* No table
2d150 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20   available. Use 
2d160 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f  comparisons */./
2d170 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61  *.** Allowed fla
2d180 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70  gs for the 3rd p
2d190 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
2d1a0 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
2d1b0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ..*/.#define IN_
2d1c0 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20  INDEX_NOOP_OK   
2d1d0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20    0x0001  /* OK 
2d1e0 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44  to return IN_IND
2d1f0 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69  EX_NOOP */.#defi
2d200 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42  ne IN_INDEX_MEMB
2d210 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20  ERSHIP  0x0002  
2d220 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2d230 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68  sed for membersh
2d240 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69  ip test */.#defi
2d250 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50  ne IN_INDEX_LOOP
2d260 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
2d270 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2d280 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f  sed as a loop */
2d290 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2d2a0 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
2d2b0 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e   Expr *, u32, in
2d2c0 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20  t*, int*);..int 
2d2d0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
2d2e0 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
2d2f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2d300 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
2d310 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
2d320 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
2d330 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29  e(sqlite3_vfs *)
2d340 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
2d350 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
2d360 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20  IC_WRITE) \. || 
2d370 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2d380 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
2d390 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20  IC_WRITE).  int 
2d3a0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
2d3b0 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
2d3c0 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e *);.#endif..in
2d3d0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2d3e0 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74  IsInMemory(sqlit
2d3f0 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69  e3_file *p);.voi
2d400 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
2d410 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
2d420 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  file *);..void s
2d430 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69  qlite3ExprSetHei
2d440 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73  ghtAndFlags(Pars
2d450 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2d460 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  *p);.#if SQLITE_
2d470 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
2d480 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
2d490 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
2d4a0 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
2d4b0 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2d4c0 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
2d4d0 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
2d4e0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
2d4f0 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20  ctExprHeight(x) 
2d500 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2d510 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
2d520 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  ht(x,y).#endif..
2d530 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62  u32 sqlite3Get4b
2d540 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a  yte(const u8*);.
2d550 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34  void sqlite3Put4
2d560 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a  byte(u8*, u32);.
2d570 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2d580 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
2d590 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IFY.  void sqlit
2d5a0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
2d5b0 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73  ked(sqlite3 *, s
2d5c0 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69  qlite3 *);.  voi
2d5d0 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2d5e0 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69  ionUnlocked(sqli
2d5f0 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64  te3 *db);.  void
2d600 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2d610 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33  onClosed(sqlite3
2d620 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23   *db);.#else.  #
2d630 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2d640 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
2d650 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
2d660 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2d670 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64  Unlocked(x).  #d
2d680 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
2d690 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29  nectionClosed(x)
2d6a0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2d6b0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76  SQLITE_DEBUG.  v
2d6c0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2d6d0 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68  rTrace(FILE*, ch
2d6e0 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ar *);.#endif../
2d6f0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
2d700 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43  TE_ENABLE IOTRAC
2d710 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68  E exists then th
2d720 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
2d730 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72  e.** sqlite3IoTr
2d740 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
2d750 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b   to a printf-lik
2d760 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74  e routine used t
2d770 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74  o.** print I/O t
2d780 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e  racing messages.
2d790 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2d7a0 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
2d7b0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
2d7c0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
2d7d0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
2d7e0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
2d7f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
2d800 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
2d810 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20  e*);.SQLITE_API 
2d820 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f  SQLITE_EXTERN vo
2d830 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  id (SQLITE_CDECL
2d840 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65   *sqlite3IoTrace
2d850 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
2d860 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
2d870 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
2d880 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
2d890 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
2d8a0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2d8b0 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
2d8c0 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
2d8d0 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
2d8e0 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
2d8f0 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
2d900 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
2d910 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
2d920 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
2d930 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
2d940 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
2d950 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
2d960 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
2d970 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2d980 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
2d990 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
2d9a0 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
2d9b0 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
2d9c0 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
2d9d0 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
2d9e0 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
2d9f0 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
2da00 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
2da10 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
2da20 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
2da30 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
2da40 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
2da50 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
2da60 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
2da70 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
2da80 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
2da90 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2daa0 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
2dab0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2dac0 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
2dad0 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
2dae0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2daf0 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
2db00 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2db10 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2db20 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
2db30 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
2db40 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
2db50 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
2db60 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
2db70 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2db80 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
2db90 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
2dba0 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
2dbb0 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
2dbc0 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
2dbd0 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
2dbe0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2dbf0 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
2dc00 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
2dc10 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
2dc20 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
2dc30 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
2dc40 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
2dc50 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
2dc60 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
2dc70 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
2dc80 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
2dc90 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
2dca0 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
2dcb0 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
2dcc0 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
2dcd0 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
2dce0 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
2dcf0 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
2dd00 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
2dd10 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2dd20 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
2dd30 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
2dd40 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
2dd50 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
2dd60 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
2dd70 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
2dd80 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
2dd90 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
2dda0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
2ddb0 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
2ddc0 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
2ddd0 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
2dde0 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
2ddf0 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
2de00 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
2de10 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
2de20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
2de30 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
2de40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
2de50 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
2de60 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
2de70 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2de80 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
2de90 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
2dea0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
2deb0 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
2dec0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2ded0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
2dee0 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
2def0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2df00 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2df10 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
2df20 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2df30 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
2df40 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
2df50 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
2df60 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
2df70 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
2df80 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
2df90 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2dfa0 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
2dfb0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
2dfc0 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
2dfd0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2dfe0 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30  E_PCACHE     0x0
2dff0 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65  4  /* Page cache
2e000 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2e010 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67  ./*.** Threading
2e020 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69   interface.*/.#i
2e030 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
2e040 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e  KER_THREADS>0.in
2e050 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43  t sqlite3ThreadC
2e060 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65  reate(SQLiteThre
2e070 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f  ad**,void*(*)(vo
2e080 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74  id*),void*);.int
2e090 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f   sqlite3ThreadJo
2e0a0 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  in(SQLiteThread*
2e0b0 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69  , void**);.#endi
2e0c0 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
2e0d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53  QLITE_ENABLE_DBS
2e0e0 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  TAT_VTAB) || def
2e0f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
2e100 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73  ).int sqlite3Dbs
2e110 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69  tatRegister(sqli
2e120 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  te3*);.#endif..i
2e130 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 56 65  nt sqlite3ExprVe
2e140 63 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70  ctorSize(Expr *p
2e150 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
2e160 65 33 45 78 70 72 49 73 56 65 63 74 6f 72 28 45  e3ExprIsVector(E
2e170 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
2e180 72 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72  r *sqlite3Vector
2e190 46 69 65 6c 64 53 75 62 65 78 70 72 28 45 78 70  FieldSubexpr(Exp
2e1a0 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  r*, int);.Expr *
2e1b0 73 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65  sqlite3ExprForVe
2e1c0 63 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a  ctorField(Parse*
2e1d0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69  ,Expr*,int);.voi
2e1e0 64 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45  d sqlite3VectorE
2e1f0 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
2e200 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66  Expr*);..#ifndef
2e210 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
2e220 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
2e230 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71  .const char **sq
2e240 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69  lite3CompileOpti
2e250 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b  ons(int *pnOpt);
2e260 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
2e270 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a  /* SQLITEINT_H *
2e280 2f 0a                                            /.