/ Hex Artifact Content
Login

Artifact 39ba44080f8cd5c6d46a6bf5b636d44cecbbd9b23a166c5dbf40d7b96c8c0763:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 69 6c 65  *.** The compile
5710: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 53 51  -time options SQ
5720: 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52  LITE_MMAP_READWR
5730: 49 54 45 20 61 6e 64 20 0a 2a 2a 20 53 51 4c 49  ITE and .** SQLI
5740: 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f  TE_ENABLE_BATCH_
5750: 41 54 4f 4d 49 43 5f 57 52 49 54 45 20 61 72 65  ATOMIC_WRITE are
5760: 20 6e 6f 74 20 63 6f 6d 70 61 74 69 62 6c 65 20   not compatible 
5770: 77 69 74 68 20 6f 6e 65 20 61 6e 6f 74 68 65 72  with one another
5780: 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73 74 20 63 68  ..** You must ch
5790: 6f 6f 73 65 20 6f 6e 65 20 6f 72 20 74 68 65 20  oose one or the 
57a0: 6f 74 68 65 72 20 28 6f 72 20 6e 65 69 74 68 65  other (or neithe
57b0: 72 29 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  r) but not both.
57c0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
57d0: 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44  SQLITE_MMAP_READ
57e0: 57 52 49 54 45 29 20 26 26 20 64 65 66 69 6e 65  WRITE) && define
57f0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
5800: 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49  BATCH_ATOMIC_WRI
5810: 54 45 29 0a 23 65 72 72 6f 72 20 43 61 6e 6e 6f  TE).#error Canno
5820: 74 20 75 73 65 20 62 6f 74 68 20 53 51 4c 49 54  t use both SQLIT
5830: 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45  E_MMAP_READWRITE
5840: 20 61 6e 64 20 53 51 4c 49 54 45 5f 45 4e 41 42   and SQLITE_ENAB
5850: 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f  LE_BATCH_ATOMIC_
5860: 57 52 49 54 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  WRITE.#endif../*
5870: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
5880: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
5890: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
58a0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
58b0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
58c0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
58d0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
58e0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
58f0: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
5900: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
5910: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
5920: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
5930: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
5940: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
5950: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
5960: 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4d  rs..*/.#ifndef M
5970: 49 4e 0a 23 20 64 65 66 69 6e 65 20 4d 49 4e 28  IN.# define MIN(
5980: 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41  A,B) ((A)<(B)?(A
5990: 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a 23 69  ):(B)).#endif.#i
59a0: 66 6e 64 65 66 20 4d 41 58 0a 23 20 64 65 66 69  fndef MAX.# defi
59b0: 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29  ne MAX(A,B) ((A)
59c0: 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  >(B)?(A):(B)).#e
59d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  ndif../*.** Swap
59e0: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
59f0: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
5a00: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
5a10: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
5a20: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
5a30: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
5a40: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
5a50: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
5a60: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
5a70: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
5a80: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
5a90: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
5aa0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
5ab0: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
5ac0: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
5ad0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
5ae0: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
5af0: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
5b00: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
5b10: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
5b20: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
5b30: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
5b40: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
5b50: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
5b60: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
5b70: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
5b80: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
5b90: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
5ba0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
5bb0: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
5bc0: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
5bd0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
5be0: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
5bf0: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
5c00: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
5c10: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
5c20: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
5c30: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
5c40: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
5c50: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
5c60: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5c70: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
5c80: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
5c90: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
5ca0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
5cb0: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
5cc0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
5cd0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
5ce0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
5cf0: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
5d00: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
5d10: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
5d20: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
5d30: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
5d40: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
5d50: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
5d60: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d70: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
5d80: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
5d90: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
5da0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
5db0: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
5dc0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5dd0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
5de0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5df0: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
5e00: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
5e10: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
5e20: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
5e30: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
5e40: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
5e50: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
5e60: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
5e70: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
5e80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5e90: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
5ea0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
5eb0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
5ec0: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
5ed0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
5ee0: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
5ef0: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
5f00: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5f10: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
5f20: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
5f30: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
5f40: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5f50: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
5f60: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
5f70: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
5f80: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5f90: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
5fa0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
5fb0: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
5fc0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
5fd0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
5fe0: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
5ff0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
6000: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
6010: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
6020: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
6030: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
6040: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
6050: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
6060: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
6070: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
6080: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
6090: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
60a0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
60b0: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
60c0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
60d0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
60e0: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
60f0: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
6100: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
6110: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
6120: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
6130: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
6140: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
6150: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
6160: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
6170: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
6180: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
6190: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
61a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
61b0: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
61c0: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
61d0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
61e0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
61f0: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
6200: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
6210: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
6220: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
6230: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
6240: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
6250: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
6260: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
6270: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
6280: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
6290: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
62a0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
62b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
62c0: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
62d0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
62e0: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
62f0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
6300: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
6310: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
6320: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
6330: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
6340: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
6350: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
6360: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
6370: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
6380: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
6390: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
63a0: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
63b0: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
63c0: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
63d0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
63e0: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
63f0: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
6400: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
6410: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
6420: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
6430: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
6440: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
6450: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
6460: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
6470: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
6480: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
6490: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
64a0: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
64b0: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
64c0: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
64d0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
64e0: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
64f0: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
6500: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
6510: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
6520: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
6530: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
6540: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
6550: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
6560: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
6570: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
6580: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
6590: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
65a0: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
65b0: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
65c0: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
65d0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
65e0: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
65f0: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
6600: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
6610: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
6620: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
6630: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
6640: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
6650: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
6660: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
6670: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
6680: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
6690: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
66a0: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
66b0: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
66c0: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
66d0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
66e0: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
66f0: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
6700: 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  ..** Examples:.*
6710: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
6720: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
6730: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
6740: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
6750: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
6760: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
6770: 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54 45  * Set the SQLITE
6780: 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74  _PTRSIZE macro t
6790: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
67a0: 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74  bytes in a point
67b0: 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
67c0: 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69  LITE_PTRSIZE.# i
67d0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45  f defined(__SIZE
67e0: 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20  OF_POINTER__).# 
67f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6800: 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46  PTRSIZE __SIZEOF
6810: 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69  _POINTER__.# eli
6820: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
6830: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6840: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
6850: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
6860: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65  |    \.       de
6870: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
6880: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d  || defined(__arm
6890: 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  __)    || define
68a0: 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66  d(__x86).#   def
68b0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
68c0: 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20  ZE 4.# else.#   
68d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
68e0: 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a  RSIZE 8.# endif.
68f0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 75  #endif../* The u
6900: 70 74 72 20 74 79 70 65 20 69 73 20 61 6e 20 75  ptr type is an u
6910: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
6920: 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
6930: 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72 0a 2a  hold a pointer.*
6940: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41  /.#if defined(HA
6950: 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20 20 74  VE_STDINT_H).  t
6960: 79 70 65 64 65 66 20 75 69 6e 74 70 74 72 5f 74  ypedef uintptr_t
6970: 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53 51 4c   uptr;.#elif SQL
6980: 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34 0a 20  ITE_PTRSIZE==4. 
6990: 20 74 79 70 65 64 65 66 20 75 33 32 20 75 70 74   typedef u32 upt
69a0: 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  r;.#else.  typed
69b0: 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23 65 6e  ef u64 uptr;.#en
69c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  dif../*.** The S
69d0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
69e0: 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63 6b 73  ,E) macro checks
69f0: 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69 6e 74   to see if point
6a00: 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  er P points to.*
6a10: 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65 74 77  * something betw
6a20: 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69 76 65  een S (inclusive
6a30: 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75 73 69  ) and E (exclusi
6a40: 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ve)..**.** In ot
6a50: 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69 73 20  her words, S is 
6a60: 61 20 62 75 66 66 65 72 20 61 6e 64 20 45 20 69  a buffer and E i
6a70: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
6a80: 68 65 20 66 69 72 73 74 20 62 79 74 65 20 61 66  he first byte af
6a90: 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  ter.** the end o
6aa0: 66 20 62 75 66 66 65 72 20 53 2e 20 20 54 68 69  f buffer S.  Thi
6ab0: 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e 73 20  s macro returns 
6ac0: 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e 74 73  true if P points
6ad0: 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a   to something.**
6ae0: 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
6af0: 6e 20 74 68 65 20 62 75 66 66 65 72 20 53 2e 0a  n the buffer S..
6b00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
6b10: 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20  E_WITHIN(P,S,E) 
6b20: 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28 75 70  (((uptr)(P)>=(up
6b30: 74 72 29 28 53 29 29 26 26 28 28 75 70 74 72 29  tr)(S))&&((uptr)
6b40: 28 50 29 3c 28 75 70 74 72 29 28 45 29 29 29 0a  (P)<(uptr)(E))).
6b50: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
6b60: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
6b70: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
6b80: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
6b90: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20   endian,.** and 
6ba0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
6bb0: 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f  hat determinatio
6bc0: 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72  n is run-time or
6bd0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a   compile-time..*
6be0: 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65  *.** For best pe
6bf0: 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74  rformance, an at
6c00: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
6c10: 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79   guess at the by
6c20: 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e  te-order.** usin
6c30: 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  g C-preprocessor
6c40: 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61   macros.  If tha
6c50: 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75  t is unsuccessfu
6c60: 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51  l, or if.** -DSQ
6c70: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 30  LITE_BYTEORDER=0
6c80: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79   is set, then by
6c90: 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65  te-order is dete
6ca0: 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e  rmined.** at run
6cb0: 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65  -time..*/.#ifnde
6cc0: 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  f SQLITE_BYTEORD
6cd0: 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ER.# if defined(
6ce0: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
6cf0: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
6d00: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
6d10: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
6d20: 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f    defined(__x86_
6d30: 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  64) || defined(_
6d40: 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65  _x86_64__) || de
6d50: 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c  fined(_M_X64)  |
6d60: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
6d70: 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c  ned(_M_AMD64) ||
6d80: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29   defined(_M_ARM)
6d90: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
6da0: 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c  __x86)   ||    \
6db0: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  .     defined(__
6dc0: 61 72 6d 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e  arm__).#   defin
6dd0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
6de0: 45 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69  ER    1234.# eli
6df0: 66 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29  f defined(sparc)
6e00: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6e10: 5f 70 70 63 5f 5f 29 0a 23 20 20 20 64 65 66 69  _ppc__).#   defi
6e20: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
6e30: 44 45 52 20 20 20 20 34 33 32 31 0a 23 20 65 6c  DER    4321.# el
6e40: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6e50: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 30  LITE_BYTEORDER 0
6e60: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
6e70: 23 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  #if SQLITE_BYTEO
6e80: 52 44 45 52 3d 3d 34 33 32 31 0a 23 20 64 65 66  RDER==4321.# def
6e90: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
6ea0: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
6eb0: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
6ec0: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
6ed0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
6ee0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
6ef0: 31 36 42 45 0a 23 65 6c 69 66 20 53 51 4c 49 54  16BE.#elif SQLIT
6f00: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32 33  E_BYTEORDER==123
6f10: 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  4.# define SQLIT
6f20: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
6f30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6f40: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
6f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6f60: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
6f70: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73  ITE_UTF16LE.#els
6f80: 65 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45  e.# ifdef SQLITE
6f90: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20  _AMALGAMATION.  
6fa0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
6fb0: 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65  3one = 1;.# else
6fc0: 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  .  extern const 
6fd0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
6fe0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
6ff0: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
7000: 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28  N    (*(char *)(
7010: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29  &sqlite3one)==0)
7020: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7030: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a  _LITTLEENDIAN (*
7040: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7050: 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69  3one)==1).# defi
7060: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
7070: 41 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f 42  ATIVE  (SQLITE_B
7080: 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f  IGENDIAN?SQLITE_
7090: 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55  UTF16BE:SQLITE_U
70a0: 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a  TF16LE).#endif..
70b0: 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20  /*.** Constants 
70c0: 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20  for the largest 
70d0: 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73  and smallest pos
70e0: 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67  sible 64-bit sig
70f0: 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  ned integers..**
7100: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72   These macros ar
7110: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f  e designed to wo
7120: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
7130: 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20  both 32-bit and 
7140: 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c  64-bit.** compil
7150: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
7160: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28  LARGEST_INT64  (
7170: 30 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36  0xffffffff|(((i6
7180: 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
7190: 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c  2)).#define SMAL
71a0: 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36  LEST_INT64 (((i6
71b0: 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f  4)-1) - LARGEST_
71c0: 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  INT64)../*.** Ro
71d0: 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20  und up a number 
71e0: 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67  to the next larg
71f0: 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  er multiple of 8
7200: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a  .  This is used.
7210: 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79  ** to force 8-by
7220: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20  te alignment on 
7230: 36 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74  64-bit architect
7240: 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ures..*/.#define
7250: 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28   ROUND8(x)     (
7260: 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a  ((x)+7)&~7)../*.
7270: 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f  ** Round down to
7280: 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c   the nearest mul
7290: 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64  tiple of 8.*/.#d
72a0: 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38  efine ROUNDDOWN8
72b0: 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a  (x) ((x)&~7)../*
72c0: 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20  .** Assert that 
72d0: 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73  the pointer X is
72e0: 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38   aligned to an 8
72f0: 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20  -byte boundary. 
7300: 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69   This.** macro i
7310: 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68  s used only with
7320: 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76  in assert() to v
7330: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63  erify that the c
7340: 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20  ode gets.** all 
7350: 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69  alignment restri
7360: 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a  ctions correct..
7370: 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66  **.** Except, if
7380: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
7390: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73  LIGNED_MALLOC is
73a0: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
73b0: 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  he.** underlying
73c0: 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d   malloc() implem
73d0: 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72  entation might r
73e0: 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20  eturn us 4-byte 
73f0: 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74  aligned.** point
7400: 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61  ers.  In that ca
7410: 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20  se, only verify 
7420: 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  4-byte alignment
7430: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
7440: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7450: 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e  D_MALLOC.# defin
7460: 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49  e EIGHT_BYTE_ALI
7470: 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28  GNMENT(X)   ((((
7480: 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61  char*)(X) - (cha
7490: 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c  r*)0)&3)==0).#el
74a0: 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  se.# define EIGH
74b0: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
74c0: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
74d0: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
74e0: 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f  7)==0).#endif../
74f0: 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41  *.** Disable MMA
7500: 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77  P on platforms w
7510: 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e  here it is known
7520: 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a   to not work.*/.
7530: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70  #if defined(__Op
7540: 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69  enBSD__) || defi
7550: 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a  ned(__QNXNTO__).
7560: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
7570: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  AX_MMAP_SIZE.# d
7580: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
7590: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
75a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
75b0: 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  lt maximum size 
75c0: 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62  of memory used b
75d0: 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20  y memory-mapped 
75e0: 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a  I/O in the VFS.*
75f0: 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45  /.#ifdef __APPLE
7600: 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61  __.# include <Ta
7610: 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73  rgetConditionals
7620: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  .h>.#endif.#ifnd
7630: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7640: 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66  AP_SIZE.# if def
7650: 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20  ined(__linux__) 
7660: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
7670: 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64  WIN32) \.  || (d
7680: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
7690: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d  ) && defined(__M
76a0: 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64  ACH__)) \.  || d
76b0: 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a  efined(__sun) \.
76c0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46    || defined(__F
76d0: 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c  reeBSD__) \.  ||
76e0: 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f   defined(__Drago
76f0: 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66 69  nFly__).#   defi
7700: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
7710: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
7720: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
7730: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
7740: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
7750: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
7760: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
7770: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
7780: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
7790: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
77a0: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
77b0: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
77c0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
77d0: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
77e0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
77f0: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
7800: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
7810: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
7820: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
7830: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
7840: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
7850: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
7860: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
7870: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
7880: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7890: 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE>SQLITE_MAX_
78a0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65  MMAP_SIZE.# unde
78b0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
78c0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
78d0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
78e0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c  LT_MMAP_SIZE SQL
78f0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7900: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
7910: 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49  Only one of SQLI
7920: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20  TE_ENABLE_STAT3 
7930: 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
7940: 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65  _STAT4 can be de
7950: 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69  fined..** Priori
7960: 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53  ty is given to S
7970: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7980: 54 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61  T4.  If either a
7990: 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f  re defined, also
79a0: 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .** define SQLIT
79b0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
79c0: 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65  R_STAT4.*/.#ifde
79d0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
79e0: 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51  STAT4.# undef SQ
79f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7a00: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7a10: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
7a20: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
7a30: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7a40: 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  AT3.# define SQL
7a50: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7a60: 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69  _OR_STAT4 1.#eli
7a70: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7a80: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7a90: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
7aa0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7ab0: 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AT4.#endif../*.*
7ac0: 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  * SELECTTRACE_EN
7ad0: 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69  ABLED will be ei
7ae0: 74 68 65 72 20 31 20 6f 72 20 30 20 64 65 70 65  ther 1 or 0 depe
7af0: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
7b00: 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53   or not.** the S
7b10: 65 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e 65  elect query gene
7b20: 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f  rator tracing lo
7b30: 67 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  gic is turned on
7b40: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
7b50: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
7b60: 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64 65  ELECTTRACE).# de
7b70: 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45  fine SELECTTRACE
7b80: 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65  _ENABLED 1.#else
7b90: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
7ba0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a  TRACE_ENABLED 0.
7bb0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
7bc0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7bd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7be0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
7bf0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
7c00: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
7c10: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
7c20: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a  qlite handle..**
7c30: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62  .** The sqlite.b
7c40: 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65  usyHandler membe
7c50: 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20  r of the sqlite 
7c60: 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20  struct contains 
7c70: 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c  the busy.** call
7c80: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74  back for the dat
7c90: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61  abase handle. Ea
7ca0: 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20  ch pager opened 
7cb0: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a  via the sqlite.*
7cc0: 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73  * handle is pass
7cd0: 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ed a pointer to 
7ce0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7cf0: 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e  er. The busy-han
7d00: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
7d10: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
7d20: 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20  voked only from 
7d30: 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a  within pager.c..
7d40: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
7d50: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75  t BusyHandler Bu
7d60: 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63  syHandler;.struc
7d70: 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a  t BusyHandler {.
7d80: 20 20 69 6e 74 20 28 2a 78 42 75 73 79 48 61 6e    int (*xBusyHan
7d90: 64 6c 65 72 29 28 76 6f 69 64 20 2a 2c 69 6e 74  dler)(void *,int
7da0: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
7db0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
7dc0: 69 64 20 2a 70 42 75 73 79 41 72 67 3b 20 20 20  id *pBusyArg;   
7dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7de0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
7df0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
7e00: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e20: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
7e30: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
7e40: 73 79 20 63 61 6c 6c 20 2a 2f 0a 20 20 75 38 20  sy call */.  u8 
7e50: 62 45 78 74 72 61 46 69 6c 65 41 72 67 3b 20 20  bExtraFileArg;  
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7e70: 2a 20 49 6e 63 6c 75 64 65 20 73 71 6c 69 74 65  * Include sqlite
7e80: 33 5f 66 69 6c 65 20 61 73 20 63 61 6c 6c 62 61  3_file as callba
7e90: 63 6b 20 61 72 67 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ck arg */.};../*
7ea0: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
7eb0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
7ec0: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
7ed0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7ee0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
7ef0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
7f00: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
7f10: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
7f20: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
7f30: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
7f40: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
7f50: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
7f60: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
7f70: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
7f80: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
7f90: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
7fa0: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
7fb0: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7fc0: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
7fd0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
7fe0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
7ff0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
8000: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
8010: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
8020: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
8030: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
8040: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
8050: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
8060: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
8070: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
8080: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
8090: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
80a0: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
80b0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
80c0: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
80d0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
80e0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
80f0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
8100: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
8110: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
8120: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
8130: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
8140: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
8150: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
8160: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
8170: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
8180: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
8190: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
81a0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
81b0: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
81c0: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
81d0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a  nstead of the.**
81e0: 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74   one parameter t
81f0: 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20  hat destructors 
8200: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20  normally want.  
8210: 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e  So we have to in
8220: 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73 20  troduce.** this 
8230: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
8240: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
8250: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
8260: 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70  ently.  Any.** p
8270: 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b  ointer will work
8280: 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73   here as long as
8290: 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74 20   it is distinct 
82a0: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54  from SQLITE_STAT
82b0: 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45  IC.** and SQLITE
82c0: 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23  _TRANSIENT..*/.#
82d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59  define SQLITE_DY
82e0: 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65  NAMIC   ((sqlite
82f0: 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70  3_destructor_typ
8300: 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  e)sqlite3MallocS
8310: 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  ize)../*.** When
8320: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
8330: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20   is defined, it 
8340: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 74  means that the t
8350: 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64  arget platform d
8360: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f  oes.** not suppo
8370: 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61 74  rt Writable Stat
8380: 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73 75  ic Data (WSD) su
8390: 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64  ch as global and
83a0: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
83b0: 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62  s..** All variab
83c0: 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72 20  les must either 
83d0: 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20  be on the stack 
83e0: 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  or dynamically a
83f0: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a  llocated from.**
8400: 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e   the heap.  When
8410: 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72   WSD is unsuppor
8420: 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c  ted, the variabl
8430: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73  e declarations s
8440: 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f  cattered.** thro
8450: 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74  ughout the SQLit
8460: 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f  e code must beco
8470: 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73  me constants ins
8480: 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54  tead.  The SQLIT
8490: 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69  E_WSD.** macro i
84a0: 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 20  s used for this 
84b0: 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e  purpose.  And in
84c0: 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e  stead of referen
84d0: 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c  cing the variabl
84e0: 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77  e.** directly, w
84f0: 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61  e use its consta
8500: 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c  nt as a key to l
8510: 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69  ookup the run-ti
8520: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  me allocated.** 
8530: 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64  buffer that hold
8540: 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e  s real variable.
8550: 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69    The constant i
8560: 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69  s also the initi
8570: 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68  alizer.** for th
8580: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8590: 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a  ated buffer..**.
85a0: 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20  ** In the usual 
85b0: 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20 69  case where WSD i
85c0: 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  s supported, the
85d0: 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20   SQLITE_WSD and 
85e0: 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73  GLOBAL.** macros
85f0: 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61   become no-ops a
8600: 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72  nd have zero per
8610: 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e  formance impact.
8620: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
8630: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65  E_OMIT_WSD.  #de
8640: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20  fine SQLITE_WSD 
8650: 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20  const.  #define 
8660: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74  GLOBAL(t,v) (*(t
8670: 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69  *)sqlite3_wsd_fi
8680: 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20  nd((void*)&(v), 
8690: 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64  sizeof(v))).  #d
86a0: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
86b0: 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c  balConfig GLOBAL
86c0: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  (struct Sqlite3C
86d0: 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f  onfig, sqlite3Co
86e0: 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69  nfig).  int sqli
86f0: 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74  te3_wsd_init(int
8700: 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f   N, int J);.  vo
8710: 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f  id *sqlite3_wsd_
8720: 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e  find(void *K, in
8730: 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t L);.#else.  #d
8740: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
8750: 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41  .  #define GLOBA
8760: 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69  L(t,v) v.  #defi
8770: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8780: 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
8790: 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nfig.#endif../*.
87a0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
87b0: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
87c0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d   to suppress com
87d0: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61  piler warnings a
87e0: 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74  nd to.** make it
87f0: 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20   clear to human 
8800: 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66  readers when a f
8810: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
8820: 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c  r is deliberatel
8830: 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64  y.** left unused
8840: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8850: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
8860: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
8870: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
8880: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
8890: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
88a0: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
88b0: 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70  ample the.** imp
88c0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
88d0: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
88e0: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
88f0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
8900: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
8910: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
8920: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
8930: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
8940: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
8950: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
8960: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
8970: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
8980: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
8990: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
89a0: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
89b0: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
89c0: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
89d0: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
89e0: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
89f0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
8a00: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
8a10: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
8a20: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
8a30: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
8a40: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
8a50: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
8a60: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
8a70: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
8a80: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
8a90: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
8aa0: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
8ab0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
8ac0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
8ad0: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
8ae0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
8af0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
8b00: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
8b10: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
8b20: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
8b30: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
8b40: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
8b50: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
8b60: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
8b70: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
8b80: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b90: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
8ba0: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
8bb0: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
8bc0: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
8bd0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8be0: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
8bf0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8c00: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
8c10: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
8c20: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
8c30: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
8c40: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8c50: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
8c60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c70: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
8c80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c90: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
8ca0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
8cb0: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
8cc0: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
8cd0: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
8ce0: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
8cf0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
8d00: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
8d10: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b  ypedef struct FK
8d20: 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66  ey FKey;.typedef
8d30: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74   struct FuncDest
8d40: 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72  ructor FuncDestr
8d50: 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73  uctor;.typedef s
8d60: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75  truct FuncDef Fu
8d70: 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73  ncDef;.typedef s
8d80: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
8d90: 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74  h FuncDefHash;.t
8da0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64  ypedef struct Id
8db0: 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70  List IdList;.typ
8dc0: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
8dd0: 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66  x Index;.typedef
8de0: 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d   struct IndexSam
8df0: 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b  ple IndexSample;
8e00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e10: 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73  KeyClass KeyClas
8e20: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
8e30: 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66  t KeyInfo KeyInf
8e40: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8e50: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b  t Lookaside Look
8e60: 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73  aside;.typedef s
8e70: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
8e80: 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  lot LookasideSlo
8e90: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8ea0: 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b  t Module Module;
8eb0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ec0: 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65  NameContext Name
8ed0: 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66  Context;.typedef
8ee0: 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61   struct Parse Pa
8ef0: 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  rse;.typedef str
8f00: 75 63 74 20 50 72 65 55 70 64 61 74 65 20 50 72  uct PreUpdate Pr
8f10: 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66  eUpdate;.typedef
8f20: 20 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72   struct PrintfAr
8f30: 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72  guments PrintfAr
8f40: 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66  guments;.typedef
8f50: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
8f60: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
8f70: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
8f80: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
8fa0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
8fb0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
8fc0: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
8fd0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
8fe0: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
8ff0: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
9000: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
9010: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
9020: 20 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d   struct StrAccum
9030: 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64   StrAccum;.typed
9040: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20  ef struct Table 
9050: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
9060: 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20  truct TableLock 
9070: 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64  TableLock;.typed
9080: 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  ef struct Token 
9090: 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73  Token;.typedef s
90a0: 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54  truct TreeView T
90b0: 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66  reeView;.typedef
90c0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
90d0: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
90e0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50   struct TriggerP
90f0: 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74  rg TriggerPrg;.t
9100: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
9110: 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65  iggerStep Trigge
9120: 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73  rStep;.typedef s
9130: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
9140: 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63  cord UnpackedRec
9150: 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ord;.typedef str
9160: 75 63 74 20 55 70 73 65 72 74 20 55 70 73 65 72  uct Upsert Upser
9170: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9180: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
9190: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
91a0: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
91b0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
91c0: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
91d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
91e0: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
91f0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9200: 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a  t With With;../*
9210: 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74 20   A VList object 
9220: 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69 6e  records a mappin
9230: 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d 65  g between parame
9240: 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f 77  ters/variables/w
9250: 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74  ildcards.** in t
9260: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
9270: 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c 20   (such as $abc, 
9280: 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61  @pqr, or :xyz) a
9290: 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a 2a  nd the integer.*
92a0: 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  * variable numbe
92b0: 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
92c0: 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65 72  h that parameter
92d0: 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d 61  .  See the forma
92e0: 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a  t description.**
92f0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 56   on the sqlite3V
9300: 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69 6e  ListAdd() routin
9310: 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72  e for more infor
9320: 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74  mation.  A VList
9330: 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75   is really.** ju
9340: 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69  st an array of i
9350: 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65  ntegers..*/.type
9360: 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a  def int VList;..
9370: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
9380: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
9390: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
93a0: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
93b0: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
93c0: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
93d0: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
93e0: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
93f0: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
9400: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
9410: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
9420: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
9430: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
9440: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
9450: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
9460: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
9470: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  h".#include "os.
9480: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
9490: 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51  ex.h"../* The SQ
94a0: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
94b0: 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  LE compile-time 
94c0: 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73  option used to s
94d0: 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a  et the default.*
94e0: 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  * synchronous se
94f0: 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20  tting to EXTRA. 
9500: 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72   It is no longer
9510: 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23   supported..*/.#
9520: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54  ifdef SQLITE_EXT
9530: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72  RA_DURABLE.# war
9540: 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f  ning Use SQLITE_
9550: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9560: 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66  OUS=3 instead of
9570: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9580: 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53  RABLE.# define S
9590: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
95a0: 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64  NCHRONOUS 3.#end
95b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c  if../*.** Defaul
95c0: 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65  t synchronous le
95d0: 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  vels..**.** Note
95e0: 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f   that (for histo
95f0: 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68  rcal reasons) th
9600: 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  e PAGER_SYNCHRON
9610: 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66  OUS_* macros dif
9620: 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  fer.** from the 
9630: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9640: 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65  YNCHRONOUS value
9650: 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20   by 1..**.**    
9660: 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e         PAGER_SYN
9670: 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44  CHRONOUS       D
9680: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9690: 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20  US.**   OFF     
96a0: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96c0: 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20  0.**   NORMAL   
96d0: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
96f0: 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20  .**   FULL      
9700: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
9710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a                2.
9720: 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20 20  **   EXTRA      
9730: 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20 20     4            
9740: 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a               3.*
9750: 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41  *.** The "PRAGMA
9760: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74   synchronous" st
9770: 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65  atement also use
9780: 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  s the zero-based
9790: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20   numbers..** In 
97a0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
97b0: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
97c0: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
97d0: 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e   all external in
97e0: 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20  terfaces.** and 
97f0: 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61  the one-based va
9800: 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  lues are used in
9810: 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66  ternally..*/.#if
9820: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9830: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
9840: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9850: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9860: 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69 66  OUS 2.#endif.#if
9870: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
9880: 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e  ULT_WAL_SYNCHRON
9890: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
98a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
98b0: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49  SYNCHRONOUS SQLI
98c0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
98d0: 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f  RONOUS.#endif../
98e0: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
98f0: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
9900: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
9910: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
9920: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
9930: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
9940: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
9950: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
9960: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
9970: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
9980: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
9990: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
99a0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
99b0: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
99c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
99d0: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
99e0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
99f0: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
9a00: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
9a10: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
9a20: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
9a30: 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20   *zDbSName;     
9a40: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
9a50: 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68 65   database. (sche
9a60: 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c  ma name, not fil
9a70: 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65  ename) */.  Btre
9a80: 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
9a90: 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73   /* The B*Tree s
9aa0: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
9ab0: 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  s database file 
9ac0: 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c  */.  u8 safety_l
9ad0: 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77  evel;     /* How
9ae0: 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73   aggressive at s
9af0: 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64  yncing data to d
9b00: 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e  isk */.  u8 bSyn
9b10: 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  cSet;         /*
9b20: 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d 41   True if "PRAGMA
9b30: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20   synchronous=N" 
9b40: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a  has been run */.
9b50: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
9b60: 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a;     /* Pointe
9b70: 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63  r to database sc
9b80: 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73  hema (possibly s
9b90: 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  hared) */.};../*
9ba0: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
9bb0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
9bc0: 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65   structure store
9bd0: 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68  s a database sch
9be0: 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20  ema..**.** Most 
9bf0: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
9c00: 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  re associated wi
9c10: 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65  th a Btree.  The
9c20: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a   exception is.**
9c30: 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20   the Schema for 
9c40: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65  the TEMP databae
9c50: 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31  s (sqlite3.aDb[1
9c60: 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65  ]) which is free
9c70: 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e  -standing..** In
9c80: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
9c90: 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68  de, a single Sch
9ca0: 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62  ema object can b
9cb0: 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  e shared by mult
9cc0: 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74  iple.** Btrees t
9cd0: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
9ce0: 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67   same underlying
9cf0: 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74   BtShared object
9d00: 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f  ..**.** Schema o
9d10: 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d  bjects are autom
9d20: 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63  atically dealloc
9d30: 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  ated when the la
9d40: 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a  st Btree that.**
9d50: 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d   references them
9d60: 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20   is destroyed.  
9d70: 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61   The TEMP Schema
9d80: 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65   is manually fre
9d90: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
9da0: 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41  _close()..*.** A
9db0: 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20   thread must be 
9dc0: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
9dd0: 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
9de0: 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72  ding Btree in or
9df0: 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73  der.** to access
9e00: 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e   Schema content.
9e10: 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74    This implies t
9e20: 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d  hat the thread m
9e30: 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68  ust also be.** h
9e40: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
9e50: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f  n the sqlite3 co
9e60: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
9e70: 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42   that owns the B
9e80: 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54  tree..** For a T
9e90: 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79  EMP Schema, only
9ea0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
9eb0: 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65  mutex is require
9ec0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68  d..*/.struct Sch
9ed0: 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65  ema {.  int sche
9ee0: 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  ma_cookie;   /* 
9ef0: 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  Database schema 
9f00: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
9f10: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
9f20: 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f    int iGeneratio
9f30: 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61  n;     /* Genera
9f40: 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49  tion counter.  I
9f50: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
9f60: 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20  each change */. 
9f70: 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20   Hash tblHash;  
9f80: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62        /* All tab
9f90: 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  les indexed by n
9fa0: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64  ame */.  Hash id
9fb0: 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  xHash;        /*
9fc0: 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64   All (named) ind
9fd0: 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  ices indexed by 
9fe0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  name */.  Hash t
9ff0: 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f  rigHash;       /
a000: 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69  * All triggers i
a010: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a020: 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73  /.  Hash fkeyHas
a030: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
a040: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20  foreign keys by 
a050: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
a060: 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65   name */.  Table
a070: 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20   *pSeqTab;      
a080: 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  /* The sqlite_se
a090: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65  quence table use
a0a0: 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45  d by AUTOINCREME
a0b0: 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f  NT */.  u8 file_
a0c0: 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20  format;      /* 
a0d0: 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65  Schema format ve
a0e0: 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66  rsion for this f
a0f0: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ile */.  u8 enc;
a100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a110: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75   Text encoding u
a120: 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61  sed by this data
a130: 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63  base */.  u16 sc
a140: 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f  hemaFlags;     /
a150: 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74  * Flags associat
a160: 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68  ed with this sch
a170: 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63  ema */.  int cac
a180: 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a  he_size;      /*
a190: 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
a1a0: 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63   to use in the c
a1b0: 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ache */.};../*.*
a1c0: 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
a1d0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
a1e0: 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
a1f0: 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a  r bits in the.**
a200: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
a210: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
a220: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
a230: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
a240: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
a250: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
a260: 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
a270: 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70  ine DbHasAnyProp
a280: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28  erty(D,I,P)  (((
a290: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a2a0: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
a2b0: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
a2c0: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
a2d0: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
a2e0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a2f0: 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a  chemaFlags|=(P).
a300: 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50  #define DbClearP
a310: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a320: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
a330: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
a340: 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41  s&=~(P)../*.** A
a350: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
a360: 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61  r the DB.pSchema
a370: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
a380: 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65  *.** The DB_Sche
a390: 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73  maLoaded flag is
a3a0: 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64   set after the d
a3b0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
a3c0: 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20  as been.** read 
a3d0: 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61  into internal ha
a3e0: 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  sh tables..**.**
a3f0: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a400: 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20   means that one 
a410: 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61  or more views ha
a420: 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ve column names 
a430: 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65  that.** have bee
a440: 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49  n filled out.  I
a450: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  f the schema cha
a460: 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75  nges, these colu
a470: 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a  mn names might.*
a480: 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f  * changes and so
a490: 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e   the view will n
a4a0: 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e  eed to be reset.
a4b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53  .*/.#define DB_S
a4c0: 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30  chemaLoaded    0
a4d0: 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63  x0001  /* The sc
a4e0: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f  hema has been lo
a4f0: 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aded */.#define 
a500: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
a510: 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f     0x0002  /* So
a520: 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65  me views have de
a530: 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  fined column nam
a540: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
a550: 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20  _Empty          
a560: 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20   0x0004  /* The 
a570: 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c  file is empty (l
a580: 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a  ength 0 bytes) *
a590: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 52 65 73  /.#define DB_Res
a5a0: 65 74 57 61 6e 74 65 64 20 20 20 20 20 30 78 30  etWanted     0x0
a5b0: 30 30 38 20 20 2f 2a 20 52 65 73 65 74 20 74 68  008  /* Reset th
a5c0: 65 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 53  e schema when nS
a5d0: 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a  chemaLock==0 */.
a5e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
a5f0: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
a600: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
a610: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
a620: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
a630: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
a640: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
a650: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
a660: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
a670: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
a680: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
a690: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
a6a0: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
a6b0: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
a6c0: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
a6d0: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
a6e0: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
a6f0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
a700: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
a710: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
a720: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a730: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a740: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
a750: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
a760: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
a770: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
a780: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
a790: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
a7a0: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
a7b0: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
a7c0: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
a7d0: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
a7e0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
a7f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
a800: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
a810: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
a820: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
a830: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
a840: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
a850: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
a860: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
a870: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
a880: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
a890: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
a8a0: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
a8b0: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
a8c0: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
a8d0: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
a8e0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
a8f0: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
a900: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
a910: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
a920: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
a930: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
a940: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
a950: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
a960: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
a970: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
a980: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
a990: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
a9a0: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
a9b0: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
a9c0: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
a9d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
a9e0: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
a9f0: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
aa00: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
aa10: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
aa20: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
aa30: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
aa40: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
aa50: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
aa60: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
aa70: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
aa80: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
aa90: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
aaa0: 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c   {.  u32 bDisabl
aab0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
aac0: 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65  Only operate the
aad0: 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20   lookaside when 
aae0: 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a  zero */.  u16 sz
aaf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ab00: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
ab10: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
ab20: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
ab30: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
ab40: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
ab50: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
ab60: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
ab70: 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20  */.  u32 nSlot; 
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ab90: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73  Number of lookas
aba0: 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61  ide slots alloca
abb0: 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53  ted */.  u32 anS
abc0: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
abd0: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
abe0: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
abf0: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
ac00: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
ac10: 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69   *pInit;   /* Li
ac20: 73 74 20 6f 66 20 62 75 66 66 65 72 73 20 6e 6f  st of buffers no
ac30: 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
ac40: 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  d */.  Lookaside
ac50: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
ac60: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
ac70: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
ac80: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
ac90: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
aca0: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
acb0: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
acc0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
acd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
ace0: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
acf0: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
ad00: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
ad10: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
ad20: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
ad30: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
ad40: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
ad50: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
ad60: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
ad70: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
ad80: 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69  able for built-i
ad90: 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  n function defin
ada0: 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63  itions.  (Applic
adb0: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a  ation-defined.**
adc0: 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61   functions use a
add0: 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74   regular table t
ade0: 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68  able from hash.h
adf0: 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  .).**.** Hash ea
ae00: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
ae10: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
ae20: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
ae30: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
ae40: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
ae50: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70   the FuncDef.u.p
ae60: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23  Hash chain..*/.#
ae70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ae80: 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74  NC_HASH_SZ 23.st
ae90: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
aea0: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
aeb0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
aec0: 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  _SZ];       /* H
aed0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
aee0: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23  nctions */.};..#
aef0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
af00: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
af10: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
af20: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
af30: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
af40: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
af50: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
af60: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
af70: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
af80: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
af90: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
afa0: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
afb0: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
afc0: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
afd0: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aff0: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
b000: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
b010: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b030: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
b040: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
b050: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
b060: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
b070: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
b080: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
b090: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
b0a0: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
b0b0: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
b0c0: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
b0d0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
b0e0: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
b0f0: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
b100: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
b110: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
b120: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
b130: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
b140: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
b150: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
b160: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
b170: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
b180: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
b190: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
b1a0: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
b1b0: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
b1c0: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
b1d0: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
b1e0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
b1f0: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
b200: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
b210: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
b220: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
b230: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
b240: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
b250: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
b260: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
b270: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
b280: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
b290: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
b2a0: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
b2b0: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
b2c0: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
b2d0: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
b2e0: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
b2f0: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
b300: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
b310: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
b320: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b330: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b340: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
b350: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
b360: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
b370: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
b380: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
b390: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b3a0: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
b3b0: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
b3c0: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
b3d0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b3e0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b3f0: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b410: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
b420: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
b430: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
b440: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
b450: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
b460: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b470: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b480: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b4b0: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
b4c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b4d0: 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73  CATED./* This is
b4e0: 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45   an extra SQLITE
b4f0: 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61  _TRACE macro tha
b500: 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67  t indicates "leg
b510: 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20  acy" tracing.** 
b520: 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20  in the style of 
b530: 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a  sqlite3_trace().
b540: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b550: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
b560: 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69  0x80.#else.#defi
b570: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
b580: 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66  LEGACY  0.#endif
b590: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
b5a0: 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a  DEPRECATED */...
b5b0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
b5c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
b5d0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
b5e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
b5f0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
b600: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
b610: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
b620: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
b630: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
b640: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
b650: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
b660: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
b670: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
b680: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
b690: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
b6a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
b6b0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
b6c0: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
b6d0: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
b6e0: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
b6f0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
b700: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
b710: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
b720: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
b730: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
b740: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b760: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
b770: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
b780: 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6d  n use */.  u32 m
b790: 44 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  DbFlags;        
b7a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67           /* flag
b7b0: 73 20 72 65 63 6f 72 64 69 6e 67 20 69 6e 74 65  s recording inte
b7c0: 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20  rnal state */.  
b7d0: 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b7f0: 20 66 6c 61 67 73 20 73 65 74 74 61 62 6c 65 20   flags settable 
b800: 62 79 20 70 72 61 67 6d 61 73 2e 20 53 65 65 20  by pragmas. See 
b810: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c  below */.  i64 l
b820: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
b830: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
b840: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
b850: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
b860: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d  ve) */.  i64 szM
b870: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
b880: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
b890: 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74  t mmap_size sett
b8a0: 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6e 53 63  ing */.  u32 nSc
b8b0: 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20 20 20 20  hemaLock;       
b8c0: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
b8d0: 20 72 65 73 65 74 20 74 68 65 20 73 63 68 65 6d   reset the schem
b8e0: 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  a when non-zero 
b8f0: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
b900: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
b910: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
b920: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
b930: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
b940: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b960: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
b970: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
b980: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
b990: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
b9a0: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
b9b0: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
b9c0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
b9d0: 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73 45  g */.  int iSysE
b9e0: 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20 20  rrno;           
b9f0: 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76 61       /* Errno va
ba00: 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73 79  lue from last sy
ba10: 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20 20  stem error */.  
ba20: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ba40: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
ba50: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
ba60: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65  ations */.  u8 e
ba70: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
ba80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
ba90: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  t encoding */.  
baa0: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bac0: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
bad0: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
bae0: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
baf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
bb00: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
bb10: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
bb20: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bb40: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
bb50: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
bb60: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42  ilure */.  u8 bB
bb70: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20  enignMalloc;    
bb80: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
bb90: 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20  ot require OOMs 
bba0: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
bbb0: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20  dfltLockMode;   
bbc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
bbd0: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  fault locking-mo
bbe0: 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20  de for attached 
bbf0: 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20  dbs */.  signed 
bc00: 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63  char nextAutovac
bc10: 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61  ;      /* Autova
bc20: 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20  c setting after 
bc30: 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f  VACUUM if >=0 */
bc40: 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72  .  u8 suppressEr
bc50: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
bc60: 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65   /* Do not issue
bc70: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
bc80: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
bc90: 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20  vtabOnConflict; 
bca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
bcb0: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f  lue to return fo
bcc0: 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e  r s3_vtab_on_con
bcd0: 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20  flict() */.  u8 
bce0: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
bcf0: 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72  epoint;    /* Tr
bd00: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d  ue if the outerm
bd10: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73  ost savepoint is
bd20: 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54   a TS */.  u8 mT
bd30: 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20 20  race;           
bd40: 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f           /* zero
bd50: 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f   or more SQLITE_
bd60: 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20  TRACE flags */. 
bd70: 20 75 38 20 73 6b 69 70 42 74 72 65 65 4d 75 74   u8 skipBtreeMut
bd80: 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex;            /
bd90: 2a 20 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61  * True if no sha
bda0: 72 65 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e  red-cache backen
bdb0: 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45  ds */.  u8 nSqlE
bdc0: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
bdd0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bde0: 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71  of pending OP_Sq
bdf0: 6c 45 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f  lExec opcodes */
be00: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
be10: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
be20: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
be30: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
be40: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be60: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
be70: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
be80: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
be90: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
bea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
beb0: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
bec0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
bed0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
bee0: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
bef0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
bf00: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
bf10: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
bf20: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
bf30: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
bf40: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
bf50: 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  its */.  int nMa
bf60: 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20  xSorterMmap;    
bf70: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
bf80: 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e  m size of region
bf90: 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74  s mapped by sort
bfa0: 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  er */.  struct s
bfb0: 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b  qlite3InitInfo {
bfc0: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
bfd0: 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67  tion used during
bfe0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
bff0: 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e  */.    int newTn
c000: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
c010: 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f     /* Rootpage o
c020: 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  f table being in
c030: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
c040: 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20   u8 iDb;        
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c060: 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73  Which db file is
c070: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
c080: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73  ed */.    u8 bus
c090: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
c0a0: 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66        /* TRUE if
c0b0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69   currently initi
c0c0: 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75  alizing */.    u
c0d0: 6e 73 69 67 6e 65 64 20 6f 72 70 68 61 6e 54 72  nsigned orphanTr
c0e0: 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a 20 4c 61  igger : 1; /* La
c0f0: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  st statement is 
c100: 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72  orphaned TEMP tr
c110: 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 6e 73  igger */.    uns
c120: 69 67 6e 65 64 20 69 6d 70 6f 73 74 65 72 54 61  igned imposterTa
c130: 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42 75 69 6c  ble : 1; /* Buil
c140: 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72  ding an imposter
c150: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e   table */.    un
c160: 73 69 67 6e 65 64 20 72 65 6f 70 65 6e 4d 65 6d  signed reopenMem
c170: 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20 41 54 54  db : 1;   /* ATT
c180: 41 43 48 20 69 73 20 72 65 61 6c 6c 79 20 61 20  ACH is really a 
c190: 72 65 6f 70 65 6e 20 75 73 69 6e 67 20 4d 65 6d  reopen using Mem
c1a0: 44 42 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a  DB */.  } init;.
c1b0: 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76    int nVdbeActiv
c1c0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
c1d0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42  /* Number of VDB
c1e0: 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e  Es currently run
c1f0: 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ning */.  int nV
c200: 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20 20  dbeRead;        
c210: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c220: 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45  r of active VDBE
c230: 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20 77  s that read or w
c240: 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  rite */.  int nV
c250: 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20 20  dbeWrite;       
c260: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c270: 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45  r of active VDBE
c280: 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64 20  s that read and 
c290: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
c2a0: 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20 20  VdbeExec;       
c2b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c2c0: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c  er of nested cal
c2d0: 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28 29  ls to VdbeExec()
c2e0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74   */.  int nVDest
c2f0: 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  roy;            
c300: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c310: 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74   active OP_VDest
c320: 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a  roy operations *
c330: 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69  /.  int nExtensi
c340: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  on;             
c350: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
c360: 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73  oaded extensions
c370: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78   */.  void **aEx
c380: 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20  tension;        
c390: 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
c3a0: 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20 68  shared library h
c3b0: 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74 20  andles */.  int 
c3c0: 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c 76 6f  (*xTrace)(u32,vo
c3d0: 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 29  id*,void*,void*)
c3e0: 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66  ;     /* Trace f
c3f0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
c400: 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20  d *pTraceArg;   
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c420: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c430: 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20  nt to the trace 
c440: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c450: 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76  id (*xProfile)(v
c460: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
c470: 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69  ,u64);  /* Profi
c480: 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ling function */
c490: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c  .  void *pProfil
c4a0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c4c0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66  Argument to prof
c4d0: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ile function */.
c4e0: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
c4f0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c500: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
c510: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
c520: 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ck() */.  int (*
c530: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
c540: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
c550: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
c560: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
c570: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
c580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c590: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
c5a0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
c5b0: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52  ) */.  void (*xR
c5c0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
c5d0: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
c5e0: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
c5f0: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
c600: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
c610: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
c620: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
c630: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
c640: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
c650: 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53  int64);.#ifdef S
c660: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
c670: 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f  UPDATE_HOOK.  vo
c680: 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72  id *pPreUpdateAr
c690: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  g;          /* F
c6a0: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
c6b0: 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62   xPreUpdateCallb
c6c0: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ack */.  void (*
c6d0: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
c6e0: 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74  ck)(   /* Regist
c6f0: 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ered using sqlit
c700: 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f  e3_preupdate_hoo
c710: 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a  k() */.    void*
c720: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68  ,sqlite3*,int,ch
c730: 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63  ar const*,char c
c740: 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e  onst*,sqlite3_in
c750: 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  t64,sqlite3_int6
c760: 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61  4.  );.  PreUpda
c770: 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20  te *pPreUpdate; 
c780: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
c790: 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65  t for active pre
c7a0: 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b  -update callback
c7b0: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
c7c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
c7d0: 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69  PDATE_HOOK */.#i
c7e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c7f0: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
c800: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
c810: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
c820: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
c830: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
c840: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
c850: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
c860: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
c870: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
c880: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
c890: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
c8a0: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
c8b0: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
c8c0: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
c8d0: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
c8e0: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
c8f0: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
c900: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
c910: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
c920: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
c930: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
c940: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
c950: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
c960: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
c970: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
c980: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
c990: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c9a0: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
c9b0: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
c9c0: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
c9d0: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
c9e0: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
c9f0: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
ca00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
ca10: 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  RIZATION.  sqlit
ca20: 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20  e3_xauth xAuth; 
ca30: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
ca40: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
ca50: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
ca60: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ca80: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
ca90: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
caa0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
cab0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
cac0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
cad0: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
cae0: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
caf0: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
cb00: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
cb10: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
cb20: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
cb30: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
cb40: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
cb50: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75   callback */.  u
cb60: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
cb70: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  sOps;        /* 
cb80: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
cb90: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
cba0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
cbb0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
cbc0: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
cbd0: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
cbe0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
cbf0: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
cc00: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
cc10: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
cc20: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
cc30: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
cc40: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
cc50: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
cc60: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
cc70: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
cc80: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
cc90: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
cca0: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
ccb0: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
ccc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
ccd0: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
cce0: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
ccf0: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
cd00: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
cd10: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e         /* Discon
cd20: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
cd30: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
cd40: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
cd50: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cd70: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
cd80: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
cd90: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
cda0: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
cdb0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
cdc0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
cdd0: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
cde0: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
cdf0: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
ce00: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
ce10: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
ce20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
ce30: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
ce40: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
ce50: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
ce60: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
ce70: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
ce80: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
ce90: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
cea0: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
ceb0: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
cec0: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
ced0: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
cee0: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
cf00: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
cf10: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
cf20: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
cf30: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
cf40: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
cf50: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
cf60: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
cf70: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
cf80: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
cf90: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
cfa0: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
cfb0: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
cfc0: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
cfd0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
cfe0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
cff0: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
d000: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d010: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
d020: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
d030: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
d040: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
d050: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
d060: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
d070: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
d080: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
d090: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
d0a0: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
d0b0: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
d0c0: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
d0d0: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
d0e0: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
d0f0: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
d100: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
d110: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
d120: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
d130: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
d140: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
d150: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
d160: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
d170: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
d180: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
d190: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
d1a0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d1b0: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
d1c0: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
d1d0: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
d1e0: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
d1f0: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
d200: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
d210: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
d220: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
d230: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
d240: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
d250: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
d260: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
d270: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
d280: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
d290: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
d2a0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
d2b0: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
d2c0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
d2d0: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
d2e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
d2f0: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
d300: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
d310: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
d320: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
d330: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
d340: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
d350: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
d360: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
d370: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
d380: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
d390: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
d3a0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
d3b0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
d3c0: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
d3d0: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
d3e0: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
d3f0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
d400: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
d410: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
d420: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
d430: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
d440: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
d450: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
d460: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
d470: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
d480: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
d490: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
d4a0: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
d4b0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
d4c0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
d4d0: 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  gs..**.** Value 
d4e0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
d4f0: 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
d500: 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c  ()):.**      SQL
d510: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
d520: 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46    == PAGER_FULLF
d530: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
d540: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
d550: 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f  c == PAGER_CKPT_
d560: 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20  FULLFSYNC.**    
d570: 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70    SQLITE_CacheSp
d580: 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f  ill    == PAGER_
d590: 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23  CACHE_SPILL.*/.#
d5a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
d5b0: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
d5c0: 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74  0000001  /* OK t
d5d0: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
d5e0: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
d5f0: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
d600: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30 30  ileFmt  0x000000
d610: 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  02  /* Create ne
d620: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
d630: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
d640: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
d650: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
d660: 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  004  /* Show ful
d670: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
d680: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
d690: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
d6a0: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30  Sync      0x0000
d6b0: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
d6c0: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
d6d0: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
d6e0: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
d6f0: 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30  lFSync  0x000000
d700: 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  10  /* Use full 
d710: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
d720: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
d730: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
d740: 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30  l     0x00000020
d750: 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c    /* OK to spill
d760: 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a   pager cache */.
d770: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
d780: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
d790: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
d7a0: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
d7b0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
d7c0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
d7d0: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
d7e0: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
d7f0: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
d800: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d830: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
d840: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
d850: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
d860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d880: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
d890: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
d8a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d8b0: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
d8c0: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
d8d0: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
d8e0: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
d8f0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d920: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
d930: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
d940: 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43  e SQLITE_IgnoreC
d950: 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30 32  hecks   0x000002
d960: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e  00  /* Do not en
d970: 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73  force check cons
d980: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
d990: 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  ne SQLITE_ReadUn
d9a0: 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30 30  commit   0x00000
d9b0: 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e 43  400  /* READ UNC
d9c0: 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61 72  OMMITTED in shar
d9d0: 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  ed-cache */.#def
d9e0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70  ine SQLITE_NoCkp
d9f0: 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30 30  tOnClose  0x0000
da00: 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63  0800  /* No chec
da10: 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28  kpoint on close(
da20: 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65 66  )/DETACH */.#def
da30: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
da40: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 30  seOrder   0x0000
da50: 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  1000  /* Reverse
da60: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
da70: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
da80: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
da90: 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20      0x00002000  
daa0: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
dab0: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
dac0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
dad0: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
dae0: 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e 66  00004000  /* Enf
daf0: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
db00: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
db10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
db20: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
db30: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45 6e  x00008000  /* En
db40: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
db50: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
db60: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
db70: 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30 30  ension  0x000100
db80: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
db90: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
dba0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
dbb0: 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30 78  oadExtFunc    0x
dbc0: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61  00020000  /* Ena
dbd0: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
dbe0: 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f  on() SQL func */
dbf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dc00: 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30  EnableTrigger  0
dc10: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54 72  x00040000  /* Tr
dc20: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69  ue to enable tri
dc30: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
dc40: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
dc50: 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30 30         0x0008000
dc60: 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20  0  /* Defer all 
dc70: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  FK constraints *
dc80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dc90: 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20  _QueryOnly      
dca0: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 44  0x00100000  /* D
dcb0: 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20  isable database 
dcc0: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
dcd0: 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69  ne SQLITE_CellSi
dce0: 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30 30  zeCk     0x00200
dcf0: 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74  000  /* Check bt
dd00: 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f  ree cell sizes o
dd10: 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e  n load */.#defin
dd20: 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b  e SQLITE_Fts3Tok
dd30: 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30 30  enizer  0x004000
dd40: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74  00  /* Enable ft
dd50: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20  s3_tokenizer(2) 
dd60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dd70: 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20 20  E_EnableQPSG    
dd80: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
dd90: 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53 74  Query Planner St
dda0: 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74 65  ability Guarante
ddb0: 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  e*/.#define SQLI
ddc0: 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20 20  TE_TriggerEQP   
ddd0: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
dde0: 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45 58   Show trigger EX
ddf0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
de00: 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20 75 73   */../* Flags us
de10: 65 64 20 6f 6e 6c 79 20 69 66 20 64 65 62 75 67  ed only if debug
de20: 67 69 6e 67 20 2a 2f 0a 23 69 66 64 65 66 20 53  ging */.#ifdef S
de30: 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66  QLITE_DEBUG.#def
de40: 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  ine SQLITE_SqlTr
de50: 61 63 65 20 20 20 20 20 20 20 30 78 30 38 30 30  ace       0x0800
de60: 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70  0000  /* Debug p
de70: 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65  rint SQL as it e
de80: 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69  xecutes */.#defi
de90: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  ne SQLITE_VdbeLi
dea0: 73 74 69 6e 67 20 20 20 20 30 78 31 30 30 30 30  sting    0x10000
deb0: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69  000  /* Debug li
dec0: 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70  stings of VDBE p
ded0: 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69  rograms */.#defi
dee0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
def0: 61 63 65 20 20 20 20 20 20 30 78 32 30 30 30 30  ace      0x20000
df00: 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  000  /* True to 
df10: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
df20: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
df30: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
df40: 54 72 61 63 65 20 30 78 34 30 30 30 30 30 30 30  Trace 0x40000000
df50: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
df60: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
df70: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
df80: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
df90: 20 20 20 20 20 30 78 38 30 30 30 30 30 30 30 20       0x80000000 
dfa0: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
dfb0: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
dfc0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c  #endif../*.** Al
dfd0: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
dfe0: 20 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67   sqlite3.mDbFlag
dff0: 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46  s.*/.#define DBF
e000: 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65  LAG_SchemaChange
e010: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e     0x0001  /* Un
e020: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
e030: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
e040: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50  #define DBFLAG_P
e050: 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78  referBuiltin  0x
e060: 30 30 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65  0002  /* Prefere
e070: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
e080: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
e090: 20 44 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20   DBFLAG_Vacuum  
e0a0: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
e0b0: 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61  * Currently in a
e0c0: 20 56 41 43 55 55 4d 20 2a 2f 0a 0a 2f 2a 0a 2a   VACUUM */../*.*
e0d0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
e0e0: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
e0f0: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
e100: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
e110: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
e120: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
e130: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
e140: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
e150: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
e160: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
e170: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
e180: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
e190: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
e1a0: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
e1b0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
e1c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e1d0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
e1e0: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
e1f0: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
e200: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
e210: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
e220: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
e230: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
e240: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e250: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
e260: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
e270: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
e280: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e290: 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20  E_DistinctOpt   
e2a0: 20 30 78 30 30 31 30 20 20 20 2f 2a 20 44 49 53   0x0010   /* DIS
e2b0: 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65  TINCT using inde
e2c0: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
e2d0: 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63  QLITE_CoverIdxSc
e2e0: 61 6e 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  an   0x0020   /*
e2f0: 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   Covering index 
e300: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
e310: 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49   SQLITE_OrderByI
e320: 64 78 4a 6f 69 6e 20 30 78 30 30 34 30 20 20 20  dxJoin 0x0040   
e330: 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a  /* ORDER BY of j
e340: 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a  oins via index *
e350: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e360: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
e370: 30 78 30 30 38 30 20 20 20 2f 2a 20 54 72 61 6e  0x0080   /* Tran
e380: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
e390: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
e3a0: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
e3b0: 6e 20 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20  n   0x0100   /* 
e3c0: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
e3d0: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
e3e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
e3f0: 75 6e 74 4f 66 56 69 65 77 20 20 20 20 30 78 30  untOfView    0x0
e400: 32 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75  200   /* The cou
e410: 6e 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d  nt-of-view optim
e420: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
e430: 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72  ne SQLITE_Cursor
e440: 48 69 6e 74 73 20 20 20 20 30 78 30 34 30 30 20  Hints    0x0400 
e450: 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73    /* Add OP_Curs
e460: 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a  orHint opcodes *
e470: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e480: 5f 53 74 61 74 33 34 20 20 20 20 20 20 20 20 20  _Stat34         
e490: 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20  0x0800   /* Use 
e4a0: 53 54 41 54 33 20 6f 72 20 53 54 41 54 34 20 64  STAT3 or STAT4 d
e4b0: 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33  ata */.   /* TH3
e4c0: 20 65 78 70 65 63 74 73 20 74 68 65 20 53 74 61   expects the Sta
e4d0: 74 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75  t34  ^^^^^^ valu
e4e0: 65 20 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20  e to be 0x0800. 
e4f0: 20 44 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74   Don't change it
e500: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e510: 54 45 5f 50 75 73 68 44 6f 77 6e 20 20 20 20 20  TE_PushDown     
e520: 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20 54 68    0x1000   /* Th
e530: 65 20 70 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69  e push-down opti
e540: 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mization */.#def
e550: 69 6e 65 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c  ine SQLITE_Simpl
e560: 69 66 79 4a 6f 69 6e 20 20 20 30 78 32 30 30 30  ifyJoin   0x2000
e570: 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45     /* Convert LE
e580: 46 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20  FT JOIN to JOIN 
e590: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e5a0: 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20  E_AllOpts       
e5b0: 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c   0xffff   /* All
e5c0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
e5d0: 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  /../*.** Macros 
e5e0: 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74  for testing whet
e5f0: 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d  her or not optim
e600: 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61  izations are ena
e610: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
e620: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74  ..*/.#define Opt
e630: 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65  imizationDisable
e640: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28  d(db, mask)  (((
e650: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
e660: 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66  (mask))!=0).#def
e670: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
e680: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
e690: 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  )   (((db)->dbOp
e6a0: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d  tFlags&(mask))==
e6b0: 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  0)../*.** Return
e6c0: 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74   true if it OK t
e6d0: 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e  o factor constan
e6e0: 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  t expressions in
e6f0: 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  to the initializ
e700: 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54  ation.** code. T
e710: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
e720: 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f   Parse object fo
e730: 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  r the code gener
e740: 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ator..*/.#define
e750: 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50   ConstFactorOk(P
e760: 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46  ) ((P)->okConstF
e770: 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  actor)../*.** Po
e780: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
e790: 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67  r the sqlite.mag
e7a0: 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65  ic field..** The
e7b0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74   numbers are obt
e7c0: 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20  ained at random 
e7d0: 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63  and have no spec
e7e0: 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68  ial meaning, oth
e7f0: 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67  er.** than being
e800: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f   distinct from o
e810: 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23  ne another..*/.#
e820: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
e830: 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61  GIC_OPEN     0xa
e840: 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61  029a697  /* Data
e850: 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a  base is open */.
e860: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
e870: 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78  AGIC_CLOSED   0x
e880: 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74  9f3c2d33  /* Dat
e890: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20  abase is closed 
e8a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e8b0: 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20  E_MAGIC_SICK    
e8c0: 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20   0x4b771290  /* 
e8d0: 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69  Error and awaiti
e8e0: 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66  ng close */.#def
e8f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
e900: 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62  _BUSY     0xf03b
e910: 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73  7906  /* Databas
e920: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  e currently in u
e930: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
e940: 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
e950: 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20      0xb5357930  
e960: 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53  /* An SQLITE_MIS
e970: 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72  USE error occurr
e980: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
e990: 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49  LITE_MAGIC_ZOMBI
e9a0: 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20  E   0x64cffc7f  
e9b0: 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61  /* Close with la
e9c0: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f  st statement clo
e9d0: 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  se */../*.** Eac
e9e0: 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  h SQL function i
e9f0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
ea00: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
ea10: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
ea20: 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f  ucture.  For glo
ea30: 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  bal built-in fun
ea40: 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73  ctions (ex: subs
ea50: 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75  tr(), max(), cou
ea60: 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74  nt()).** a point
ea70: 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
ea80: 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20  ture is held in 
ea90: 74 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74  the sqlite3Built
eaa0: 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65  inFunctions obje
eab0: 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63  ct..** For per-c
eac0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63  onnection applic
ead0: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75  ation-defined fu
eae0: 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74  nctions, a point
eaf0: 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74  er to this.** st
eb00: 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20  ructure is held 
eb10: 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68  in the db->aHash
eb20: 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a   hash table..**.
eb30: 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20 66  ** The u.pHash f
eb40: 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20  ield is used by 
eb50: 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74  the global built
eb60: 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65  -ins.  The u.pDe
eb70: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c  structor.** fiel
eb80: 64 20 69 73 20 75 73 65 64 20 62 79 20 70 65 72  d is used by per
eb90: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d  -connection app-
eba0: 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  def functions..*
ebb0: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  /.struct FuncDef
ebc0: 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20   {.  i8 nArg;   
ebd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ebe0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
ebf0: 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69  .  -1 means unli
ec00: 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66  mited */.  u16 f
ec10: 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20  uncFlags;       
ec20: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
ec30: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
ec40: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
ec50: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
ec60: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
ec70: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
ec80: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
ec90: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
eca0: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
ecb0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75  */.  void (*xSFu
ecc0: 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  nc)(sqlite3_cont
ecd0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
ece0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75  _value**); /* fu
ecf0: 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a  nc or agg-step *
ed00: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  /.  void (*xFina
ed10: 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  lize)(sqlite3_co
ed20: 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20  ntext*);        
ed30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67            /* Agg
ed40: 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20   finalizer */.  
ed50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
ed60: 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65  e;   /* SQL name
ed70: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
ed80: 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  . */.  union {. 
ed90: 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73     FuncDef *pHas
eda0: 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  h;      /* Next 
edb0: 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74  with a different
edc0: 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61   name but the sa
edd0: 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 46  me hash */.    F
ede0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
edf0: 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a  Destructor;   /*
ee00: 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   Reference count
ee10: 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  ed destructor fu
ee20: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b  nction */.  } u;
ee30: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
ee40: 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73  structure encaps
ee50: 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75  ulates a user-fu
ee60: 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f  nction destructo
ee70: 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a  r callback (as.*
ee80: 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69  * configured usi
ee90: 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  ng create_functi
eea0: 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72  on_v2()) and a r
eeb0: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72  eference counter
eec0: 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65  . When.** create
eed0: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69  _function_v2() i
eee0: 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61  s called to crea
eef0: 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69  te a function wi
ef00: 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c  th a destructor,
ef10: 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a  .** a single obj
ef20: 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
ef30: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46   is allocated. F
ef40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52  uncDestructor.nR
ef50: 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  ef is set to.** 
ef60: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75  the number of Fu
ef70: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72  ncDef objects cr
ef80: 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20  eated (either 1 
ef90: 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20  or 3, depending 
efa0: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72  on whether.** or
efb0: 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69   not the specifi
efc0: 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53  ed encoding is S
efd0: 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20  QLITE_ANY). The 
efe0: 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63  FuncDef.pDestruc
eff0: 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66  tor.** member of
f000: 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77   each of the new
f010: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
f020: 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   is set to point
f030: 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65   to the allocate
f040: 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63  d.** FuncDestruc
f050: 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  tor..**.** There
f060: 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20  after, when one 
f070: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f  of the FuncDef o
f080: 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65  bjects is delete
f090: 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  d, the reference
f0a0: 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69  .** count on thi
f0b0: 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72  s object is decr
f0c0: 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74  emented. When it
f0d0: 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20   reaches 0, the 
f0e0: 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73  destructor.** is
f0f0: 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65   invoked and the
f100: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
f110: 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e  structure freed.
f120: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
f130: 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e  estructor {.  in
f140: 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28  t nRef;.  void (
f150: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
f160: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  *);.  void *pUse
f170: 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rData;.};../*.**
f180: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
f190: 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61   for FuncDef.fla
f1a0: 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  gs.  Note that t
f1b0: 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f  he _LENGTH and _
f1c0: 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73  TYPEOF.** values
f1d0: 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   must correspond
f1e0: 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   to OPFLAG_LENGT
f1f0: 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
f200: 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a  TYPEOFARG.  And.
f210: 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ** SQLITE_FUNC_C
f220: 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20  ONSTANT must be 
f230: 74 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49  the same as SQLI
f240: 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43  TE_DETERMINISTIC
f250: 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
f260: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
f270: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20  nts in the code 
f280: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a  to verify this..
f290: 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
f2a0: 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
f2b0: 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
f2c0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
f2d0: 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d  UNC_MINMAX    ==
f2e0: 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20    NC_MinMaxAgg  
f2f0: 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78      == SF_MinMax
f300: 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  Agg.**     SQLIT
f310: 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20  E_FUNC_LENGTH   
f320: 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   ==  OPFLAG_LENG
f330: 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c  THARG.**     SQL
f340: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
f350: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59     ==  OPFLAG_TY
f360: 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20 53  PEOFARG.**     S
f370: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
f380: 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f  ANT  ==  SQLITE_
f390: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66 72  DETERMINISTIC fr
f3a0: 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20 20  om the API.**   
f3b0: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e    SQLITE_FUNC_EN
f3c0: 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73 20  CMASK   depends 
f3d0: 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d  on SQLITE_UTF* m
f3e0: 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50 49  acros in the API
f3f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
f400: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
f410: 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49 54   0x0003 /* SQLIT
f420: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55  E_UTF8, SQLITE_U
f430: 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c  TF16BE or UTF16L
f440: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
f450: 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20  ITE_FUNC_LIKE   
f460: 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e 64    0x0004 /* Cand
f470: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
f480: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
f490: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f4a0: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
f4b0: 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d 73  0x0008 /* Case-s
f4c0: 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79  ensitive LIKE-ty
f4d0: 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  pe function */.#
f4e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f4f0: 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 30  NC_EPHEM    0x00
f500: 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e  10 /* Ephemeral.
f510: 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44    Delete with VD
f520: 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BE */.#define SQ
f530: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
f540: 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71 6c  LL 0x0020 /* sql
f550: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
f560: 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61  eq() might be ca
f570: 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lled*/.#define S
f580: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
f590: 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42 75  H   0x0040 /* Bu
f5a0: 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20  ilt-in length() 
f5b0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
f5c0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f5d0: 54 59 50 45 4f 46 20 20 20 30 78 30 30 38 30 20  TYPEOF   0x0080 
f5e0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
f5f0: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
f600: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f610: 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78  FUNC_COUNT    0x
f620: 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0100 /* Built-in
f630: 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67   count(*) aggreg
f640: 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ate */.#define S
f650: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45  QLITE_FUNC_COALE
f660: 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42 75  SCE 0x0200 /* Bu
f670: 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
f680: 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f  ) or ifnull() */
f690: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f6a0: 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78  FUNC_UNLIKELY 0x
f6b0: 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0400 /* Built-in
f6c0: 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63   unlikely() func
f6d0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
f6e0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
f6f0: 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20 43  TANT 0x0800 /* C
f700: 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67  onstant inputs g
f710: 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f  ive a constant o
f720: 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65  utput */.#define
f730: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
f740: 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a 20  MAX   0x1000 /* 
f750: 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20 61  True for min() a
f760: 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67 61  nd max() aggrega
f770: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
f780: 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
f790: 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22 53  NG  0x2000 /* "S
f7a0: 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61 6c  low Change". Val
f7b0: 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72 69  ue constant duri
f7c0: 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20 20 20  ng a.           
f7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7e0: 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e 67           ** sing
f7f0: 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68 74  le query - might
f800: 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69 6d   change over tim
f810: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
f820: 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54  ITE_FUNC_AFFINIT
f830: 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69 6c  Y 0x4000 /* Buil
f840: 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29 20  t-in affinity() 
f850: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
f860: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f870: 4f 46 46 53 45 54 20 20 20 30 78 38 30 30 30 20  OFFSET   0x8000 
f880: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69  /* Built-in sqli
f890: 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e 63  te_offset() func
f8a0: 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tion */../*.** T
f8b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
f8c0: 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54  ee macros, FUNCT
f8d0: 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28  ION(), LIKEFUNC(
f8e0: 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28  ) and AGGREGATE(
f8f0: 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ) are.** used to
f900: 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74   create the init
f910: 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65  ializers for the
f920: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
f930: 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e  res..**.**   FUN
f940: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f950: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f960: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
f970: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
f980: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
f990: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
f9a0: 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20  ction zName.**  
f9b0: 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62     implemented b
f9c0: 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75  y C function xFu
f9d0: 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20  nc that accepts 
f9e0: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20  nArg arguments. 
f9f0: 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65  The.**     value
fa00: 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20   passed as iArg 
fa10: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
fa20: 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76  id*) and made av
fa30: 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61  ailable.**     a
fa40: 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20  s the user-data 
fa50: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
fa60: 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75  ta()) for the fu
fa70: 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20  nction. If.**   
fa80: 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69    argument bNC i
fa90: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
faa0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
fab0: 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65  DCOLL flag is se
fac0: 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43  t..**.**   VFUNC
fad0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
fae0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
faf0: 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
fb00: 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
fb10: 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
fb20: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fb30: 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  T flag..**.**   
fb40: 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  DFUNCTION(zName,
fb50: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
fb60: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
fb70: 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
fb80: 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
fb90: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
fba0: 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a  NSTANT flag and.
fbb0: 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68 65 20  **     adds the 
fbc0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
fbd0: 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20  HNG flag.  Used 
fbe0: 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65 20  for date & time 
fbf0: 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20  functions.**    
fc00: 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c   and functions l
fc10: 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69  ike sqlite_versi
fc20: 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63 68  on() that can ch
fc30: 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75  ange, but not du
fc40: 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69  ring.**     a si
fc50: 6e 67 6c 65 20 71 75 65 72 79 2e 20 20 54 68 65  ngle query.  The
fc60: 20 69 41 72 67 20 69 73 20 69 67 6e 6f 72 65 64   iArg is ignored
fc70: 2e 20 20 54 68 65 20 75 73 65 72 2d 64 61 74 61  .  The user-data
fc80: 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 0a 2a   is always set.*
fc90: 2a 20 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20  *     to a NULL 
fca0: 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e  pointer.  The bN
fcb0: 43 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  C parameter is n
fcc0: 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20  ot used..**.**  
fcd0: 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65   PURE_DATE(zName
fce0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
fcf0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
fd00: 20 55 73 65 64 20 66 6f 72 20 22 70 75 72 65 22   Used for "pure"
fd10: 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74   date/time funct
fd20: 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63 72 6f  ions, this macro
fd30: 20 69 73 20 6c 69 6b 65 20 44 46 55 4e 43 54 49   is like DFUNCTI
fd40: 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65 70 74  ON.**     except
fd50: 20 74 68 61 74 20 69 74 20 64 6f 65 73 20 73 65   that it does se
fd60: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  t the SQLITE_FUN
fd70: 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73  C_CONSTANT flags
fd80: 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a 20 20 20  .  iArg is.**   
fd90: 20 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68    ignored and th
fda0: 65 20 75 73 65 72 2d 64 61 74 61 20 66 6f 72 20  e user-data for 
fdb0: 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20  these functions 
fdc0: 69 73 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a  is set to an .**
fdd0: 20 20 20 20 20 61 72 62 69 74 72 61 72 79 20 6e       arbitrary n
fde0: 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e  on-NULL pointer.
fdf0: 20 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65    The bNC parame
fe00: 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  ter is not used.
fe10: 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41  .**.**   AGGREGA
fe20: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
fe30: 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70  iArg, bNC, xStep
fe40: 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20  , xFinal).**    
fe50: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
fe60: 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
fe70: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
fe80: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a   implemented by.
fe90: 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e  **     the C fun
fea0: 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64  ctions xStep and
feb0: 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72   xFinal. The fir
fec0: 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65  st four paramete
fed0: 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e  rs.**     are in
fee0: 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65  terpreted in the
fef0: 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65   same way as the
ff00: 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74   first 4 paramet
ff10: 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55  ers to.**     FU
ff20: 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20  NCTION()..**.** 
ff30: 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65    LIKEFUNC(zName
ff40: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c  , nArg, pArg, fl
ff50: 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  ags).**     Used
ff60: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
ff70: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
ff80: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
ff90: 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20  ction zName.**  
ffa0: 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
ffb0: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
ffc0: 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
ffd0: 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
ffe0: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
fff0: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
10000 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
10010 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
10020 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
10030 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
10040 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
10050 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
10060 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
10070 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
10080 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
10090 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
100a0 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
100b0 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
100c0 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
100d0 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
100e0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
100f0 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10100 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10110 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
10120 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
10130 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
10140 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
10150 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10160 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
10170 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
10180 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
10190 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
101a0 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
101b0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
101c0 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
101d0 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
101e0 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
101f0 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
10200 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
10210 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44   {0} }.#define D
10220 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10230 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
10240 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
10250 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
10260 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
10270 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78  F8, \.   0, 0, x
10280 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
10290 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50   {0} }.#define P
102a0 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20  URE_DATE(zName, 
102b0 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
102c0 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
102d0 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
102e0 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
102f0 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  F8|SQLITE_FUNC_C
10300 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76  ONSTANT, \.   (v
10310 6f 69 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e  oid*)&sqlite3Con
10320 66 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  fig, 0, xFunc, 0
10330 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10340 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
10350 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  2(zName, nArg, i
10360 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c  Arg, bNC, xFunc,
10370 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
10380 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55   {nArg,SQLITE_FU
10390 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
103a0 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
103b0 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
103c0 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a  L)|extraFlags,\.
103d0 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
103e0 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
103f0 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
10400 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53   {0} }.#define S
10410 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  TR_FUNCTION(zNam
10420 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62  e, nArg, pArg, b
10430 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
10440 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
10450 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
10460 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
10470 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
10480 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
10490 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
104a0 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45  , }.#define LIKE
104b0 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
104c0 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a  , arg, flags) \.
104d0 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
104e0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
104f0 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c  LITE_UTF8|flags,
10500 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72   \.   (void *)ar
10510 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20  g, 0, likeFunc, 
10520 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10530 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
10540 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
10550 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
10560 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72  xFinal) \.  {nAr
10570 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
10580 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
10590 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
105a0 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
105b0 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
105c0 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b  xFinal,#zName, {
105d0 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  0}}.#define AGGR
105e0 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41  EGATE2(zName, nA
105f0 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
10600 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72  ep, xFinal, extr
10610 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
10620 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
10630 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
10640 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
10650 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  ags, \.   SQLITE
10660 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
10670 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
10680 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a  l,#zName, {0}}..
10690 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e  /*.** All curren
106a0 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  t savepoints are
106b0 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
106c0 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
106d0 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e  g at.** sqlite3.
106e0 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20  pSavepoint. The 
106f0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e  first element in
10700 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65   the list is the
10710 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a   most recently.*
10720 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69  * opened savepoi
10730 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61  nt. Savepoints a
10740 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  re added to the 
10750 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65  list by the vdbe
10760 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  .** OP_Savepoint
10770 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
10780 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e  .struct Savepoin
10790 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  t {.  char *zNam
107a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
107b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76            /* Sav
107c0 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c  epoint name (nul
107d0 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a  -terminated) */.
107e0 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
107f0 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
10800 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10810 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76  of deferred fk v
10820 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  iolations */.  i
10830 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
10840 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
10850 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10860 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e  deferred imm fk.
10870 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
10880 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
10890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
108a0 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69  ent savepoint (i
108b0 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  f any) */.};../*
108c0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
108d0 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  g are used as th
108e0 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74  e second paramet
108f0 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76  er to sqlite3Sav
10900 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64  epoint(),.** and
10910 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d   as the P1 argum
10920 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61  ent to the OP_Sa
10930 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
10940 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
10950 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
10960 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
10970 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
10980 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41      1.#define SA
10990 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
109a0 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63     2.../*.** Eac
109b0 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
109c0 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
109d0 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
109e0 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
109f0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
10a00 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
10a10 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
10a20 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
10a30 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
10a40 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
10a50 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
10a60 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
10a70 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
10a80 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
10a90 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
10aa0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
10ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
10ac0 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
10ad0 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
10ae0 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b00 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
10b10 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
10b20 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
10b30 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
10b40 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
10b50 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
10b60 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
10b70 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f  */.  Table *pEpo
10b80 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
10b90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f            /* Epo
10ba0 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72  nymous table for
10bb0 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a   this module */.
10bc0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d  };../*.** inform
10bd0 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
10be0 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51   column of an SQ
10bf0 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20  L table is held 
10c00 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  in an instance.*
10c10 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
10c20 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ure..*/.struct C
10c30 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a  olumn {.  char *
10c40 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
10c50 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  me of this colum
10c60 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68  n, \000, then th
10c70 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72  e type */.  Expr
10c80 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20   *pDflt;     /* 
10c90 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  Default value of
10ca0 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
10cb0 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
10cc0 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
10cd0 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
10ce0 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
10cf0 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
10d00 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
10d10 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
10d20 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
10d30 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
10d40 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
10d50 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
10d60 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
10d70 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a  alues */.  u8 sz
10d80 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Est;        /* E
10d90 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
10da0 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63   value in this c
10db0 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e  olumn. sizeof(IN
10dc0 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f  T)==1 */.  u8 co
10dd0 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42  lFlags;     /* B
10de0 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
10df0 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
10e00 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
10e10 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
10e20 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
10e30 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
10e40 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
10e50 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
10e60 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
10e70 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
10e80 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
10e90 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
10ea0 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
10eb0 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
10ec0 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
10ed0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  ble */.#define C
10ee0 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20  OLFLAG_HASTYPE  
10ef0 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70  0x0004    /* Typ
10f00 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63  e name follows c
10f10 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 23 64  olumn name */.#d
10f20 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 55 4e  efine COLFLAG_UN
10f30 49 51 55 45 20 20 20 30 78 30 30 30 38 20 20 20  IQUE   0x0008   
10f40 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65 66 20 63   /* Column def c
10f50 6f 6e 74 61 69 6e 73 20 22 55 4e 49 51 55 45 22  ontains "UNIQUE"
10f60 20 6f 72 20 22 50 4b 22 20 2a 2f 0a 0a 2f 2a 0a   or "PK" */../*.
10f70 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20  ** A "Collating 
10f80 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66  Sequence" is def
10f90 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
10fa0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
10fb0 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
10fc0 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c  e. Conceptually,
10fd0 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71   a collating seq
10fe0 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f  uence consists o
10ff0 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20  f a name and.** 
11000 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75  a comparison rou
11010 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65  tine that define
11020 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  s the order of t
11030 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a  hat sequence..**
11040 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78  .** If CollSeq.x
11050 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20  Cmp is NULL, it 
11060 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  means that the.*
11070 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
11080 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65  ence is undefine
11090 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c  d.  Indices buil
110a0 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65  t on an undefine
110b0 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  d.** collating s
110c0 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20  equence may not 
110d0 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74  be read or writt
110e0 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  en..*/.struct Co
110f0 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a  llSeq {.  char *
11100 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
11110 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
11120 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11130 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64  e, UTF-8 encoded
11140 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
11150 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
11160 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e  ext encoding han
11170 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a  dled by xCmp() *
11180 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b  /.  void *pUser;
11190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
111a0 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
111b0 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  Cmp() */.  int (
111c0 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74  *xCmp)(void*,int
111d0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
111e0 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29  nt, const void*)
111f0 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  ;.  void (*xDel)
11200 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73  (void*);  /* Des
11210 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65  tructor for pUse
11220 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
11230 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20   sort order can 
11240 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72  be either ASC or
11250 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e   DESC..*/.#defin
11260 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20  e SQLITE_SO_ASC 
11270 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74        0  /* Sort
11280 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
11290 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
112a0 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20  QLITE_SO_DESC   
112b0 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e     1  /* Sort in
112c0 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
112d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
112e0 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20  TE_SO_UNDEFINED 
112f0 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72  -1 /* No sort or
11300 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f  der specified */
11310 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
11320 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
11330 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
11340 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
11350 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
11360 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
11370 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
11380 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
11390 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
113a0 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
113b0 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
113c0 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
113d0 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
113e0 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
113f0 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a  consecutively..*
11400 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
11410 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
11420 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
11430 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61 74   with 'A'.  That
11440 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
11450 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
11460 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
11470 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
11480 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
11490 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
114a0 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
114b0 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
114c0 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
114d0 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
114e0 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
114f0 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
11500 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
11510 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
11520 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
11530 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74  mparison.  And t
11540 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20  he BLOB type is 
11550 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  first..*/.#defin
11560 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f  e SQLITE_AFF_BLO
11570 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e  B     'A'.#defin
11580 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
11590 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e  T     'B'.#defin
115a0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  e SQLITE_AFF_NUM
115b0 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e  ERIC  'C'.#defin
115c0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  e SQLITE_AFF_INT
115d0 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e  EGER  'D'.#defin
115e0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  e SQLITE_AFF_REA
115f0 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69  L     'E'..#defi
11600 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
11610 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
11620 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
11630 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
11640 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
11650 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
11660 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
11670 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
11680 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
11690 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ue..*/.#define S
116a0 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20  QLITE_AFF_MASK  
116b0 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41     0x47../*.** A
116c0 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61  dditional bit va
116d0 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  lues that can be
116e0 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66   ORed with an af
116f0 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a  finity without.*
11700 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61  * changing the a
11710 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54  ffinity..**.** T
11720 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  he SQLITE_NOTNUL
11730 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62  L flag is a comb
11740 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45  ination of NULLE
11750 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c  Q and JUMPIFNULL
11760 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61  ..** It causes a
11770 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69  n assert() to fi
11780 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  re if either ope
11790 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72  rand to a compar
117a0 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72  ison.** operator
117b0 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73   is NULL.  It is
117c0 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69   added to certai
117d0 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  n comparison ope
117e0 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f  rators to.** pro
117f0 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ve that the oper
11800 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20  ands are always 
11810 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65  NOT NULL..*/.#de
11820 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50  fine SQLITE_KEEP
11830 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f  NULL     0x08  /
11840 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f 72  * Used by vector
11850 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65   == or <> */.#de
11860 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
11870 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f  IFNULL   0x10  /
11880 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
11890 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
118a0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
118b0 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
118c0 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x20  /* Store 
118d0 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
118e0 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
118f0 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
11900 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
11910 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
11920 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
11930 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20  SQLITE_NOTNULL  
11940 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73      0x90  /* Ass
11950 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64  ert that operand
11960 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c  s are never NULL
11970 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
11980 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
11990 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
119a0 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
119b0 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
119c0 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
119d0 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  chema..**.** If 
119e0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
119f0 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74  ema is shared, t
11a00 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65  hen there is one
11a10 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
11a20 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66  s.** structure f
11a30 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
11a40 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c   connection (sql
11a50 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73  ite3*) that uses
11a60 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73   the shared.** s
11a70 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62  chema. This is b
11a80 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61  ecause each data
11a90 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
11aa0 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e  requires its own
11ab0 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61   unique.** insta
11ac0 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  nce of the sqlit
11ad0 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
11ae0 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
11af0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
11b00 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
11b10 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62  on. sqlite3_vtab
11b20 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f  * handles can no
11b30 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77  t be shared betw
11b40 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  een.** database 
11b50 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
11b60 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
11b70 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
11b80 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68   database.** sch
11b90 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
11ba0 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
11bb0 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
11bc0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
11bd0 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
11be0 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
11bf0 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
11c00 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
11c10 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
11c20 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
11c30 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
11c40 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
11c50 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
11c60 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
11c70 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
11c80 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
11c90 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
11ca0 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69  eal tables.** wi
11cb0 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
11cc0 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
11cd0 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
11ce0 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a  f the callers.**
11cf0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
11d00 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
11d10 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
11d20 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
11d30 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
11d40 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f   as that used to
11d50 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65   execute SQL ope
11d60 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76  rations on the v
11d70 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
11d80 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f  .** All VTable o
11d90 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72  bjects that corr
11da0 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67  espond to a sing
11db0 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68  le table in a sh
11dc0 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ared.** database
11dd0 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74   schema are init
11de0 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ially stored in 
11df0 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f  a linked-list po
11e00 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74  inted to by.** t
11e10 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
11e20 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
11e30 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
11e40 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65  nding Table obje
11e50 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73  ct..** When an s
11e60 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
11e70 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65   operation is re
11e80 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73  quired to access
11e90 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
11ea0 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68  table, it search
11eb0 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20  es the list for 
11ec0 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20  the VTable that 
11ed0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
11ee0 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  he.** database c
11ef0 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20  onnection doing 
11f00 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f  the preparing so
11f10 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63   as to use the c
11f20 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65  orrect.** sqlite
11f30 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69  3_vtab* handle i
11f40 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  n the compiled q
11f50 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  uery..**.** When
11f60 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61   an in-memory Ta
11f70 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65  ble object is de
11f80 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70  leted (for examp
11f90 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73  le when the.** s
11fa0 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72  chema is being r
11fb0 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65  eloaded for some
11fc0 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54   reason), the VT
11fd0 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65  able objects are
11fe0 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20   not.** deleted 
11ff0 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
12000 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
12010 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
12020 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61  t()ed.** immedia
12030 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
12040 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
12050 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
12060 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
12070 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
12080 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
12090 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
120a0 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
120b0 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
120c0 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
120d0 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
120e0 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
120f0 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e  isconnected.** n
12100 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65  ext time a state
12110 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64  ment is prepared
12120 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69   using said sqli
12130 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f  te3*. This is do
12140 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64  ne.** to avoid d
12150 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69  eadlock issues i
12160 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
12170 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  e sqlite3.mutex 
12180 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65  mutexes..** Refe
12190 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62  r to comments ab
121a0 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c  ove function sql
121b0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
121c0 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  st() for an.** e
121d0 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f  xplanation as to
121e0 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20   why it is safe 
121f0 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20  to add an entry 
12200 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44  to an sqlite3.pD
12210 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73  isconnect.** lis
12220 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e  t without holdin
12230 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
12240 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ing sqlite3.mute
12250 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  x mutex..**.** T
12260 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62  he memory for ob
12270 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79  jects of this ty
12280 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c  pe is always all
12290 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c  ocated by.** sql
122a0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20  ite3DbMalloc(), 
122b0 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  using the connec
122c0 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72  tion handle stor
122d0 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20  ed in VTable.db 
122e0 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  as.** the first 
122f0 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
12300 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
12310 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
12320 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
12330 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12340 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12350 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
12360 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
12370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
12380 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
12390 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
123a0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
123b0 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
123c0 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
123d0 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
123e0 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
123f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12400 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
12410 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
12420 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
12430 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
12440 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
12450 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
12460 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
12470 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
12480 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
12490 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
124a0 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
124b0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
124c0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
124d0 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
124e0 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
124f0 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  * The schema for
12500 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   each SQL table 
12510 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72  and view is repr
12520 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
12530 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61  y.** by an insta
12540 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
12550 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
12560 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
12570 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
12580 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
12590 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
125a0 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
125b0 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
125c0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
125d0 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
125e0 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
125f0 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
12600 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
12610 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
12620 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
12630 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
12640 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
12650 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
12660 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
12670 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
12680 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
12690 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
126a0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
126b0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
126c0 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
126d0 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
126e0 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
126f0 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
12700 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  umn */.  ExprLis
12710 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
12720 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
12730 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20  raints */.      
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12750 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75   /*   ... also u
12760 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61  sed as column na
12770 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45  me list in a VIE
12780 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  W */.  int tnum;
12790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
127a0 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66  oot BTree page f
127b0 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  or this table */
127c0 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20  .  u32 nTabRef; 
127d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
127e0 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
127f0 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
12800 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20   u32 tabFlags;  
12810 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
12820 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
12830 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
12840 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
12850 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
12860 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
12870 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36  e rowid */.  i16
12880 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
12890 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
128a0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
128b0 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
128c0 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f   nRowLogEst;   /
128d0 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
128e0 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
128f0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
12900 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
12910 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a  szTabRow;     /*
12920 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
12930 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  of each table ro
12940 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69  w in bytes */.#i
12950 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
12960 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f  LE_COSTMULT.  Lo
12970 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20  gEst costMult;  
12980 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69     /* Cost multi
12990 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20  plier for using 
129a0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65  this table */.#e
129b0 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e  ndif.  u8 keyCon
129c0 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  f;          /* W
129d0 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73  hat to do in cas
129e0 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20  e of uniqueness 
129f0 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65  conflict on iPKe
12a00 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
12a10 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
12a20 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c  BLE.  int addCol
12a30 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66  Offset;    /* Of
12a40 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54  fset in CREATE T
12a50 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64  ABLE stmt to add
12a60 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f   a new column */
12a70 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
12a80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
12a90 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
12aa0 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20  ModuleArg;      
12ab0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
12ac0 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
12ad0 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  dule */.  char *
12ae0 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f  *azModuleArg;  /
12af0 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73  * 0: module 1: s
12b00 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61  chema 2: vtab na
12b10 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f  me 3...: args */
12b20 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
12b30 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  le;     /* List 
12b40 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  of VTable object
12b50 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  s. */.#endif.  T
12b60 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
12b70 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74  ;   /* List of t
12b80 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69  riggers stored i
12b90 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53  n pSchema */.  S
12ba0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
12bb0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68      /* Schema th
12bc0 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73  at contains this
12bd0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c   table */.  Tabl
12be0 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20  e *pNextZombie; 
12bf0 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20   /* Next on the 
12c00 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62  Parse.pZombieTab
12c10 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
12c20 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
12c30 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46  s for Table.tabF
12c40 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f  lags..**.** TF_O
12c50 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73  OOHidden applies
12c60 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69   to tables or vi
12c70 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69 64  ew that have hid
12c80 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  den columns that
12c90 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64   are.** followed
12ca0 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63   by non-hidden c
12cb0 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65  olumns.  Example
12cc0 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55  :  "CREATE VIRTU
12cd0 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47  AL TABLE x USING
12ce0 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44  .** vtab1(a HIDD
12cf0 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65  EN, b);".  Since
12d00 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69   "b" is a non-hi
12d10 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20  dden column but 
12d20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a  "a" is hidden,.*
12d30 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64  * the TF_OOOHidd
12d40 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75  en attribute wou
12d50 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73  ld apply in this
12d60 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62   case.  Such tab
12d70 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73  les require.** s
12d80 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
12d90 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72  during INSERT pr
12da0 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65  ocessing..*/.#de
12db0 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
12dc0 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
12dd0 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73    /* Read-only s
12de0 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23  ystem table */.#
12df0 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65  define TF_Epheme
12e00 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30 32  ral       0x0002
12e10 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65      /* An epheme
12e20 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ral table */.#de
12e30 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61  fine TF_HasPrima
12e40 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20 20  ryKey   0x0004  
12e50 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
12e60 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
12e70 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
12e80 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30  ncrement   0x000
12e90 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20  8    /* Integer 
12ea0 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
12eb0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  utoincrement */.
12ec0 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74  #define TF_HasSt
12ed0 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30 31  at1        0x001
12ee0 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45  0    /* nRowLogE
12ef0 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69  st set from sqli
12f00 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66  te_stat1 */.#def
12f10 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  ine TF_WithoutRo
12f20 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20 20  wid    0x0020   
12f30 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50   /* No rowid.  P
12f40 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
12f50 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  e key */.#define
12f60 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
12f70 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a  id  0x0040    /*
12f80 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65   No user-visible
12f90 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20   "rowid" column 
12fa0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f  */.#define TF_OO
12fb0 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78  OHidden       0x
12fc0 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f  0080    /* Out-o
12fd0 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63  f-Order hidden c
12fe0 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  olumns */.#defin
12ff0 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20 20  e TF_StatsUsed  
13000 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20 2f       0x0100    /
13010 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  * Query planner 
13020 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74  decisions affect
13030 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20 20  ed by.          
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e             ** In
13060 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b  dex.aiRowLogEst[
13070 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66  ] values */.#def
13080 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c  ine TF_HasNotNul
13090 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20 20  l      0x0200   
130a0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54   /* Contains NOT
130b0 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
130c0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  s */../*.** Test
130d0 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20   to see whether 
130e0 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69  or not a table i
130f0 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
13100 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64  e.  This is.** d
13110 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73  one as a macro s
13120 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62  o that it will b
13130 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20  e optimized out 
13140 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20  when virtual.** 
13150 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73  table support is
13160 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
13170 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e  e build..*/.#ifn
13180 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13190 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
131a0 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
131b0 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6e  (X)      ((X)->n
131c0 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73 65  ModuleArg).#else
131d0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
131e0 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23  tual(X)      0.#
131f0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
13200 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
13210 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   if a column is 
13220 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e  hidden.  IsOrdin
13230 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
13240 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ).** only works 
13250 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20  for non-virtual 
13260 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79  tables (ordinary
13270 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77   tables and view
13280 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77  s) and is.** alw
13290 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73  ays false unless
132a0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
132b0 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73  IDDEN_COLUMNS is
132c0 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a   defined.  The.*
132d0 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  * IsHiddenColumn
132e0 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65  () macro is gene
132f0 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a  ral purpose..*/.
13300 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
13310 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
13320 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66  _COLUMNS).#  def
13330 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
13340 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28  mn(X)         ((
13350 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
13360 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
13370 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
13380 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
13390 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63  lumn(X) (((X)->c
133a0 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
133b0 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65  G_HIDDEN)!=0).#e
133c0 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  lif !defined(SQL
133d0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
133e0 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65  TABLE).#  define
133f0 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
13400 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
13410 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
13420 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
13430 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
13440 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
13450 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20  n(X) 0.#else.#  
13460 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
13470 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
13480 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f   0.#  define IsO
13490 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
134a0 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  umn(X) 0.#endif.
134b0 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61  ../* Does the ta
134c0 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64  ble have a rowid
134d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52   */.#define HasR
134e0 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58  owid(X)     (((X
134f0 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
13500 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d  _WithoutRowid)==
13510 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62  0).#define Visib
13520 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29  leRowid(X) (((X)
13530 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
13540 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d  NoVisibleRowid)=
13550 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  =0)../*.** Each 
13560 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
13570 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73  traint is an ins
13580 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
13590 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
135a0 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67  ..**.** A foreig
135b0 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61  n key is associa
135c0 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62  ted with two tab
135d0 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22  les.  The "from"
135e0 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65   table is.** the
135f0 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
13600 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e  ains the REFEREN
13610 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20  CES clause that 
13620 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65  creates the fore
13630 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65  ign.** key.  The
13640 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74   "to" table is t
13650 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
13660 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45   named in the RE
13670 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e  FERENCES clause.
13680 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69  .** Consider thi
13690 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a  s example:.**.**
136a0 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
136b0 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20  E ex1(.**       
136c0 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
136d0 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20  Y KEY,.**       
136e0 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52  b INTEGER CONSTR
136f0 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e  AINT fk1 REFEREN
13700 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20  CES ex2(x).**   
13710 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66    );.**.** For f
13720 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22  oreign key "fk1"
13730 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  , the from-table
13740 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68   is "ex1" and th
13750 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65  e to-table is "e
13760 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65  x2"..** Equivale
13770 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20  nt names:.**.** 
13780 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d      from-table =
13790 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a  = child-table.**
137a0 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20         to-table 
137b0 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a  == parent-table.
137c0 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52  **.** Each REFER
137d0 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e  ENCES clause gen
137e0 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e  erates an instan
137f0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
13800 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
13810 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68   which is attach
13820 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74  ed to the from-t
13830 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61  able.  The to-ta
13840 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69  ble need not exi
13850 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66  st when.** the f
13860 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65  rom-table is cre
13870 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74  ated.  The exist
13880 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74  ence of the to-t
13890 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63  able is not chec
138a0 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c  ked..**.** The l
138b0 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e  ist of all paren
138c0 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62  ts for child Tab
138d0 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20  le X is held at 
138e0 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41  X.pFKey..**.** A
138f0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69   list of all chi
13900 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c  ldren for a tabl
13910 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68  e named Z (which
13920 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20   might not even 
13930 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c  exist).** is hel
13940 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79  d in Schema.fkey
13950 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68  Hash with a hash
13960 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74   key of Z..*/.st
13970 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61  ruct FKey {.  Ta
13980 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20  ble *pFrom;     
13990 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e  /* Table contain
139a0 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43  ing the REFERENC
139b0 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20  ES clause (aka: 
139c0 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79  Child) */.  FKey
139d0 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a   *pNextFrom;  /*
139e0 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20   Next FKey with 
139f0 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f  the same in pFro
13a00 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f  m. Next parent o
13a10 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61  f pFrom */.  cha
13a20 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f  r *zTo;        /
13a30 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20  * Name of table 
13a40 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69  that the key poi
13a50 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72  nts to (aka: Par
13a60 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ent) */.  FKey *
13a70 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e  pNextTo;    /* N
13a80 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d  ext with the sam
13a90 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c  e zTo. Next chil
13aa0 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46  d of zTo. */.  F
13ab0 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20  Key *pPrevTo;   
13ac0 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74   /* Previous wit
13ad0 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a  h the same zTo *
13ae0 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
13af0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13b00 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
13b10 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
13b20 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
13b30 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
13b40 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72  red;       /* Tr
13b50 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
13b60 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66   checking is def
13b70 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49  erred till COMMI
13b80 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f  T */.  u8 aActio
13b90 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  n[2];        /* 
13ba0 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e  ON DELETE and ON
13bb0 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c   UPDATE actions,
13bc0 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f   respectively */
13bd0 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72  .  Trigger *apTr
13be0 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67  igger[2];/* Trig
13bf0 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e  gers for aAction
13c00 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  [] actions */.  
13c10 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b  struct sColMap {
13c20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
13c30 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70   of columns in p
13c40 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  From to columns 
13c50 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e  in zTo */.    in
13c60 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  t iFrom;        
13c70 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
13c80 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20  column in pFrom 
13c90 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f  */.    char *zCo
13ca0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
13cb0 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  Name of column i
13cc0 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20  n zTo.  If NULL 
13cd0 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  use PRIMARY KEY 
13ce0 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20  */.  } aCol[1]; 
13cf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
13d00 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
13d10 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73   of nCol columns
13d20 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51   */.};../*.** SQ
13d30 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61  Lite supports ma
13d40 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79  ny different way
13d50 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63  s to resolve a c
13d60 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
13d70 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72  or.  ROLLBACK pr
13d80 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
13d90 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hat a constraint
13da0 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61   violation.** ca
13db0 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69  uses the operati
13dc0 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f  on in process to
13dd0 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68   fail and for th
13de0 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
13df0 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72  ction.** to be r
13e00 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f  olled back.  ABO
13e10 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  RT processing me
13e20 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ans the operatio
13e30 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20  n in process.** 
13e40 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72  fails and any pr
13e50 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ior changes from
13e60 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74   that one operat
13e70 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f  ion are backed o
13e80 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74  ut,.** but the t
13e90 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
13ea0 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  t rolled back.  
13eb0 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20  FAIL processing 
13ec0 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68  means that.** th
13ed0 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
13ee0 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e  rogress stops an
13ef0 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  d returns an err
13f00 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72  or code.  But pr
13f10 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64  ior.** changes d
13f20 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f  ue to the same o
13f30 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74  peration are not
13f40 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20   backed out and 
13f50 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f  no rollback.** o
13f60 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d  ccurs.  IGNORE m
13f70 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61  eans that the pa
13f80 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61  rticular row tha
13f90 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e  t caused the con
13fa0 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
13fb0 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64   is not inserted
13fc0 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72   or updated.  Pr
13fd0 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
13fe0 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a  es and no error.
13ff0 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  ** is returned. 
14000 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74   REPLACE means t
14010 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  hat preexisting 
14020 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68  database rows th
14030 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55  at caused.** a U
14040 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
14050 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72   violation are r
14060 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74  emoved so that t
14070 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72  he new insert or
14080 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70  .** update can p
14090 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73  roceed.  Process
140a0 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
140b0 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65  d no error is re
140c0 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45  ported..**.** RE
140d0 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c  STRICT, SETNULL,
140e0 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74   and CASCADE act
140f0 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20  ions apply only 
14100 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e  to foreign keys.
14110 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20  .** RESTRICT is 
14120 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52  the same as ABOR
14130 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20  T for IMMEDIATE 
14140 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64  foreign keys and
14150 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20   the.** same as 
14160 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46  ROLLBACK for DEF
14170 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54  ERRED keys.  SET
14180 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20  NULL means that 
14190 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
141a0 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ey is set to NUL
141b0 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e  L.  CASCADE mean
141c0 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20  s that a DELETE 
141d0 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65  or UPDATE of the
141e0 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74  .** referenced t
141f0 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70  able row is prop
14200 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20  agated into the 
14210 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74  row that holds t
14220 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65  he.** foreign ke
14230 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  y..**.** The fol
14240 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20  lowing symbolic 
14250 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20  values are used 
14260 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20  to record which 
14270 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f  type.** of actio
14280 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64  n to take..*/.#d
14290 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20  efine OE_None   
142a0 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69    0   /* There i
142b0 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20  s no constraint 
142c0 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66  to check */.#def
142d0 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  ine OE_Rollback 
142e0 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20  1   /* Fail the 
142f0 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f  operation and ro
14300 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
14310 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
14320 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20  e OE_Abort    2 
14330 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68    /* Back out ch
14340 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20  anges but do no 
14350 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63  rollback transac
14360 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
14370 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20  OE_Fail     3   
14380 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72  /* Stop the oper
14390 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20  ation but leave 
143a0 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65  all prior change
143b0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
143c0 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20  Ignore   4   /* 
143d0 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72  Ignore the error
143e0 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20  . Do not do the 
143f0 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
14400 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
14410 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44  eplace  5   /* D
14420 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72  elete existing r
14430 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49  ecord, then do I
14440 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
14450 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 55 70  */.#define OE_Up
14460 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20 50 72  date   6   /* Pr
14470 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20 55 50  ocess as a DO UP
14480 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73 65 72  DATE in an upser
14490 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
144a0 52 65 73 74 72 69 63 74 20 37 20 20 20 2f 2a 20  Restrict 7   /* 
144b0 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d  OE_Abort for IMM
144c0 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62  EDIATE, OE_Rollb
144d0 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ack for DEFERRED
144e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
144f0 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a 20 53  etNull  8   /* S
14500 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
14510 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  ey value to NULL
14520 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
14530 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a 20 53  etDflt  9   /* S
14540 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
14550 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  ey value to its 
14560 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69  default */.#defi
14570 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 31  ne OE_Cascade  1
14580 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68  0  /* Cascade th
14590 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
145a0 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20  fine OE_Default 
145b0 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61 74 65   11  /* Do whate
145c0 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  ver the default 
145d0 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f  action is */.../
145e0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
145f0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
14600 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  g structure is p
14610 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72  assed as the fir
14620 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74  st.** argument t
14630 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79  o sqlite3VdbeKey
14640 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75  Compare and is u
14650 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74  sed to control t
14660 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
14670 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65   of the two inde
14680 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  x keys..**.** No
14690 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64  te that aSortOrd
146a0 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d  er[] and aColl[]
146b0 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73   have nField+1 s
146c0 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20  lots.  There.** 
146d0 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73  are nField slots
146e0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73   for the columns
146f0 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65   of an index the
14700 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74  n one extra slot
14710 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69  .** for the rowi
14720 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  d at the end..*/
14730 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20  .struct KeyInfo 
14740 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20  {.  u32 nRef;   
14750 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14760 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20  r of references 
14770 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20  to this KeyInfo 
14780 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65  object */.  u8 e
14790 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
147a0 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
147b0 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51   - one of the SQ
147c0 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73  LITE_UTF* values
147d0 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46 69   */.  u16 nKeyFi
147e0 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  eld;      /* Num
147f0 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d  ber of key colum
14800 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ns in the index 
14810 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69 65  */.  u16 nAllFie
14820 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74 61  ld;      /* Tota
14830 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75  l columns, inclu
14840 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f 74  ding key plus ot
14850 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  hers */.  sqlite
14860 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
14870 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   The database co
14880 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  nnection */.  u8
14890 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
148a0 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20    /* Sort order 
148b0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  for each column.
148c0 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61   */.  CollSeq *a
148d0 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c  Coll[1];  /* Col
148e0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
148f0 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66  for each term of
14900 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a   the key */.};..
14910 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63  /*.** This objec
14920 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64  t holds a record
14930 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20   which has been 
14940 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
14950 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69  individual.** fi
14960 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75  elds, for the pu
14970 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20  rposes of doing 
14980 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a  a comparison..**
14990 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
149a0 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
149b0 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
149c0 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
149d0 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
149e0 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
149f0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
14a00 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
14a10 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
14a20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
14a30 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
14a40 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
14a50 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
14a60 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
14a70 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
14a80 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
14a90 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a  sembled by the.*
14aa0 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  * OP_Column opco
14ab0 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73  de..**.** An ins
14ac0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
14ad0 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61  ject serves as a
14ae0 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67   "key" for doing
14af0 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20   a search on.** 
14b00 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e  an index b+tree.
14b10 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65   The goal of the
14b20 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69   search is to fi
14b30 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  nd the entry tha
14b40 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74  t.** is closed t
14b50 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69  o the key descri
14b60 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65  bed by this obje
14b70 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74  ct.  This object
14b80 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a   might hold.** j
14b90 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  ust a prefix of 
14ba0 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75  the key.  The nu
14bb0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
14bc0 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b  s given by.** pK
14bd0 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a  eyInfo->nField..
14be0 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
14bf0 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74   r2 fields are t
14c00 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74  he values to ret
14c10 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20  urn if this key 
14c20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  is less than.** 
14c30 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
14c40 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72  a key in the btr
14c50 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ee, respectively
14c60 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72  .  These are nor
14c70 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20  mally.** -1 and 
14c80 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  +1 respectively,
14c90 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e   but might be in
14ca0 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64  verted to +1 and
14cb0 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65   -1 if the b-tre
14cc0 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20  e.** is in DESC 
14cd0 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  order..**.** The
14ce0 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20   key comparison 
14cf0 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c  functions actual
14d00 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  ly return defaul
14d10 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66  t_rc when they f
14d20 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73  ind.** an equals
14d30 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65   comparison.  de
14d40 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
14d50 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49  -1, 0, or +1.  I
14d60 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d  f there are.** m
14d70 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20  ultiple entries 
14d80 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69  in the b-tree wi
14d90 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20  th the same key 
14da0 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69  (when only looki
14db0 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72  ng.** at the fir
14dc0 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  st pKeyInfo->nFi
14dd0 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61  elds,) then defa
14de0 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65  ult_rc can be se
14df0 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61  t to -1 to.** ca
14e00 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74  use the search t
14e10 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20  o find the last 
14e20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20  match, or +1 to 
14e30 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
14e40 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20   to.** find the 
14e50 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a  first match..**.
14e60 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61  ** The key compa
14e70 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  rison functions 
14e80 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20  will set eqSeen 
14e90 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20  to true if they 
14ea0 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20  ever.** get and 
14eb0 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68  equal results wh
14ec0 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69  en comparing thi
14ed0 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61  s structure to a
14ee0 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a   b-tree record..
14ef0 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f  ** When default_
14f00 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63  rc!=0, the searc
14f10 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f  h might end up o
14f20 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d  n the record imm
14f30 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f  ediately.** befo
14f40 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74  re the first mat
14f50 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c  ch or immediatel
14f60 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74  y after the last
14f70 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20   match.  The.** 
14f80 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c  eqSeen field wil
14f90 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68  l indicate wheth
14fa0 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61  er or not an exa
14fb0 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20  ct match exists 
14fc0 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65  in the.** b-tree
14fd0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
14fe0 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
14ff0 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
15000 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
15010 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
15020 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
15030 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20  Mem *aMem;      
15040 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f      /* Values */
15050 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
15060 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15070 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
15080 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64  pMem[] */.  i8 d
15090 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20  efault_rc;      
150a0 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
150b0 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65  sult if keys are
150c0 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65   equal */.  u8 e
150d0 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
150e0 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65  /* Error detecte
150f0 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70  d by xRecordComp
15100 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20  are (CORRUPT or 
15110 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72  NOMEM) */.  i8 r
15120 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1;              
15130 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
15140 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68 73  rn if (lhs < rhs
15150 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20  ) */.  i8 r2;   
15160 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
15170 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
15180 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a   (lhs > rhs) */.
15190 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20    u8 eqSeen;    
151a0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
151b0 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d   an equality com
151c0 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e  parison has been
151d0 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a   seen */.};.../*
151e0 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64  .** Each SQL ind
151f0 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ex is represente
15200 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61  d in memory by a
15210 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
15220 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
15230 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
15240 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  The columns of t
15250 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72  he table that ar
15260 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  e to be indexed 
15270 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a  are described.**
15280 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e   by the aiColumn
15290 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73  [] field of this
152a0 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
152b0 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73   example, suppos
152c0 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65  e.** we have the
152d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65   following table
152e0 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a   and index:.**.*
152f0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
15300 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63  LE Ex1(c1 int, c
15310 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b  2 int, c3 text);
15320 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49  .**     CREATE I
15330 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28  NDEX Ex2 ON Ex1(
15340 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e  c3,c1);.**.** In
15350 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63   the Table struc
15360 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20  ture describing 
15370 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63  Ex1, nCol==3 bec
15380 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a  ause there are.*
15390 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20  * three columns 
153a0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
153b0 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75  n the Index stru
153c0 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
153d0 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e  .** Ex2, nColumn
153e0 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74  ==2 since 2 of t
153f0 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  he 3 columns of 
15400 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e  Ex1 are indexed.
15410 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
15420 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c   aiColumn is {2,
15430 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30   0}.  aiColumn[0
15440 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65  ]==2 because the
15450 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  .** first column
15460 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
15470 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c3) has an index
15480 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f   of 2 in Ex1.aCo
15490 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f  l[]..** The seco
154a0 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  nd column to be 
154b0 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73  indexed (c1) has
154c0 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69   an index of 0 i
154d0 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c  n.** Ex1.aCol[],
154e0 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c   hence Ex2.aiCol
154f0 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a  umn[1]==0..**.**
15500 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72   The Index.onErr
15510 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69  or field determi
15520 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
15530 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63  ot the indexed c
15540 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62  olumns.** must b
15550 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61  e unique and wha
15560 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20  t to do if they 
15570 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49  are not.  When I
15580 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f  ndex.onError=OE_
15590 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e  None,.** it mean
155a0 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20  s this is not a 
155b0 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f  unique index.  O
155c0 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61  therwise it is a
155d0 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a   unique index.**
155e0 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f   and the value o
155f0 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  f Index.onError 
15600 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69  indicate the whi
15610 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ch conflict reso
15620 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69  lution.** algori
15630 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68  thm to employ wh
15640 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70  enever an attemp
15650 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73  t is made to ins
15660 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65  ert a non-unique
15670 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a  .** element..**.
15680 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67  ** While parsing
15690 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
156a0 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  or CREATE INDEX 
156b0 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64  statement in ord
156c0 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74  er to.** generat
156d0 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20  e VDBE code (as 
156e0 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69  opposed to parsi
156f0 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d  ng one read from
15700 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   an sqlite_maste
15710 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61  r.** table as pa
15720 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e  rt of parsing an
15730 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
15740 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e  se schema), tran
15750 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a  sient instances.
15760 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
15770 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61  ture may be crea
15780 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ted. In this cas
15790 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d  e the Index.tnum
157a0 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20   variable is.** 
157b0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
157c0 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56  e address of a V
157d0 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  DBE instruction,
157e0 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20   not a database 
157f0 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28  page.** number (
15800 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20  it cannot - the 
15810 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73  database page is
15820 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75   not allocated u
15830 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a  ntil the VDBE.**
15840 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63   program is exec
15850 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65  uted). See conve
15860 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64  rtToWithoutRowid
15870 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61  Table() for deta
15880 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ils..*/.struct I
15890 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
158a0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
158b0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
158c0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36  s index */.  i16
158d0 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20   *aiColumn;     
158e0 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63        /* Which c
158f0 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
15900 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
15910 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f  1st is 0 */.  Lo
15920 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73  gEst *aiRowLogEs
15930 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41  t;     /* From A
15940 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
15950 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
15960 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
15970 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
15980 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
15990 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
159a0 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72  ndexed */.  char
159b0 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
159c0 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
159d0 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
159e0 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
159f0 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
15a00 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
15a10 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
15a20 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
15a30 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
15a40 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
15a50 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
15a60 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
15a70 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  ining this index
15a80 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
15a90 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
15aa0 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * for each colum
15ab0 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46  n: True==DESC, F
15ac0 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63  alse==ASC */.  c
15ad0 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f  onst char **azCo
15ae0 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ll;     /* Array
15af0 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
15b00 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
15b10 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
15b20 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b   *pPartIdxWhere;
15b30 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
15b40 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
15b50 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78   indices */.  Ex
15b60 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72  prList *aColExpr
15b70 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  ;      /* Column
15b80 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
15b90 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
15ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42             /* DB
15bb0 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
15bc0 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
15bd0 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  dex */.  LogEst 
15be0 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20  szIdxRow;       
15bf0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61    /* Estimated a
15c00 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20  verage row size 
15c10 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31  in bytes */.  u1
15c20 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20  6 nKeyCol;      
15c30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15c40 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d   of columns form
15c50 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20  ing the key */. 
15c60 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   u16 nColumn;   
15c70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15c80 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ber of columns s
15c90 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64  tored in the ind
15ca0 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72  ex */.  u8 onErr
15cb0 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  or;             
15cc0 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45   /* OE_Abort, OE
15cd0 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c  _Ignore, OE_Repl
15ce0 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20  ace, or OE_None 
15cf0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64  */.  unsigned id
15d00 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a  xType:2;      /*
15d10 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50   1==UNIQUE, 2==P
15d20 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43  RIMARY KEY, 0==C
15d30 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20  REATE INDEX */. 
15d40 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64   unsigned bUnord
15d50 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65  ered:1;   /* Use
15d60 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20   this index for 
15d70 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73  == or IN queries
15d80 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67   only */.  unsig
15d90 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a  ned uniqNotNull:
15da0 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55  1;  /* True if U
15db0 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
15dc0 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d  LL for all colum
15dd0 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ns */.  unsigned
15de0 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20   isResized:1;   
15df0 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69   /* True if resi
15e00 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20  zeIndexObject() 
15e10 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
15e20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
15e30 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a  Covering:1;   /*
15e40 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73   True if this is
15e50 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65   a covering inde
15e60 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  x */.  unsigned 
15e70 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20  noSkipScan:1;   
15e80 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f  /* Do not try to
15e90 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69   use skip-scan i
15ea0 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69  f true */.  unsi
15eb0 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b  gned hasStat1:1;
15ec0 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67       /* aiRowLog
15ed0 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20  Est values come 
15ee0 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
15ef0 31 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  1 */.  unsigned 
15f00 62 4e 6f 51 75 65 72 79 3a 31 3b 20 20 20 20 20  bNoQuery:1;     
15f10 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 74 68  /* Do not use th
15f20 69 73 20 69 6e 64 65 78 20 74 6f 20 6f 70 74 69  is index to opti
15f30 6d 69 7a 65 20 71 75 65 72 69 65 73 20 2a 2f 0a  mize queries */.
15f40 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
15f50 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
15f60 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c  AT4.  int nSampl
15f70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
15f80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  * Number of elem
15f90 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b  ents in aSample[
15fa0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70  ] */.  int nSamp
15fb0 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  leCol;          
15fc0 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78  /* Size of Index
15fd0 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e  Sample.anEq[] an
15fe0 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f  d so on */.  tRo
15ff0 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20  wcnt *aAvgEq;   
16000 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65        /* Average
16010 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20   nEq values for 
16020 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d  keys not in aSam
16030 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61  ple */.  IndexSa
16040 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20  mple *aSample;  
16050 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20    /* Samples of 
16060 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65  the left-most ke
16070 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  y */.  tRowcnt *
16080 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20  aiRowEst;       
16090 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
160a0 69 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f  ic stat1 data fo
160b0 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  r this index */.
160c0 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73    tRowcnt nRowEs
160d0 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f  t0;        /* No
160e0 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75  n-logarithmic nu
160f0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
16100 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e  the index */.#en
16110 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c  dif.};../*.** Al
16120 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
16130 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a   Index.idxType.*
16140 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
16150 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20  _IDXTYPE_APPDEF 
16160 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61       0   /* Crea
16170 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
16180 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
16190 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
161a0 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20  _UNIQUE      1  
161b0 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61   /* Implements a
161c0 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
161d0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
161e0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
161f0 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20  MARYKEY  2   /* 
16200 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  Is the PRIMARY K
16210 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
16220 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74   */../* Return t
16230 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
16240 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  s a PRIMARY KEY 
16250 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
16260 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64   IsPrimaryKeyInd
16270 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78  ex(X)  ((X)->idx
16280 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58  Type==SQLITE_IDX
16290 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29  TYPE_PRIMARYKEY)
162a0 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
162b0 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
162c0 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f   UNIQUE index */
162d0 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75  .#define IsUniqu
162e0 65 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28  eIndex(X)      (
162f0 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45  (X)->onError!=OE
16300 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49  _None)../* The I
16310 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20  ndex.aiColumn[] 
16320 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61  values are norma
16330 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74  lly positive int
16340 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68  eger.  But.** th
16350 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67  ere are some neg
16360 61 74 69 76 65 20 76 61 6c 75 65 73 20 74 68 61  ative values tha
16370 74 20 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d  t have special m
16380 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69  eaning:.*/.#defi
16390 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20  ne XN_ROWID     
163a0 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65  (-1)     /* Inde
163b0 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68  xed column is th
163c0 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  e rowid */.#defi
163d0 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20  ne XN_EXPR      
163e0 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65  (-2)     /* Inde
163f0 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  xed column is an
16400 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a   expression */..
16410 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c  /*.** Each sampl
16420 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
16430 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
16440 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  le is represente
16450 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75  d in memory.** u
16460 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65  sing a structure
16470 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20   of this type.  
16480 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
16490 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  n at the top of 
164a0 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63  the.** analyze.c
164b0 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72   source file for
164c0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
164d0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
164e0 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
164f0 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20  .  void *p;     
16500 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
16510 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72  to sampled recor
16520 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  d */.  int n;   
16530 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
16540 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79   of record in by
16550 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  tes */.  tRowcnt
16560 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73   *anEq;    /* Es
16570 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
16580 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20  s where the key 
16590 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70  equals this samp
165a0 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
165b0 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74  *anLt;    /* Est
165c0 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
165d0 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65   where key is le
165e0 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
165f0 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
16600 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73   *anDLt;   /* Es
16610 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  t. number of dis
16620 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20  tinct keys less 
16630 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
16640 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
16650 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20  ch token coming 
16660 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72  out of the lexer
16670 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
16680 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63  of.** this struc
16690 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72  ture.  Tokens ar
166a0 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70  e also used as p
166b0 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
166c0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  sion..**.** Note
166d0 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74   if Token.z==0 t
166e0 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e  hen Token.dyn an
166f0 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e  d Token.n are un
16700 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d  defined and.** m
16710 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f  ay contain rando
16720 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f  m values.  Do no
16730 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d  t make any assum
16740 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b  ptions about Tok
16750 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f  en.dyn.** and To
16760 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e  ken.n when Token
16770 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74  .z==0..*/.struct
16780 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
16790 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a   char *z;     /*
167a0 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
167b0 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
167c0 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
167d0 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20  nsigned int n;  
167e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
167f0 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
16800 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
16810 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
16820 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
16830 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
16840 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
16850 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
16860 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
16870 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
16880 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16890 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
168a0 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
168b0 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
168c0 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
168d0 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
168e0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
168f0 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
16900 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
16910 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
16920 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
16930 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
16940 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
16950 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
16960 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
16970 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
16980 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
16990 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
169a0 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
169b0 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
169c0 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
169d0 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
169e0 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
169f0 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
16a00 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
16a10 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
16a20 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
16a30 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
16a40 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
16a50 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
16a60 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
16a70 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
16a80 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
16a90 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
16aa0 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
16ab0 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ad0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
16ae0 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
16af0 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
16b00 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
16b10 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
16b20 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
16b30 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
16b40 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
16b50 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
16b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b70 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
16b80 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
16b90 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
16ba0 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
16bb0 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
16bc0 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
16bd0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
16be0 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20  sortingIdxPTab; 
16bf0 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
16c00 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74  mber of pseudo-t
16c10 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  able */.  int nS
16c20 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
16c30 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
16c40 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
16c50 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
16c60 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65   int mnReg, mxRe
16c70 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67  g;       /* Rang
16c80 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  e of registers a
16c90 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
16ca0 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20  l and aFunc */. 
16cb0 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
16cc0 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
16cd0 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
16ce0 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
16cf0 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
16d00 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
16d10 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
16d20 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
16d30 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
16d40 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
16d50 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
16d60 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
16d70 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
16d80 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
16d90 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
16da0 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
16db0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
16dc0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
16dd0 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
16de0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
16df0 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
16e00 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
16e10 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
16e20 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
16e30 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
16e40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
16e50 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
16e60 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
16e70 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
16e80 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
16e90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
16ea0 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
16eb0 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
16ec0 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
16ed0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16ee0 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
16ef0 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
16f00 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74    int nAccumulat
16f10 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  or;       /* Num
16f20 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ber of columns t
16f30 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68  hat show through
16f40 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   to the output..
16f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f60 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64            ** Add
16f70 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20  itional columns 
16f80 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73  are used only as
16f90 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20   parameters to. 
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fb0 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72           ** aggr
16fc0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
16fd0 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
16fe0 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20  nfo_func {   /* 
16ff0 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61  For each aggrega
17000 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  te function */. 
17010 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
17020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
17030 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69  xpression encodi
17040 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ng the function 
17050 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  */.    FuncDef *
17060 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  pFunc;          
17070 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65  /* The aggregate
17080 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
17090 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  entation */.    
170a0 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
170b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
170c0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
170d0 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
170e0 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ator */.    int 
170f0 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  iDistinct;      
17100 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61       /* Ephemera
17110 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20  l table used to 
17120 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54  enforce DISTINCT
17130 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a   */.  } *aFunc;.
17140 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20    int nFunc;    
17150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17160 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
17170 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a  n aFunc[] */.};.
17180 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
17190 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73  ype ynVar is a s
171a0 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65  igned integer, e
171b0 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20  ither 16-bit or 
171c0 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c  32-bit..** Usual
171d0 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73  ly it is 16-bits
171e0 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45  .  But if SQLITE
171f0 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
17200 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a  MBER is greater.
17210 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65  ** than 32767 we
17220 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74   have to make it
17230 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74   32-bit.  16-bit
17240 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65   is preferred be
17250 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73  cause.** it uses
17260 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20   less memory in 
17270 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c  the Expr object,
17280 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20   which is a big 
17290 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69  memory user.** i
172a0 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c  n systems with l
172b0 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20  ots of prepared 
172c0 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64  statements.  And
172d0 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   few application
172e0 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74  s.** need more t
172f0 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20  han about 10 or 
17300 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42  20 variables.  B
17310 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20  ut some extreme 
17320 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f  users want.** to
17330 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73   have prepared s
17340 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f  tatements with o
17350 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62  ver 32767 variab
17360 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65  les, and for the
17370 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20  m.** the option 
17380 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74  is available (at
17390 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a   compile-time)..
173a0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
173b0 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
173c0 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66  R<=32767.typedef
173d0 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73   i16 ynVar;.#els
173e0 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e  e.typedef int yn
173f0 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Var;.#endif../*.
17400 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
17410 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
17420 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
17430 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
17440 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
17450 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
17460 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
17470 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61  . The integer pa
17480 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73  rser token codes
17490 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61   are reused.** a
174a0 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20  s opcodes here. 
174b0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
174c0 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20   parser defines 
174d0 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69  TK_GE to be an i
174e0 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72  nteger.** code r
174f0 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
17500 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54  ">=" operator. T
17510 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72  his same integer
17520 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a   code is reused.
17530 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ** to represent 
17540 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e  the greater-than
17550 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65  -or-equal-to ope
17560 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70  rator in the exp
17570 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e  ression.** tree.
17580 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
17590 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
175a0 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49  QL literal (TK_I
175b0 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54  NTEGER, TK_FLOAT
175c0 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72  , TK_BLOB,.** or
175d0 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
175e0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
175f0 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
17600 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
17610 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
17620 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
17630 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
17640 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
17650 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
17660 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61  e.** variable na
17670 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  me. Finally, if 
17680 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
17690 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
176a0 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c  n (TK_FUNCTION),
176b0 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  .** then Expr.to
176c0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
176d0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
176e0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  ction..**.** Exp
176f0 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70  r.pRight and Exp
17700 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20  r.pLeft are the 
17710 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73  left and right s
17720 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66  ubexpressions of
17730 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65   a.** binary ope
17740 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72  rator. Either or
17750 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c   both may be NUL
17760 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e  L..**.** Expr.x.
17770 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20  pList is a list 
17780 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20  of arguments if 
17790 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
177a0 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
177b0 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70  n,.** a CASE exp
177c0 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e  ression or an IN
177d0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
177e0 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
177f0 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22  N (<y>, <z>...)"
17800 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c  ..** Expr.x.pSel
17810 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74  ect is used if t
17820 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
17830 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72   a sub-select or
17840 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
17850 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c  f.** the form "<
17860 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20  lhs> IN (SELECT 
17870 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50  ...)". If the EP
17880 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69  _xIsSelect bit i
17890 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20  s set in the.** 
178a0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
178b0 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65   then Expr.x.pSe
178c0 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f  lect is valid. O
178d0 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78  therwise, Expr.x
178e0 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c  .pList is.** val
178f0 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70  id..**.** An exp
17900 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
17910 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20  orm ID or ID.ID 
17920 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75  refers to a colu
17930 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a  mn in a table..*
17940 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65  * For such expre
17950 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20  ssions, Expr.op 
17960 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c  is set to TK_COL
17970 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61  UMN and Expr.iTa
17980 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e  ble is.** the in
17990 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d  teger cursor num
179a0 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75  ber of a VDBE cu
179b0 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
179c0 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a   that table and.
179d0 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  ** Expr.iColumn 
179e0 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
179f0 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65  mber for the spe
17a00 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49  cific column.  I
17a10 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73  f the.** express
17a20 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61  ion is used as a
17a30 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67   result in an ag
17a40 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20  gregate SELECT, 
17a50 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
17a60 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64  e is also stored
17a70 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67   in the Expr.iAg
17a80 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
17a90 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61  aggregate so tha
17aa0 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61  t.** it can be a
17ab0 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c  ccessed after al
17ac0 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65  l aggregates are
17ad0 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a   computed..**.**
17ae0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
17af0 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64  on is an unbound
17b00 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72   variable marker
17b10 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72   (a question mar
17b20 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27  k.** character '
17b30 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ?' in the origin
17b40 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65  al SQL) then the
17b50 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c   Expr.iTable hol
17b60 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  ds the index.** 
17b70 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
17b80 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  variable..**.** 
17b90 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
17ba0 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20  n is a subquery 
17bb0 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  then Expr.iColum
17bc0 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  n holds an integ
17bd0 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e  er.** register n
17be0 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  umber containing
17bf0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
17c00 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66  he subquery.  If
17c10 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79   the.** subquery
17c20 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e   gives a constan
17c30 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69  t result, then i
17c40 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66  Table is -1.  If
17c50 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a   the subquery.**
17c60 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65   gives a differe
17c70 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66  nt answer at dif
17c80 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72  ferent times dur
17c90 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72  ing statement pr
17ca0 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e  ocessing.** then
17cb0 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61   iTable is the a
17cc0 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72  ddress of a subr
17cd0 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70  outine that comp
17ce0 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72  utes the subquer
17cf0 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  y..**.** If the 
17d00 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20  Expr is of type 
17d10 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  OP_Column, and t
17d20 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73  he table it is s
17d30 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a  electing from.**
17d40 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65   is a disk table
17d50 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20   or the "old.*" 
17d60 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68  pseudo-table, th
17d70 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74  en pTab points t
17d80 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  o the.** corresp
17d90 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66  onding table def
17da0 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  inition..**.** A
17db0 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a  LLOCATION NOTES:
17dc0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65  .**.** Expr obje
17dd0 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f  cts can use a lo
17de0 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  t of memory spac
17df0 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63  e in database sc
17e00 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c  hema.  To.** hel
17e10 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20  p reduce memory 
17e20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f  requirements, so
17e30 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20  metimes an Expr 
17e40 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a  object will be.*
17e50 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e  * truncated.  An
17e60 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
17e70 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
17e80 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f   allocations, so
17e90 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f  metimes.** two o
17ea0 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65  r more Expr obje
17eb0 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  cts will be stor
17ec0 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d  ed in a single m
17ed0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
17ee0 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69  ,.** together wi
17ef0 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73  th Expr.zToken s
17f00 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  trings..**.** If
17f10 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
17f20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  and EP_TokenOnly
17f30 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77   flags are set w
17f40 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f  hen.** an Expr o
17f50 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74  bject is truncat
17f60 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64  ed.  When EP_Red
17f70 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65  uced is set, the
17f80 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69  n all.** the chi
17f90 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ld Expr objects 
17fa0 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66  in the Expr.pLef
17fb0 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68  t and Expr.pRigh
17fc0 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72  t subtrees.** ar
17fd0 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
17fe0 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f  in the same memo
17ff0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ry allocation.  
18000 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  Note, however, t
18010 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72  hat.** the subtr
18020 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c  ees in Expr.x.pL
18030 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53  ist or Expr.x.pS
18040 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73  elect are always
18050 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61   separately.** a
18060 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64  llocated, regard
18070 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
18080 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65  or not EP_Reduce
18090 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72  d is set..*/.str
180a0 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20  uct Expr {.  u8 
180b0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
180c0 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e      /* Operation
180d0 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68   performed by th
180e0 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61  is node */.  cha
180f0 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
18100 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
18110 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ity of the colum
18120 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20  n or 0 if not a 
18130 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
18140 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
18150 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c     /* Various fl
18160 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62  ags.  EP_* See b
18170 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  elow */.  union 
18180 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b  {.    char *zTok
18190 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  en;          /* 
181a0 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72  Token value. Zer
181b0 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64  o terminated and
181c0 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20   dequoted */.   
181d0 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20   int iValue;    
181e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e          /* Non-n
181f0 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20  egative integer 
18200 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56  value if EP_IntV
18210 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a  alue */.  } u;..
18220 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54    /* If the EP_T
18230 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73  okenOnly flag is
18240 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
18250 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
18260 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
18270 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
18280 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
18290 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
182a0 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
182b0 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
182c0 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
182d0 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
182e0 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
182f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
18330 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
18340 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
18350 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
18360 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
18370 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
18380 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
18390 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
183a0 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
183b0 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
183c0 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46   SELECT, CASE, F
183d0 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e  UNCTION, BETWEEN
183e0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
183f0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
18400 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64  EP_xIsSelect and
18410 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
18420 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20  , SELECT */.  } 
18430 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
18440 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
18450 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
18460 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
18470 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
18480 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
18490 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
184a0 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
184b0 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
184c0 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
184d0 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
184e0 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
184f0 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
18500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18540 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
18550 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
18560 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
18570 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
18580 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
18590 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
185a0 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
185b0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
185c0 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
185d0 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
185e0 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
185f0 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
18620 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
18630 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
18640 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
18650 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
18660 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20  ew, 0 -> old.   
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18680 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69        ** EP_Unli
18690 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38  kely:  134217728
186a0 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f   times likelihoo
186b0 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
186c0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
186d0 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67  _SELECT: 1st reg
186e0 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20  ister of result 
186f0 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61  vector */.  ynVa
18700 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
18710 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
18720 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
18730 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
18760 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
18770 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
18780 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20  = 1)..          
18790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
187a0 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55  * TK_SELECT_COLU
187b0 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  MN: column of th
187c0 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  e result vector 
187d0 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20  */.  i16 iAgg;  
187e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
187f0 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41  hich entry in pA
18800 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f  ggInfo->aCol[] o
18810 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20  r ->aFunc[] */. 
18820 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54   i16 iRightJoinT
18830 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50  able;   /* If EP
18840 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72  _FromJoin, the r
18850 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68  ight table of th
18860 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f  e join */.  u8 o
18870 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p2;             
18880 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45     /* TK_REGISTE
18890 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75  R: original valu
188a0 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20  e of Expr.op.   
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188c0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55        ** TK_COLU
188d0 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  MN: the value of
188e0 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d   p5 for OP_Colum
188f0 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
18900 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
18910 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e  _AGG_FUNCTION: n
18920 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a  esting depth */.
18930 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
18940 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64  nfo;     /* Used
18950 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d   by TK_AGG_COLUM
18960 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e  N and TK_AGG_FUN
18970 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65  CTION */.  Table
18980 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
18990 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54    /* Table for T
189a0 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73  K_COLUMN express
189b0 69 6f 6e 73 2e 20 20 43 61 6e 20 62 65 20 4e 55  ions.  Can be NU
189c0 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  LL.             
189d0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
189e0 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  or a column of a
189f0 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78  n index on an ex
18a00 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  pression */.};..
18a10 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
18a20 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
18a30 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
18a40 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
18a50 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
18a60 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78   EP_FromJoin  0x
18a70 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e  000001 /* Origin
18a80 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47  ates in ON/USING
18a90 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72   clause of outer
18aa0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
18ab0 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78   EP_Agg       0x
18ac0 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69  000002 /* Contai
18ad0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  ns one or more a
18ae0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
18af0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ns */.#define EP
18b00 5f 48 61 73 46 75 6e 63 20 20 20 30 78 30 30 30  _HasFunc   0x000
18b10 30 30 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  004 /* Contains 
18b20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63  one or more func
18b30 74 69 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e  tions of any kin
18b40 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  d */.           
18b50 20 20 20 20 20 20 20 2f 2a 20 30 78 30 30 30 30         /* 0x0000
18b60 30 38 20 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20  08 // available 
18b70 66 6f 72 20 75 73 65 20 2a 2f 0a 23 64 65 66 69  for use */.#defi
18b80 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
18b90 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72  0x000010 /* Aggr
18ba0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
18bb0 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
18bc0 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
18bd0 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  EP_VarSelect 0x0
18be0 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74  00020 /* pSelect
18bf0 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
18c00 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
18c10 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
18c20 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a  oted 0x000040 /*
18c30 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
18c40 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
18c50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
18c60 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38  nfixFunc 0x00008
18c70 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e  0 /* True for an
18c80 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
18c90 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
18ca0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
18cb0 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30  ollate   0x00010
18cc0 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
18cd0 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
18ce0 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
18cf0 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20  ine EP_Generic  
18d00 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e   0x000200 /* Ign
18d10 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61  ore COLLATE or a
18d20 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20  ffinity on this 
18d30 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
18d40 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30  EP_IntValue  0x0
18d50 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72  00400 /* Integer
18d60 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
18d70 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a   in u.iValue */.
18d80 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65  #define EP_xIsSe
18d90 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a  lect 0x000800 /*
18da0 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61   x.pSelect is va
18db0 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78  lid (otherwise x
18dc0 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64  .pList is) */.#d
18dd0 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20  efine EP_Skip   
18de0 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43     0x001000 /* C
18df0 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55  OLLATE, AS, or U
18e00 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69  NLIKELY */.#defi
18e10 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20  ne EP_Reduced   
18e20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72  0x002000 /* Expr
18e30 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44   struct EXPR_RED
18e40 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
18e50 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
18e60 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30  P_TokenOnly 0x00
18e70 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  4000 /* Expr str
18e80 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  uct EXPR_TOKENON
18e90 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  LYSIZE bytes onl
18ea0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
18eb0 53 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30  Static    0x0080
18ec0 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  00 /* Held in me
18ed0 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
18ee0 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
18ef0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65  */.#define EP_Me
18f00 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30  mToken  0x010000
18f10 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69   /* Need to sqli
18f20 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72  te3DbFree() Expr
18f30 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69  .zToken */.#defi
18f40 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20  ne EP_NoReduce  
18f50 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e  0x020000 /* Cann
18f60 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ot EXPRDUP_REDUC
18f70 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23  E this Expr */.#
18f80 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65  define EP_Unlike
18f90 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20  ly  0x040000 /* 
18fa0 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69  unlikely() or li
18fb0 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74  kelihood() funct
18fc0 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
18fd0 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38  P_ConstFunc 0x08
18fe0 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45  0000 /* A SQLITE
18ff0 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f  _FUNC_CONSTANT o
19000 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74  r _SLOCHNG funct
19010 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
19020 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30  P_CanBeNull 0x10
19030 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e  0000 /* Can be n
19040 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20  ull despite NOT 
19050 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
19060 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75  */.#define EP_Su
19070 62 71 75 65 72 79 20 20 30 78 32 30 30 30 30 30  bquery  0x200000
19080 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
19090 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70  s a TK_SELECT op
190a0 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
190b0 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30  e EP_Alias     0
190c0 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e  x400000 /* Is an
190d0 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73   alias for a res
190e0 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a  ult set column *
190f0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61  /.#define EP_Lea
19100 66 20 20 20 20 20 20 30 78 38 30 30 30 30 30 20  f      0x800000 
19110 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e  /* Expr.pLeft, .
19120 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65  pRight, .u.pSele
19130 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a  ct all NULL */..
19140 2f 2a 0a 2a 2a 20 54 68 65 20 45 50 5f 50 72 6f  /*.** The EP_Pro
19150 70 61 67 61 74 65 20 6d 61 73 6b 20 69 73 20 61  pagate mask is a
19160 20 73 65 74 20 6f 66 20 70 72 6f 70 65 72 74 69   set of properti
19170 65 73 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69  es that automati
19180 63 61 6c 6c 79 20 70 72 6f 70 61 67 61 74 65 0a  cally propagate.
19190 2a 2a 20 75 70 77 61 72 64 73 20 69 6e 74 6f 20  ** upwards into 
191a0 70 61 72 65 6e 74 20 6e 6f 64 65 73 2e 0a 2a 2f  parent nodes..*/
191b0 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70  .#define EP_Prop
191c0 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74  agate (EP_Collat
191d0 65 7c 45 50 5f 53 75 62 71 75 65 72 79 7c 45 50  e|EP_Subquery|EP
191e0 5f 48 61 73 46 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a  _HasFunc)../*.**
191f0 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
19200 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
19210 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
19220 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20   bits in the.** 
19230 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
19240 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70  ..*/.#define Exp
19250 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50  rHasProperty(E,P
19260 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61  )     (((E)->fla
19270 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
19280 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72  ine ExprHasAllPr
19290 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
192a0 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
192b0 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
192c0 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50  rSetProperty(E,P
192d0 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  )     (E)->flags
192e0 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  |=(P).#define Ex
192f0 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  prClearProperty(
19300 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67  E,P)   (E)->flag
19310 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20  s&=~(P)../* The 
19320 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
19330 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  ty() macro is us
19340 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74  ed for Verificat
19350 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
19360 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74  .** and Accredit
19370 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20  ation only.  It 
19380 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53  works like ExprS
19390 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72  etProperty() dur
193a0 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65  ing VVA.** proce
193b0 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f  sses but is a no
193c0 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79  -op for delivery
193d0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
193e0 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e  TE_DEBUG.# defin
193f0 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
19400 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e  erty(E,P)  (E)->
19410 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65  flags|=(P).#else
19420 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
19430 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
19440 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
19450 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
19460 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
19470 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64  f bytes required
19480 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70   by a normal Exp
19490 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20  r.** struct, an 
194a0 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
194b0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
194c0 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72  flag set in Expr
194d0 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e  .flags.** and an
194e0 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
194f0 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  h the EP_TokenOn
19500 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a  ly flag set..*/.
19510 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c  #define EXPR_FUL
19520 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20  LSIZE           
19530 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20  sizeof(Expr)    
19540 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73         /* Full s
19550 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ize */.#define E
19560 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
19570 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28         offsetof(
19580 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a  Expr,iTable)  /*
19590 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73   Common features
195a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
195b0 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20  _TOKENONLYSIZE  
195c0 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
195d0 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65  r,pLeft)   /* Fe
195e0 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  wer features */.
195f0 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73  ./*.** Flags pas
19600 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74  sed to the sqlit
19610 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63  e3ExprDup() func
19620 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65  tion. See the he
19630 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20  ader comment.** 
19640 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70  above sqlite3Exp
19650 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69  rDup() for detai
19660 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ls..*/.#define E
19670 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20  XPRDUP_REDUCE   
19680 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
19690 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69   Used reduced-si
196a0 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f  ze Expr nodes */
196b0 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
196c0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
196d0 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
196e0 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
196f0 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
19700 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
19710 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
19720 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
19730 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
19740 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
19750 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
19760 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
19770 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
19780 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
19790 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
197a0 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
197b0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
197c0 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
197d0 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
197e0 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
197f0 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
19800 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
19810 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
19820 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65  sed..**.** By de
19830 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a  fault the Expr.z
19840 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73  Span field holds
19850 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
19860 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
19870 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
19880 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20  on that is used 
19890 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
198a0 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61  n of error messa
198b0 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d  ges and.** colum
198c0 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68  n labels.  In th
198d0 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53  is case, Expr.zS
198e0 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79  pan is typically
198f0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a   the text of a.*
19900 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * column express
19910 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73  ion as it exists
19920 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
19930 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72  tement.  However
19940 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61  , if.** the bSpa
19950 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73  nIsTab flag is s
19960 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69  et, then zSpan i
19970 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20  s overloaded to 
19980 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a  mean the name.**
19990 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
199a0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72  olumn in the for
199b0 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c  m: DATABASE.TABL
199c0 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20  E.COLUMN.  This 
199d0 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73  later.** form is
199e0 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72   used for name r
199f0 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e  esolution with n
19a00 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  ested FROM claus
19a10 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  es..*/.struct Ex
19a20 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  prList {.  int n
19a30 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
19a40 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
19a50 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68  xpressions on th
19a60 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75  e list */.  stru
19a70 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d  ct ExprList_item
19a80 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65   { /* For each e
19a90 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
19aa0 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70   list */.    Exp
19ab0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
19ac0 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
19ad0 65 20 74 72 65 65 20 66 6f 72 20 74 68 69 73 20  e tree for this 
19ae0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
19af0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
19b00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
19b10 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  en associated wi
19b20 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69  th this expressi
19b30 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
19b40 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20  zSpan;          
19b50 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
19b60 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  xt of the expres
19b70 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73  sion */.    u8 s
19b80 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
19b90 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53      /* 1 for DES
19ba0 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a  C or 0 for ASC *
19bb0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64  /.    unsigned d
19bc0 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a  one :1;       /*
19bd0 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63   A flag to indic
19be0 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73  ate when process
19bf0 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20  ing is finished 
19c00 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
19c10 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f  bSpanIsTab :1; /
19c20 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42  * zSpan holds DB
19c30 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f  .TABLE.COLUMN */
19c40 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65  .    unsigned re
19c50 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20  usable :1;   /* 
19c60 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
19c70 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20  ion is reusable 
19c80 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
19c90 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20       struct {.  
19ca0 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72        u16 iOrder
19cb0 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46  ByCol;      /* F
19cc0 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c  or ORDER BY, col
19cd0 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65  umn number in re
19ce0 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20  sult set */.    
19cf0 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
19d00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
19d10 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
19d20 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
19d30 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20   */.      } x;. 
19d40 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45       int iConstE
19d50 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20  xprReg;      /* 
19d60 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63  Register in whic
19d70 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20  h Expr value is 
19d80 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20  cached */.    } 
19d90 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  u;.  } a[1];    
19da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19db0 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61   One slot for ea
19dc0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
19dd0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
19de0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
19df0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
19e00 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
19e10 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
19e20 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
19e30 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
19e40 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
19e50 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
19e60 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
19e70 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
19e80 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
19e90 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
19ea0 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
19eb0 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
19ec0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
19ed0 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
19ee0 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
19ef0 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
19f00 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
19f10 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
19f20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
19f30 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
19f40 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
19f50 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
19f60 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
19f70 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
19f80 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
19f90 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
19fa0 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
19fb0 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
19fc0 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
19fd0 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
19fe0 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
19ff0 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
1a000 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
1a010 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
1a020 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1a030 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1a040 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
1a050 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
1a060 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1a070 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
1a080 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
1a090 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
1a0a0 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
1a0b0 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
1a0c0 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
1a0d0 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
1a0e0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1a0f0 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79  e bitmask dataty
1a100 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  pe defined below
1a110 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72   is used for var
1a120 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
1a130 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69  ns..**.** Changi
1a140 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36  ng this from a 6
1a150 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69  4-bit to a 32-bi
1a160 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68  t type limits th
1a170 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  e number of.** t
1a180 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20  ables in a join 
1a190 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66  to 32 instead of
1a1a0 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73   64.  But it als
1a1b0 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69  o reduces the si
1a1c0 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62  ze.** of the lib
1a1d0 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65  rary by 738 byte
1a1e0 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69  s on ix86..*/.#i
1a1f0 66 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d  fdef SQLITE_BITM
1a200 41 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64  ASK_TYPE.  typed
1a210 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53  ef SQLITE_BITMAS
1a220 4b 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a  K_TYPE Bitmask;.
1a230 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
1a240 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e  u64 Bitmask;.#en
1a250 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  dif../*.** The n
1a260 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
1a270 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
1a280 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
1a290 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
1a2a0 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
1a2b0 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
1a2c0 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
1a2d0 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
1a2e0 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
1a2f0 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
1a300 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
1a310 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28  e MASKBIT32(n) (
1a320 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31  ((unsigned int)1
1a330 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
1a340 41 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28 42  ALLBITS      ((B
1a350 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a  itmask)-1)../*.*
1a360 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1a370 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
1a380 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  bes the FROM cla
1a390 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
1a3a0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61  statement..** Ea
1a3b0 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ch table or subq
1a3c0 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
1a3d0 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70   clause is a sep
1a3e0 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66  arate element of
1a3f0 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e  .** the SrcList.
1a400 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a  a[] array..**.**
1a410 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69   With the additi
1a420 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64  on of multiple d
1a430 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c  atabase support,
1a440 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1a450 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20  tructure.** can 
1a460 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
1a470 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69  describe a parti
1a480 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68  cular table such
1a490 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   as the table th
1a4a0 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65  at.** is modifie
1a4b0 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20  d by an INSERT, 
1a4c0 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
1a4d0 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  E statement.  In
1a4e0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a   standard SQL,.*
1a4f0 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d  * such a table m
1a500 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20  ust be a simple 
1a510 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69  name: ID.  But i
1a520 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61  n SQLite, the ta
1a530 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62  ble can.** now b
1a540 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
1a550 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c  a database name,
1a560 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65   a dot, then the
1a570 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e   table name: ID.
1a580 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f  ID..**.** The jo
1a590 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75  intype starts ou
1a5a0 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f  t showing the jo
1a5b0 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20  in type between 
1a5c0 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
1a5d0 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78  e.** and the nex
1a5e0 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c  t table on the l
1a5f0 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72  ist.  The parser
1a600 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74   builds the list
1a610 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75   this way..** Bu
1a620 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  t sqlite3SrcList
1a630 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20  ShiftJoinType() 
1a640 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65  later shifts the
1a650 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68   jointypes so th
1a660 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74  at each.** joint
1a670 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68  ype expresses th
1a680 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  e join between t
1a690 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  he table and the
1a6a0 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e   previous table.
1a6b0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f  .**.** In the co
1a6c0 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65  lUsed field, the
1a6d0 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
1a6e0 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20  (bit 63) is set 
1a6f0 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  if the table.** 
1a700 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68  contains more th
1a710 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e  an 63 columns an
1a720 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c  d the 64-th or l
1a730 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75  ater column is u
1a740 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  sed..*/.struct S
1a750 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  rcList {.  int n
1a760 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
1a770 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
1a780 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
1a790 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1a7a0 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63   */.  u32 nAlloc
1a7b0 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
1a7c0 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
1a7d0 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
1a7e0 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
1a7f0 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
1a800 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1a810 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f  a;  /* Schema to
1a820 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d   which this item
1a830 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20   is fixed */.   
1a840 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65   char *zDatabase
1a850 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61  ;  /* Name of da
1a860 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
1a870 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
1a880 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1a890 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
1a8a0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  e table */.    c
1a8b0 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20  har *zAlias;    
1a8c0 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74   /* The "B" part
1a8d0 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70   of a "A AS B" p
1a8e0 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73  hrase.  zName is
1a8f0 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20   the "A" */.    
1a900 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1a910 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c    /* An SQL tabl
1a920 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1a930 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  to zName */.    
1a940 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1a950 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74    /* A SELECT st
1a960 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20  atement used in 
1a970 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65  place of a table
1a980 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74   name */.    int
1a990 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f   addrFillSub;  /
1a9a0 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62  * Address of sub
1a9b0 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66  routine to manif
1a9c0 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a  est a subquery *
1a9d0 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74  /.    int regRet
1a9e0 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  urn;    /* Regis
1a9f0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75  ter holding retu
1aa00 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64  rn address of ad
1aa10 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20  drFillSub */.   
1aa20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
1aa30 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20     /* Registers 
1aa40 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20  holding results 
1aa50 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  of a co-routine 
1aa60 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a  */.    struct {.
1aa70 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70        u8 jointyp
1aa80 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
1aa90 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
1aaa0 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74  this table and t
1aab0 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
1aac0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f       unsigned no
1aad0 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
1aae0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
1aaf0 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
1ab00 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
1ab10 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64    unsigned isInd
1ab20 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20  exedBy :1;   /* 
1ab30 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
1ab40 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63   an INDEXED BY c
1ab50 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
1ab60 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e  nsigned isTabFun
1ab70 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75  c :1;     /* Tru
1ab80 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65  e if table-value
1ab90 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61  d-function synta
1aba0 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  x */.      unsig
1abb0 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
1abc0 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
1abd0 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
1abe0 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
1abf0 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
1ac00 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
1ac10 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
1ac20 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
1ac30 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1ac40 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
1ac50 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
1ac60 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
1ac70 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d  in WITH */.    }
1ac80 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   fg;.#ifndef SQL
1ac90 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
1aca0 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49  .    u8 iSelectI
1acb0 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65  d;     /* If pSe
1acc0 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20  lect!=0, the id 
1acd0 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  of the sub-selec
1ace0 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64  t in EQP */.#end
1acf0 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  if.    int iCurs
1ad00 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
1ad10 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
1ad20 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
1ad30 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
1ad40 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
1ad50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
1ad60 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
1ad70 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
1ad80 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
1ad90 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
1ada0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
1adb0 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
1adc0 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
1add0 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
1ade0 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
1adf0 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
1ae00 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64        char *zInd
1ae10 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64  exedBy;    /* Id
1ae20 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49  entifier from "I
1ae30 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65  NDEXED BY <zInde
1ae40 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  x>" clause */.  
1ae50 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46      ExprList *pF
1ae60 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75  uncArg;  /* Argu
1ae70 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76  ments to table-v
1ae80 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a  alued-function *
1ae90 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20  /.    } u1;.    
1aea0 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b  Index *pIBIndex;
1aeb0 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
1aec0 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
1aed0 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65  ng to u1.zIndexe
1aee0 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  dBy */.  } a[1];
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1af00 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
1af10 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
1af20 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1af30 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
1af40 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
1af50 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
1af60 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
1af70 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
1af80 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
1af90 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
1afa0 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
1afb0 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
1afc0 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
1afd0 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
1afe0 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
1aff0 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
1b000 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
1b010 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
1b020 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
1b030 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1b040 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
1b050 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
1b060 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1b070 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
1b080 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
1b090 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
1b0a0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
1b0b0 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
1b0c0 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
1b0d0 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
1b0e0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
1b0f0 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
1b100 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
1b110 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
1b120 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
1b130 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
1b140 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
1b150 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
1b160 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
1b170 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
1b180 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
1b190 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
1b1a0 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1b1b0 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
1b1c0 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1b1d0 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55  :.**     WHERE_U
1b1e0 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f  SE_LIMIT  == SF_
1b1f0 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64  FixedLimit.*/.#d
1b200 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1b210 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
1b220 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
1b230 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1b240 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
1b250 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
1b260 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1b270 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
1b280 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1b290 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
1b2a0 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
1b2b0 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
1b2c0 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
1b2d0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
1b2e0 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
1b2f0 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
1b300 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
1b310 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
1b320 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
1b330 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30  S_MULTIROW 0x000
1b340 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20  8 /* ONEPASS is 
1b350 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  ok with multiple
1b360 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
1b370 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
1b380 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f  S_OK    0x0010 /
1b390 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
1b3a0 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
1b3b0 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
1b3c0 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53  HERE_OR_SUBCLAUS
1b3d0 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20  E     0x0020 /* 
1b3e0 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62  Processing a sub
1b3f0 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20 6f  -WHERE as part o
1b400 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f.              
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b420 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f          ** the O
1b430 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20  R optimization  
1b440 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b450 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20  _GROUPBY        
1b460 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64    0x0040 /* pOrd
1b470 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erBy is really a
1b480 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65   GROUP BY */.#de
1b490 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1b4a0 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30 30  NCTBY       0x00
1b4b0 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69  80 /* pOrderby i
1b4c0 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49  s really a DISTI
1b4d0 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  NCT clause */.#d
1b4e0 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54  efine WHERE_WANT
1b4f0 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30  _DISTINCT    0x0
1b500 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75  100 /* All outpu
1b510 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69  t needs to be di
1b520 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e  stinct */.#defin
1b530 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52  e WHERE_SORTBYGR
1b540 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30 20  OUP      0x0200 
1b550 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74  /* Support sqlit
1b560 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
1b570 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ) */.#define WHE
1b580 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20  RE_SEEK_TABLE   
1b590 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f      0x0400 /* Do
1b5a0 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73   not defer seeks
1b5b0 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a   on main table *
1b5c0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b5d0 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20  ORDERBY_LIMIT   
1b5e0 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52   0x0800 /* ORDER
1b5f0 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20  BY+LIMIT on the 
1b600 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64  inner loop */.#d
1b610 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b  efine WHERE_SEEK
1b620 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31  _UNIQ_TABLE  0x1
1b630 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65  000 /* Do not de
1b640 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69  fer seeks if uni
1b650 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  que */.         
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b670 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20  *     0x2000    
1b680 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1b690 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ed */.#define WH
1b6a0 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20  ERE_USE_LIMIT   
1b6b0 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55       0x4000 /* U
1b6c0 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20  se the LIMIT in 
1b6d0 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a  cost estimates *
1b6e0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1b6f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1b700 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63   0x8000    not c
1b710 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1b720 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
1b730 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
1b740 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
1b750 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
1b760 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1b770 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
1b780 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
1b790 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
1b7a0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1b7b0 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
1b7c0 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
1b7d0 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
1b7e0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
1b7f0 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
1b800 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
1b810 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
1b820 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1b830 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
1b840 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
1b850 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
1b860 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
1b870 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
1b880 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
1b890 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
1b8a0 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
1b8b0 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
1b8c0 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
1b8d0 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
1b8e0 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
1b8f0 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
1b900 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
1b910 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
1b920 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
1b930 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
1b940 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
1b950 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
1b960 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
1b970 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1b980 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
1b990 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
1b9a0 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
1b9b0 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
1b9c0 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
1b9d0 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
1b9e0 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
1b9f0 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
1ba00 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
1ba10 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
1ba20 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
1ba30 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
1ba40 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
1ba50 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
1ba60 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f  inner-most.** co
1ba70 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65  ntext is searche
1ba80 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20  d first.  If no 
1ba90 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1baa0 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a  the next outer.*
1bab0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65  * context is che
1bac0 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20  cked.  If there 
1bad0 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63  is still no matc
1bae0 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74  h, the next cont
1baf0 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65  ext.** is checke
1bb00 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73  d.  This process
1bb10 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c   continues until
1bb20 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20   either a match 
1bb30 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61  is found.** or a
1bb40 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20  ll contexts are 
1bb50 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d  check.  When a m
1bb60 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1bb70 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f  he nRef member o
1bb80 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74  f.** the context
1bb90 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1bba0 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65  match is increme
1bbb0 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68  nted..**.** Each
1bbc0 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
1bbd0 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
1bbe0 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
1bbf0 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
1bc00 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1bc10 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
1bc20 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
1bc30 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
1bc40 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
1bc50 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
1bc60 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
1bc70 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
1bc80 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
1bc90 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
1bca0 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
1bcb0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
1bcc0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
1bcd0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1bce0 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
1bcf0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1bd00 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
1bd10 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
1bd20 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
1bd30 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ames */.  union 
1bd40 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
1bd50 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70  pEList;    /* Op
1bd60 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72  tional list of r
1bd70 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e  esult-set column
1bd80 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f  s */.    AggInfo
1bd90 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
1bda0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1bdb0 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
1bdc0 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
1bdd0 20 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65     Upsert *pUpse
1bde0 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f  rt;     /* ON CO
1bdf0 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e  NFLICT clause in
1be00 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61  formation from a
1be10 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20  n upsert */.  } 
1be20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  uNC;.  NameConte
1be30 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
1be40 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
1be50 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
1be60 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
1be70 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
1be80 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1be90 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
1bea0 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
1beb0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1bed0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1bee0 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
1bef0 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
1bf00 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
1bf10 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
1bf20 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
1bf30 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
1bf40 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
1bf50 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
1bf60 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
1bf70 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
1bf80 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  eld..**.** Value
1bf90 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c   constraints (al
1bfa0 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73  l checked via as
1bfb0 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e  sert()):.**    N
1bfc0 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53  C_HasAgg    == S
1bfd0 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e  F_HasAgg.**    N
1bfe0 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53  C_MinMaxAgg == S
1bff0 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53  F_MinMaxAgg == S
1c000 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
1c010 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  X.**.*/.#define 
1c020 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30  NC_AllowAgg  0x0
1c030 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74  001  /* Aggregat
1c040 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
1c050 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
1c060 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49  #define NC_PartI
1c070 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  dx   0x0002  /* 
1c080 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1c090 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  g a partial inde
1c0a0 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69  x WHERE */.#defi
1c0b0 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
1c0c0 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20  0x0004  /* True 
1c0d0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
1c0e0 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
1c0f0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
1c100 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
1c110 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65   0x0008  /* True
1c120 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
1c130 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
1c140 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
1c150 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30  e NC_HasAgg    0
1c160 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72  x0010  /* One or
1c170 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
1c180 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
1c190 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78  /.#define NC_Idx
1c1a0 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f  Expr   0x0020  /
1c1b0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1c1c0 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43  ing columns of C
1c1d0 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
1c1e0 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c  define NC_VarSel
1c1f0 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41  ect 0x0040  /* A
1c200 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
1c210 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73 65  uery has been se
1c220 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
1c230 5f 55 45 4c 69 73 74 20 20 20 20 30 78 30 30 38  _UEList    0x008
1c240 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e  0  /* True if uN
1c250 43 2e 70 45 4c 69 73 74 20 69 73 20 75 73 65 64  C.pEList is used
1c260 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55   */.#define NC_U
1c270 41 67 67 49 6e 66 6f 20 20 30 78 30 31 30 30 20  AggInfo  0x0100 
1c280 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e   /* True if uNC.
1c290 70 41 67 67 49 6e 66 6f 20 69 73 20 75 73 65 64  pAggInfo is used
1c2a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55   */.#define NC_U
1c2b0 55 70 73 65 72 74 20 20 20 30 78 30 32 30 30 20  Upsert   0x0200 
1c2c0 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e   /* True if uNC.
1c2d0 70 55 70 73 65 72 74 20 69 73 20 75 73 65 64 20  pUpsert is used 
1c2e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69  */.#define NC_Mi
1c2f0 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20  nMaxAgg 0x1000  
1c300 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65  /* min/max aggre
1c310 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65  gates seen.  See
1c320 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23   note above */.#
1c330 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65  define NC_Comple
1c340 78 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54  x   0x2000  /* T
1c350 72 75 65 20 69 66 20 61 20 66 75 6e 63 74 69 6f  rue if a functio
1c360 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20 73 65  n or subquery se
1c370 65 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  en */../*.** An 
1c380 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1c390 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65 63 74  following object
1c3a0 20 64 65 73 63 72 69 62 65 73 20 61 20 73 69 6e   describes a sin
1c3b0 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a  gle ON CONFLICT.
1c3c0 2a 2a 20 63 6c 61 75 73 65 20 69 6e 20 61 6e 20  ** clause in an 
1c3d0 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  upsert..**.** Th
1c3e0 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74 20  e pUpsertTarget 
1c3f0 66 69 65 6c 64 20 69 73 20 6f 6e 6c 79 20 73 65  field is only se
1c400 74 20 69 66 20 74 68 65 20 4f 4e 20 43 4f 4e 46  t if the ON CONF
1c410 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 63 6c  LICT clause incl
1c420 75 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74  udes.** conflict
1c430 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e 20  -target clause. 
1c440 20 28 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49 43   (In "ON CONFLIC
1c450 54 28 61 2c 62 29 22 20 74 68 65 20 22 28 61 2c  T(a,b)" the "(a,
1c460 62 29 22 20 69 73 20 74 68 65 0a 2a 2a 20 63 6f  b)" is the.** co
1c470 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c  nflict-target cl
1c480 61 75 73 65 2e 29 20 20 54 68 65 20 70 55 70 73  ause.)  The pUps
1c490 65 72 74 54 61 72 67 65 74 57 68 65 72 65 20 69  ertTargetWhere i
1c4a0 73 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a  s the optional.*
1c4b0 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 75  * WHERE clause u
1c4c0 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20  sed to identify 
1c4d0 70 61 72 74 69 61 6c 20 75 6e 69 71 75 65 20 69  partial unique i
1c4e0 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55  ndexes..**.** pU
1c4f0 70 73 65 72 74 53 65 74 20 69 73 20 74 68 65 20  psertSet is the 
1c500 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65  list of column=e
1c510 78 70 72 20 74 65 72 6d 73 20 6f 66 20 74 68 65  xpr terms of the
1c520 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1c530 74 2e 20 0a 2a 2a 20 54 68 65 20 70 55 70 73 65  t. .** The pUpse
1c540 72 74 53 65 74 20 66 69 65 6c 64 20 69 73 20 4e  rtSet field is N
1c550 55 4c 4c 20 66 6f 72 20 61 20 4f 4e 20 43 4f 4e  ULL for a ON CON
1c560 46 4c 49 43 54 20 44 4f 20 4e 4f 54 48 49 4e 47  FLICT DO NOTHING
1c570 2e 20 20 54 68 65 0a 2a 2a 20 70 55 70 73 65 72  .  The.** pUpser
1c580 74 57 68 65 72 65 20 69 73 20 74 68 65 20 57 48  tWhere is the WH
1c590 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74  ERE clause for t
1c5a0 68 65 20 55 50 44 41 54 45 20 61 6e 64 20 69 73  he UPDATE and is
1c5b0 20 4e 55 4c 4c 20 69 66 20 74 68 65 0a 2a 2a 20   NULL if the.** 
1c5c0 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20  WHERE clause is 
1c5d0 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 72 75  omitted..*/.stru
1c5e0 63 74 20 55 70 73 65 72 74 20 7b 0a 20 20 45 78  ct Upsert {.  Ex
1c5f0 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74 54  prList *pUpsertT
1c600 61 72 67 65 74 3b 20 20 2f 2a 20 4f 70 74 69 6f  arget;  /* Optio
1c610 6e 61 6c 20 64 65 73 63 72 69 70 74 69 6f 6e 20  nal description 
1c620 6f 66 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69  of conflicting i
1c630 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndex */.  Expr *
1c640 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68 65  pUpsertTargetWhe
1c650 72 65 3b 20 2f 2a 20 57 48 45 52 45 20 63 6c 61  re; /* WHERE cla
1c660 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
1c670 69 6e 64 65 78 20 74 61 72 67 65 74 73 20 2a 2f  index targets */
1c680 0a 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72  .  Index *pUpser
1c690 74 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  tIdx;        /* 
1c6a0 43 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20  Constraint that 
1c6b0 70 55 70 73 65 72 74 54 61 72 67 65 74 20 69 64  pUpsertTarget id
1c6c0 65 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 45 78  entifies */.  Ex
1c6d0 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53  prList *pUpsertS
1c6e0 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 53  et;     /* The S
1c6f0 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 61  ET clause from a
1c700 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50  n ON CONFLICT UP
1c710 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72 20 2a  DATE */.  Expr *
1c720 70 55 70 73 65 72 74 57 68 65 72 65 3b 20 20 20  pUpsertWhere;   
1c730 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
1c740 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  use for the ON C
1c750 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a  ONFLICT UPDATE *
1c760 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 55 70  /.  SrcList *pUp
1c770 73 65 72 74 53 72 63 3b 20 20 20 20 20 20 2f 2a  sertSrc;      /*
1c780 20 54 61 62 6c 65 20 74 6f 20 62 65 20 75 70 64   Table to be upd
1c790 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ated */.  int re
1c7a0 67 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  gData;          
1c7b0 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67      /* First reg
1c7c0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 61 72  ister holding ar
1c7d0 72 61 79 20 6f 66 20 56 41 4c 55 45 53 20 2a 2f  ray of VALUES */
1c7e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
1c7f0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1c800 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1c810 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69  e contains all i
1c820 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65  nformation.** ne
1c830 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
1c840 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67   code for a sing
1c850 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
1c860 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69  ent..**.** nLimi
1c870 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69  t is set to -1 i
1c880 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49  f there is no LI
1c890 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66  MIT clause.  nOf
1c8a0 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30  fset is set to 0
1c8b0 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73  ..** If there is
1c8c0 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
1c8d0 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73   the parser sets
1c8e0 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76   nLimit to the v
1c8f0 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  alue of the.** l
1c900 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
1c910 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
1c920 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20   the offset (or 
1c930 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  0 if there is no
1c940 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42  t.** offset).  B
1c950 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69  ut later on, nLi
1c960 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
1c970 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72  become the memor
1c980 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69  y locations.** i
1c990 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20  n the VDBE that 
1c9a0 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74  record the limit
1c9b0 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e   and offset coun
1c9c0 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72  ters..**.** addr
1c9d0 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69  OpenEphm[] entri
1c9e0 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61  es contain the a
1c9f0 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65  ddress of OP_Ope
1ca00 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
1ca10 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64  es..** These add
1ca20 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73  resses must be s
1ca30 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65  tored so that we
1ca40 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64   can go back and
1ca50 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20   fill in.** the 
1ca60 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50  P4_KEYINFO and P
1ca70 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74  2 parameters lat
1ca80 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65  er.  Neither the
1ca90 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20   KeyInfo nor.** 
1caa0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1cab0 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20  lumns in P2 can 
1cac0 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74  be computed at t
1cad0 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20  he same time.** 
1cae0 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70  as the OP_OpenEp
1caf0 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  hm instruction i
1cb00 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20  s coded because 
1cb10 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e  not.** enough in
1cb20 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1cb30 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  the compound que
1cb40 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74  ry is known at t
1cb50 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68  hat point..** Th
1cb60 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
1cb70 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e  drOpenTran[0] an
1cb80 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63  d [1] contains c
1cb90 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1cba0 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65  es.** for the re
1cbb0 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b  sult set.  The K
1cbc0 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
1cbd0 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61  penEphm[2] conta
1cbe0 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a  ins collating.**
1cbf0 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74   sequences for t
1cc00 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1cc10 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  se..*/.struct Se
1cc20 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  lect {.  ExprLis
1cc30 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20  t *pEList;      
1cc40 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66  /* The fields of
1cc50 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20   the result */. 
1cc60 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1cc70 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1cc80 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41  f: TK_UNION TK_A
1cc90 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20  LL TK_INTERSECT 
1cca0 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c  TK_EXCEPT */.  L
1ccb0 6f 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77  ogEst nSelectRow
1ccc0 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
1ccd0 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  ed number of res
1cce0 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33  ult rows */.  u3
1ccf0 32 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20  2 selFlags;     
1cd00 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
1cd10 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  SF_* values */. 
1cd20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66   int iLimit, iOf
1cd30 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72  fset;   /* Memor
1cd40 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64  y registers hold
1cd50 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53  ing LIMIT & OFFS
1cd60 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23  ET counters */.#
1cd70 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
1cd80 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53  NABLED.  char zS
1cd90 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20  elName[12];     
1cda0 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65  /* Symbolic name
1cdb0 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20   of this SELECT 
1cdc0 75 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e  use for debuggin
1cdd0 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  g */.#endif.  in
1cde0 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  t addrOpenEphm[2
1cdf0 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45  ];   /* OP_OpenE
1ce00 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c  phem opcodes rel
1ce10 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ated to this sel
1ce20 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ect */.  SrcList
1ce30 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20   *pSrc;         
1ce40 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75  /* The FROM clau
1ce50 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  se */.  Expr *pW
1ce60 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f  here;          /
1ce70 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1ce80 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
1ce90 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f   *pGroupBy;    /
1cea0 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63  * The GROUP BY c
1ceb0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1cec0 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20  *pHaving;       
1ced0 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20    /* The HAVING 
1cee0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1cef0 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
1cf00 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20     /* The ORDER 
1cf10 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53  BY clause */.  S
1cf20 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20  elect *pPrior;  
1cf30 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73        /* Prior s
1cf40 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
1cf50 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
1cf60 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ment */.  Select
1cf70 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
1cf80 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20   /* Next select 
1cf90 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61  to the left in a
1cfa0 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45   compound */.  E
1cfb0 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20  xpr *pLimit;    
1cfc0 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65        /* LIMIT e
1cfd0 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
1cfe0 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
1cff0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1d000 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
1d010 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
1d020 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
1d030 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
1d040 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1d050 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
1d060 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
1d070 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
1d080 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
1d090 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a  lect Flag"..**.*
1d0a0 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1d0b0 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1d0c0 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a   via assert()).*
1d0d0 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67 20  *     SF_HasAgg 
1d0e0 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67      == NC_HasAgg
1d0f0 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61  .**     SF_MinMa
1d100 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d  xAgg  == NC_MinM
1d110 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c  axAgg     == SQL
1d120 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1d130 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c  **     SF_FixedL
1d140 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53  imit == WHERE_US
1d150 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69  E_LIMIT.*/.#defi
1d160 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
1d170 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a       0x00001  /*
1d180 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
1d190 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
1d1a0 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20  efine SF_All    
1d1b0 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32 20          0x00002 
1d1c0 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65   /* Includes the
1d1d0 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a   ALL keyword */.
1d1e0 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c  #define SF_Resol
1d1f0 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30 30  ved       0x0000
1d200 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  4  /* Identifier
1d210 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
1d220 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lved */.#define 
1d230 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20  SF_Aggregate    
1d240 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f    0x00008  /* Co
1d250 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74  ntains agg funct
1d260 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20  ions or a GROUP 
1d270 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  BY */.#define SF
1d280 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20 20  _HasAgg         
1d290 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74  0x00010  /* Cont
1d2a0 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
1d2b0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1d2c0 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
1d2d0 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f  eral  0x00020  /
1d2e0 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
1d2f0 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
1d300 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
1d310 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30  panded       0x0
1d320 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0040  /* sqlite3
1d330 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
1d340 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
1d350 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
1d360 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30  ypeInfo    0x000
1d370 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  80  /* FROM subq
1d380 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
1d390 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
1d3a0 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
1d3b0 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30 20  d       0x00100 
1d3c0 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
1d3d0 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
1d3e0 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
1d3f0 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32 30  s         0x0020
1d400 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
1d410 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
1d420 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1d430 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
1d440 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69    0x00400  /* Si
1d450 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
1d460 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1d470 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
1d480 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
1d490 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72   0x00800  /* Par
1d4a0 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
1d4b0 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
1d4c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1d4d0 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78  inMaxAgg      0x
1d4e0 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  01000  /* Aggreg
1d4f0 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
1d500 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
1d510 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
1d520 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30  rsive      0x020
1d530 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
1d540 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
1d550 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
1d560 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64  #define SF_Fixed
1d570 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30  Limit     0x0400
1d580 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77  0  /* nSelectRow
1d590 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61   set by a consta
1d5a0 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66  nt LIMIT */.#def
1d5b0 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
1d5c0 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20 2f  ert   0x08000  /
1d5d0 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
1d5e0 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1d5f0 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1d600 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64  ine SF_Converted
1d610 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20 2f        0x10000  /
1d620 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70  * By convertComp
1d630 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1d640 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1d650 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64  e SF_IncludeHidd
1d660 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20  en  0x20000  /* 
1d670 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63  Include hidden c
1d680 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74  olumns in output
1d690 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1d6a0 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30 78  omplexResult  0x
1d6b0 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c 74  40000  /* Result
1d6c0 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 73 75   set contains su
1d6d0 62 71 75 65 72 79 20 6f 72 20 66 75 6e 63 74 69  bquery or functi
1d6e0 6f 6e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  on */.../*.** Th
1d6f0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
1d700 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73  ELECT can be dis
1d710 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
1d720 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66  ral ways, as def
1d730 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f  ined.** by one o
1d740 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1d750 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52  macros.  The "SR
1d760 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
1d770 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a  "SELECT Result.*
1d780 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20  * Type"..**.**  
1d790 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20     SRT_Union    
1d7a0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1d7b0 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74   as a key in a t
1d7c0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a  emporary index.*
1d7d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d7e0 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64        identified
1d7f0 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61   by pDest->iSDPa
1d800 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
1d810 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65  T_Except      Re
1d820 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f  move results fro
1d830 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  m the temporary 
1d840 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44  index pDest->iSD
1d850 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
1d860 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
1d870 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d  Store a 1 in mem
1d880 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e  ory cell pDest->
1d890 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72  iSDParm if the r
1d8a0 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20  esult.**        
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1d8c0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a   is not empty..*
1d8d0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1d8e0 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74  card     Throw t
1d8f0 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e  he results away.
1d900 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62    This is used b
1d910 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20  y SELECT.**     
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d930 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
1d940 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65  n triggers whose
1d950 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
1d960 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d970 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65          the side
1d980 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63  -effects of func
1d990 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  tions..**.** All
1d9a0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72   of the above ar
1d9b0 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65  e free to ignore
1d9c0 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20   their ORDER BY 
1d9d0 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68  clause. Those th
1d9e0 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73  at.** follow mus
1d9f0 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45  t honor the ORDE
1da00 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
1da10 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75  **     SRT_Outpu
1da20 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20  t      Generate 
1da30 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20  a row of output 
1da40 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65  (using the OP_Re
1da50 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20  sultRow.**      
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1da70 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20  pcode) for each 
1da80 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c  row in the resul
1da90 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  t set..**.**    
1daa0 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
1dab0 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74   Only valid if t
1dac0 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73  he result is a s
1dad0 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  ingle column..**
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66       Store the f
1db00 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
1db10 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20  he first result 
1db20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  row.**          
1db30 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65             in re
1db40 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1db50 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64  DParm then aband
1db60 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20  on the rest.**  
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e     of the query.
1db90 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69    This destinati
1dba0 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49  on implies "LIMI
1dbb0 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  T 1"..**.**     
1dbc0 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
1dbd0 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20  The result must 
1dbe0 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  be a single colu
1dbf0 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a  mn.  Store each.
1dc00 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1dc10 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65         row of re
1dc20 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20  sult as the key 
1dc30 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  in table pDest->
1dc40 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69  Apply the affini
1dc70 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73  ty pDest->affSds
1dc80 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67  t before storing
1dc90 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1dca0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e          results.
1dcb0 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d    Used to implem
1dcc0 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20  ent "IN (SELECT 
1dcd0 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  ...)"..**.**    
1dce0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1dcf0 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f   Create an tempo
1dd00 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1dd10 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74  ->iSDParm and st
1dd20 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1dd30 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72             the r
1dd40 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65  esult there. The
1dd50 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
1dd60 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20  open after.**   
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd80 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68    returning.  Th
1dd90 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54  is is like SRT_T
1dda0 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74  able except that
1ddb0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ddc0 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73          this des
1ddd0 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50  tination uses OP
1dde0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74  _OpenEphemeral t
1ddf0 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20  o create.**     
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e  the table first.
1de20 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43  .**.**     SRT_C
1de30 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72  oroutine   Gener
1de40 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65  ate a co-routine
1de50 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20   that returns a 
1de60 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20  new row of.**   
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74    results each t
1de90 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65  ime it is invoke
1dea0 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f  d.  The entry po
1deb0 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  int.**          
1dec0 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
1ded0 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20  e co-routine is 
1dee0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1def0 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
1df00 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  m.**            
1df10 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65           and the
1df20 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73   result row is s
1df30 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e  tored in pDest->
1df40 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a  nDest registers.
1df50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1df60 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20         starting 
1df70 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73  with pDest->iSds
1df80 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1df90 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f  _Table       Sto
1dfa0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65  re results in te
1dfb0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1dfc0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1dfd0 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20       SRT_Fifo   
1dfe0 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b       This is lik
1dff0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65  e SRT_EphemTab e
1e000 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74  xcept that the t
1e010 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  able.**         
1e020 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61              is a
1e030 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64  ssumed to alread
1e040 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f  y be open.  SRT_
1e050 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20  Fifo has.**     
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e070 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  the additional p
1e080 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67  roperty of being
1e090 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a   able to ignore.
1e0a0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e0b0 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52         the ORDER
1e0c0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
1e0d0 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69  *     SRT_DistFi
1e0e0 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75  fo    Store resu
1e0f0 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  lts in a tempora
1e100 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1e110 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e130 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d  But also use tem
1e140 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1e150 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73  st->iSDParm+1 as
1e160 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e170 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64          a record
1e180 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65   of all prior re
1e190 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65  sults and ignore
1e1a0 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a   any duplicate.*
1e1b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e1c0 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d        rows.  Nam
1e1d0 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69  e means:  "Disti
1e1e0 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a  nct Fifo"..**.**
1e1f0 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20       SRT_Queue  
1e200 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1e210 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1e220 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1e230 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20  arm (really.**  
1e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e250 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41     an index).  A
1e260 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65  ppend a sequence
1e270 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20   number so that 
1e280 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20  all entries.**  
1e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2a0 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e     are distinct.
1e2b0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1e2c0 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65  istQueue   Store
1e2d0 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
1e2e0 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
1e2f0 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69  ->iSDParm only i
1e300 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
1e310 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d           the sam
1e320 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76  e record has nev
1e330 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62  er been stored b
1e340 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20  efore.  The.**  
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e360 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73     index at pDes
1e370 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c  t->iSDParm+1 hol
1e380 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72  d all prior stor
1e390 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  es..*/.#define S
1e3a0 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20  RT_Union        
1e3b0 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
1e3c0 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  lt as keys in an
1e3d0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1e3e0 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20  e SRT_Except    
1e3f0 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20     2  /* Remove 
1e400 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e  result from a UN
1e410 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  ION index */.#de
1e420 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20  fine SRT_Exists 
1e430 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72        3  /* Stor
1e440 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c  e 1 if the resul
1e450 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a  t is not empty *
1e460 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1e470 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a  scard      4  /*
1e480 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65   Do not save the
1e490 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72   results anywher
1e4a0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1e4b0 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20  _Fifo         5 
1e4c0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1e4d0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
1e4e0 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
1e4f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1e500 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20  DistFifo     6  
1e510 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f  /* Like SRT_Fifo
1e520 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
1e530 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ults only */.#de
1e540 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20  fine SRT_Queue  
1e550 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72        7  /* Stor
1e560 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71  e result in an q
1e570 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ueue */.#define 
1e580 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
1e590 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   8  /* Like SRT_
1e5a0 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75  Queue, but uniqu
1e5b0 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
1e5c0 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20  /../* The ORDER 
1e5d0 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e  BY clause is ign
1e5e0 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20  ored for all of 
1e5f0 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  the above */.#de
1e600 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72  fine IgnorableOr
1e610 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44  derby(X) ((X->eD
1e620 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75  est)<=SRT_DistQu
1e630 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52  eue)..#define SR
1e640 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39  T_Output       9
1e650 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68    /* Output each
1e660 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1e670 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65  /.#define SRT_Me
1e680 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a  m         10  /*
1e690 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
1e6a0 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a   a memory cell *
1e6b0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65  /.#define SRT_Se
1e6c0 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a  t         11  /*
1e6d0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
1e6e0 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1e6f0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1e700 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32  T_EphemTab    12
1e710 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e    /* Create tran
1e720 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74  sient tab and st
1e730 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62  ore like SRT_Tab
1e740 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  le */.#define SR
1e750 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33  T_Coroutine   13
1e760 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20    /* Generate a 
1e770 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
1e780 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
1e790 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1e7a0 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  14  /* Store res
1e7b0 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1e7c0 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1e7d0 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  wid */../*.** An
1e7e0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
1e7f0 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  s object describ
1e800 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20  es where to put 
1e810 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
1e820 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74  f.** a SELECT st
1e830 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
1e840 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a  ct SelectDest {.
1e850 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20    u8 eDest;     
1e860 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
1e870 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
1e880 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
1e890 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
1e8a0 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20    int iSDParm;  
1e8b0 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
1e8c0 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
1e8d0 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
1e8e0 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
1e8f0 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   iSdst;         
1e900 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1e910 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73  er where results
1e920 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a   are written */.
1e930 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20    int nSdst;    
1e940 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e950 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
1e960 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61  located */.  cha
1e970 72 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20  r *zAffSdst;    
1e980 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73    /* Affinity us
1e990 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53  ed when eDest==S
1e9a0 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72  RT_Set */.  Expr
1e9b0 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
1e9c0 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20   /* Key columns 
1e9d0 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e  for SRT_Queue an
1e9e0 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  d SRT_DistQueue 
1e9f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72  */.};../*.** Dur
1ea00 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ing code generat
1ea10 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  ion of statement
1ea20 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74  s that do insert
1ea30 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45  s into AUTOINCRE
1ea40 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20  MENT.** tables, 
1ea50 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
1ea60 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74  formation is att
1ea70 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62  ached to the Tab
1ea80 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a  le.u.autoInc.p.*
1ea90 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63  * pointer of eac
1eaa0 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  h autoincrement 
1eab0 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20  table to record 
1eac0 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d  some side inform
1ead0 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68  ation that.** th
1eae0 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1eaf0 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65   needs.  We have
1eb00 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62   to keep per-tab
1eb10 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  le autoincrement
1eb20 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
1eb30 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20  in case inserts 
1eb40 61 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20  are done within 
1eb50 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67  triggers.  Trigg
1eb60 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f  ers do not.** no
1eb70 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74  rmally coordinat
1eb80 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69  e their activiti
1eb90 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65  es, but we do ne
1eba0 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65  ed to coordinate
1ebb0 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20   the.** loading 
1ebc0 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75  and saving of au
1ebd0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f  toincrement info
1ebe0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
1ebf0 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b  ct AutoincInfo {
1ec00 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1ec10 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74  pNext;   /* Next
1ec20 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61   info block in a
1ec30 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c   list of them al
1ec40 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  l */.  Table *pT
1ec50 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ab;          /* 
1ec60 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20  Table this info 
1ec70 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20  block refers to 
1ec80 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
1ec90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1eca0 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  dex in sqlite3.a
1ecb0 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65  Db[] of database
1ecc0 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f   holding pTab */
1ecd0 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20  .  int regCtr;  
1ece0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
1ecf0 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64  ry register hold
1ed00 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f  ing the rowid co
1ed10 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unter */.};../*.
1ed20 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63  ** Size of the c
1ed30 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23  olumn cache.*/.#
1ed40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f  ifndef SQLITE_N_
1ed50 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e  COLCACHE.# defin
1ed60 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e SQLITE_N_COLCA
1ed70 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f  CHE 10.#endif../
1ed80 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e  *.** At least on
1ed90 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
1eda0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1edb0 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64  cture is created
1edc0 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69   for each.** tri
1edd0 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65  gger that may be
1ede0 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72   fired while par
1edf0 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  sing an INSERT, 
1ee00 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
1ee10 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41  .** statement. A
1ee20 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20  ll such objects 
1ee30 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
1ee40 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  e linked list he
1ee50 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65  aded at.** Parse
1ee60 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64  .pTriggerPrg and
1ee70 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74   deleted once st
1ee80 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74  atement compilat
1ee90 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ion has been.** 
1eea0 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  completed..**.**
1eeb0 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67   A Vdbe sub-prog
1eec0 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ram that impleme
1eed0 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64  nts the body and
1eee0 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
1eef0 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67  trigger.** Trigg
1ef00 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20  erPrg.pTrigger, 
1ef10 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75  assuming a defau
1ef20 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  lt ON CONFLICT c
1ef30 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67  lause of.** Trig
1ef40 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69  gerPrg.orconf, i
1ef50 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
1ef60 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67  TriggerPrg.pProg
1ef70 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  ram variable..**
1ef80 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67   The Parse.pTrig
1ef90 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65  gerPrg list neve
1efa0 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65  r contains two e
1efb0 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
1efc0 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66  same.** values f
1efd0 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72  or both pTrigger
1efe0 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a   and orconf..**.
1eff0 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72  ** The TriggerPr
1f000 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61  g.aColmask[0] va
1f010 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1f020 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a   a mask of old.*
1f030 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65   columns.** acce
1f040 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20  ssed (or set to 
1f050 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66  0 for triggers f
1f060 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  ired as a result
1f070 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74   of INSERT.** st
1f080 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
1f090 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
1f0a0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
1f0b0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1f0c0 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
1f0d0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
1f0e0 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
1f0f0 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
1f100 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
1f110 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
1f120 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1f130 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
1f140 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
1f150 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
1f160 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
1f170 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
1f180 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1f190 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
1f1a0 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
1f1b0 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
1f1c0 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
1f1d0 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
1f1e0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1f1f0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
1f200 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
1f210 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
1f220 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
1f230 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
1f240 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
1f250 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
1f260 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
1f270 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
1f280 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
1f290 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1f2a0 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
1f2b0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
1f2c0 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  30.  typedef uns
1f2d0 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61  igned char yDbMa
1f2e0 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41  sk[(SQLITE_MAX_A
1f2f0 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23  TTACHED+9)/8];.#
1f300 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1f310 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1f320 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29  [(I)/8]&(1<<((I)
1f330 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  &7)))!=0).# defi
1f340 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1f350 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29        memset((M)
1f360 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20  ,0,sizeof(M)).# 
1f370 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1f380 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49  (M,I)     (M)[(I
1f390 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37  )/8]|=(1<<((I)&7
1f3a0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1f3b0 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73  skAllZero(M)   s
1f3c0 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1f3d0 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20  ero(M).# define 
1f3e0 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
1f3f0 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73     (sqlite3DbMas
1f400 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a  kAllZero(M)==0).
1f410 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
1f420 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
1f430 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44  Mask;.# define D
1f440 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1f450 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61    (((M)&(((yDbMa
1f460 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29  sk)1)<<(I)))!=0)
1f470 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1f480 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29  Zero(M)      (M)
1f490 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1f4a0 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1f4b0 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31  M)|=(((yDbMask)1
1f4c0 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65  )<<(I)).# define
1f4d0 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1f4e0 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66  )   (M)==0.# def
1f4f0 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1f500 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65  o(M)   (M)!=0.#e
1f510 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53  ndif../*.** An S
1f520 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78  QL parser contex
1f530 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68  t.  A copy of th
1f540 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1f550 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
1f560 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  * the parser and
1f570 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74   down into all t
1f580 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e  he parser action
1f590 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
1f5a0 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72  r to.** carry ar
1f5b0 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ound information
1f5c0 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20   that is global 
1f5d0 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  to the entire pa
1f5e0 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  rse..**.** The s
1f5f0 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69  tructure is divi
1f600 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72  ded into two par
1f610 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61  ts.  When the pa
1f620 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a  rser and code.**
1f630 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74   generate call t
1f640 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73  hemselves recurs
1f650 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74  ively, the first
1f660 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72   part of the str
1f670 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e  ucture.** is con
1f680 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65  stant but the se
1f690 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73  cond part is res
1f6a0 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  et at the beginn
1f6b0 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a  ing and end of.*
1f6c0 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1f6d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62  ..**.** The nTab
1f6e0 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c  leLock and aTabl
1f6f0 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20  eLock variables 
1f700 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66  are only used if
1f710 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
1f720 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20  e.** feature is 
1f730 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
1f740 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
1f750 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
1f760 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
1f770 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1f780 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
1f790 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
1f7a0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
1f7b0 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
1f7c0 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
1f7d0 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
1f7e0 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
1f7f0 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
1f800 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
1f810 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
1f820 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
1f830 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1f840 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
1f850 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
1f860 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
1f870 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
1f880 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
1f890 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
1f8a0 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
1f8b0 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
1f8c0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1f8d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
1f8e0 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78  urn code from ex
1f8f0 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ecution */.  u8 
1f900 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
1f910 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
1f920 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
1f930 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
1f940 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
1f950 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
1f960 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
1f970 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
1f980 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
1f990 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
1f9a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f9b0 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
1f9c0 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
1f9d0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1f9e0 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
1f9f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1fa00 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
1fa10 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
1fa20 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
1fa30 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
1fa40 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1fa50 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
1fa60 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
1fa70 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
1fa80 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
1fa90 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1faa0 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
1fab0 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
1fac0 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f  on */.  u8 hasCo
1fad0 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20  mpound;      /* 
1fae0 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63  Need to invoke c
1faf0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1fb00 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1fb10 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74   */.  u8 okConst
1fb20 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b  Factor;    /* OK
1fb30 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63   to factor out c
1fb40 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38  onstants */.  u8
1fb50 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64   disableLookasid
1fb60 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  e; /* Number of 
1fb70 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20  times lookaside 
1fb80 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65  has been disable
1fb90 64 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61  d */.  u8 nColCa
1fba0 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  che;        /* N
1fbb0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
1fbc0 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20   in aColCache[] 
1fbd0 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
1fbe0 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
1fbf0 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
1fc00 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
1fc10 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
1fc20 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
1fc30 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
1fc40 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1fc50 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
1fc60 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1fc70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1fc80 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
1fc90 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
1fca0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1fcb0 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
1fcc0 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
1fcd0 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
1fce0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1fcf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
1fd00 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
1fd10 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1fd20 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  OpAlloc;        
1fd30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
1fd40 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ts allocated for
1fd50 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1fd60 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20   int szOpAlloc; 
1fd70 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
1fd80 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61  f memory space a
1fd90 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1fda0 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1fdb0 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20   iSelfTab;      
1fdc0 20 20 2f 2a 20 54 61 62 6c 65 20 61 73 73 6f 63    /* Table assoc
1fdd0 69 61 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e  iated with an in
1fde0 64 65 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20  dex on expr, or 
1fdf0 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 20  negative.       
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe10 2a 2a 20 6f 66 20 74 68 65 20 62 61 73 65 20 72  ** of the base r
1fe20 65 67 69 73 74 65 72 20 64 75 72 69 6e 67 20 63  egister during c
1fe30 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20  heck-constraint 
1fe40 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43  eval */.  int iC
1fe50 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
1fe60 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
1fe70 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
1fe80 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
1fe90 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
1fea0 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
1feb0 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
1fec0 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
1fed0 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
1fee0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  es */.  int nLab
1fef0 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
1ff00 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  Number of labels
1ff10 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a   used */.  int *
1ff20 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  aLabel;         
1ff30 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  /* Space to hold
1ff40 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20   the labels */. 
1ff50 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73   ExprList *pCons
1ff60 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e  tExpr;/* Constan
1ff70 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  t expressions */
1ff80 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
1ff90 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
1ffa0 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
1ffb0 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
1ffc0 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44  g parsed */.  yD
1ffd0 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
1ffe0 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
1fff0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
20000 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
20010 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
20020 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
20030 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
20040 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
20050 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ases */.  int re
20060 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f  gRowid;        /
20070 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
20080 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41  ng rowid of CREA
20090 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a  TE TABLE entry *
200a0 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b  /.  int regRoot;
200b0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
200c0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f  ster holding roo
200d0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
200e0 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f  r new objects */
200f0 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20  .  int nMaxArg; 
20100 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61          /* Max a
20110 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73  rgs passed to us
20120 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73  er function by s
20130 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69  ub-program */.#i
20140 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
20150 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c  ABLED.  int nSel
20160 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
20170 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
20180 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e   statements seen
20190 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
201a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
201b0 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e  HARED_CACHE.  in
201c0 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20  t nTableLock;   
201d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
201e0 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c  f locks in aTabl
201f0 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65  eLock */.  Table
20200 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b  Lock *aTableLock
20210 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61  ; /* Required ta
20220 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68  ble locks for sh
20230 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
20240 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f  */.#endif.  Auto
20250 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20  incInfo *pAinc; 
20260 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
20270 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d  about AUTOINCREM
20280 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  ENT counters */.
20290 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76    Parse *pToplev
202a0 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20  el;    /* Parse 
202b0 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61  structure for ma
202c0 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e  in program (or N
202d0 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ULL) */.  Table 
202e0 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f  *pTriggerTab;  /
202f0 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73  * Table triggers
20300 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
20310 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64   for */.  int ad
20320 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f  drCrTab;       /
20330 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  * Address of OP_
20340 43 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f  CreateBtree opco
20350 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42  de on CREATE TAB
20360 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65  LE */.  u32 nQue
20370 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20  ryLoop;      /* 
20380 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  Est number of it
20390 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75  erations of a qu
203a0 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29  ery (10*log2(N))
203b0 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73   */.  u32 oldmas
203c0 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
203d0 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
203e0 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
203f0 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b  /.  u32 newmask;
20400 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
20410 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
20420 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
20430 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b    u8 eTriggerOp;
20440 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44         /* TK_UPD
20450 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f  ATE, TK_INSERT o
20460 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20  r TK_DELETE */. 
20470 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20   u8 eOrconf;    
20480 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
20490 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
204a0 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20  icy for trigger 
204b0 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69  steps */.  u8 di
204c0 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20  sableTriggers;  
204d0 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62  /* True to disab
204e0 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a  le triggers */..
204f0 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
20500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20  *************.  
20540 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20  ** Fields above 
20550 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69  must be initiali
20560 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68  zed to zero.  Th
20570 65 20 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f  e fields that fo
20580 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20  llow,.  ** down 
20590 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
205a0 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76   of the recursiv
205b0 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f  e section, do no
205c0 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a  t need to be.  *
205d0 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73  * initialized as
205e0 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65   they will be se
205f0 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75  t before being u
20600 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  sed.  The bounda
20610 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72  ry is.  ** deter
20620 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f  mined by offseto
20630 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68  f(Parse,aColCach
20640 65 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e)..  **********
20650 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20690 2f 0a 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c  /..  struct yCol
206a0 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20  Cache {.    int 
206b0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
206c0 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f    /* Table curso
206d0 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
206e0 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  i16 iColumn;    
206f0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
20700 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a  olumn number */.
20710 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20      u8 tempReg; 
20720 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65            /* iRe
20730 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69  g is a temp regi
20740 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20  ster that needs 
20750 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20  to be freed */. 
20760 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20     int iLevel;  
20770 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74           /* Nest
20780 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20  ing level */.   
20790 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20   int iReg;      
207a0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69         /* Reg wi
207b0 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  th value of this
207c0 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73   column. 0 means
207d0 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e   none. */.    in
207e0 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20  t lru;          
207f0 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63      /* Least rec
20800 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79  ently used entry
20810 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73   has the smalles
20820 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61  t value */.  } a
20830 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f  ColCache[SQLITE_
20840 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a  N_COLCACHE];  /*
20850 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   One for each co
20860 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79  lumn cache entry
20870 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52   */.  int aTempR
20880 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a  eg[8];        /*
20890 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
208a0 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
208b0 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sters */.  Token
208c0 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20   sNameToken;    
208d0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
208e0 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
208f0 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
20900 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
20910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
20950 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
20960 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
20970 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
20980 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
20990 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
209a0 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
209b0 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
209c0 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
209d0 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
209e0 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
209f0 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
20a00 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20  ,sLastToken) so 
20a10 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66  the sLastToken f
20a20 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65  ield must be the
20a30 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69 65 6c  .  ** first fiel
20a40 64 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69  d in the recursi
20a50 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a  ve region..  ***
20a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20aa0 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20  *****/..  Token 
20ab0 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
20ac0 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f    /* The last to
20ad0 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ken parsed */.  
20ae0 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20  ynVar nVar;     
20af0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
20b00 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
20b10 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
20b20 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
20b30 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72   u8 iPkSortOrder
20b40 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53  ;          /* AS
20b50 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e  C or DESC for IN
20b60 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
20b70 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69  Y */.  u8 explai
20b80 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
20b90 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
20ba0 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20  EXPLAIN flag is 
20bb0 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65  found on the que
20bc0 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ry */.#ifndef SQ
20bd0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
20be0 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c  LTABLE.  u8 decl
20bf0 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20  areVtab;        
20c00 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e     /* True if in
20c10 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63  side sqlite3_dec
20c20 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20  lare_vtab() */. 
20c30 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20   int nVtabLock; 
20c40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20c50 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
20c60 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a  tables to lock *
20c70 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e  /.#endif.  int n
20c80 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
20c90 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
20ca0 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
20cb0 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
20cc0 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
20cd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
20ce0 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63  AIN.  int iSelec
20cf0 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  tId;            
20d00 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74  /* ID of current
20d10 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c   select for EXPL
20d20 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  AIN output */.  
20d30 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
20d40 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
20d50 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65  t available sele
20d60 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49  ct ID for EXPLAI
20d70 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  N output */.#end
20d80 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69  if.  VList *pVLi
20d90 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
20da0 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65  * Mapping betwee
20db0 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73  n variable names
20dc0 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a   and numbers */.
20dd0 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61    Vdbe *pReprepa
20de0 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56  re;         /* V
20df0 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72  M being reprepar
20e00 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65  ed (sqlite3Repre
20e10 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e  pare()) */.  con
20e20 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20  st char *zTail; 
20e30 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51         /* All SQ
20e40 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
20e50 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
20e60 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
20e70 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
20e80 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20       /* A table 
20e90 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
20ea0 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c  d by CREATE TABL
20eb0 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  E */.  Trigger *
20ec0 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20  pNewTrigger;    
20ed0 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65   /* Trigger unde
20ee0 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61  r construct by a
20ef0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
20f00 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
20f10 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f  *zAuthContext; /
20f20 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65  * The 6th parame
20f30 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68  ter to db->xAuth
20f40 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69   callbacks */.#i
20f50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
20f60 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
20f70 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20   Token sArg;    
20f80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
20f90 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61  mplete text of a
20fa0 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
20fb0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70   */.  Table **ap
20fc0 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
20fd0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69  /* Pointer to vi
20fe0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65  rtual tables nee
20ff0 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a  ding locking */.
21000 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a  #endif.  Table *
21010 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20  pZombieTab;     
21020 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61     /* List of Ta
21030 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64  ble objects to d
21040 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65  elete after code
21050 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65   gen */.  Trigge
21060 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72  rPrg *pTriggerPr
21070 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69  g;  /* Linked li
21080 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67  st of coded trig
21090 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a  gers */.  With *
210a0 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
210b0 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57      /* Current W
210c0 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e  ITH clause, or N
210d0 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ULL */.  With *p
210e0 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20  WithToFree;     
210f0 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20     /* Free this 
21100 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74  WITH object at t
21110 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
21120 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rse */.};../*.**
21130 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74   Sizes and point
21140 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70  ers of various p
21150 61 72 74 73 20 6f 66 20 74 68 65 20 50 61 72 73  arts of the Pars
21160 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65  e object..*/.#de
21170 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53  fine PARSE_HDR_S
21180 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  Z offsetof(Parse
21190 2c 61 43 6f 6c 43 61 63 68 65 29 20 2f 2a 20 52  ,aColCache) /* R
211a0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f  ecursive part w/
211b0 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64  o aColCache*/.#d
211c0 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55  efine PARSE_RECU
211d0 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28  RSE_SZ offsetof(
211e0 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e  Parse,sLastToken
211f0 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76  )    /* Recursiv
21200 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e  e part */.#defin
21210 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20  e PARSE_TAIL_SZ 
21220 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50  (sizeof(Parse)-P
21230 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29  ARSE_RECURSE_SZ)
21240 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76   /* Non-recursiv
21250 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e  e part */.#defin
21260 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20  e PARSE_TAIL(X) 
21270 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41  (((char*)(X))+PA
21280 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
21290 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74   /* Pointer to t
212a0 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  ail */../*.** Re
212b0 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72  turn true if cur
212c0 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e  rently inside an
212d0 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
212e0 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f  _vtab() call..*/
212f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
21300 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
21310 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
21320 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c  CLARE_VTAB 0.#el
21330 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
21340 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50  DECLARE_VTAB (pP
21350 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61  arse->declareVta
21360 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  b).#endif../*.**
21370 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
21380 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
21390 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64  ructure can be d
213a0 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61  eclared on a sta
213b0 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74  ck and used.** t
213c0 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65  o save the Parse
213d0 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61  .zAuthContext va
213e0 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  lue so that it c
213f0 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c  an be restored l
21400 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ater..*/.struct 
21410 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20  AuthContext {.  
21420 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
21430 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50  hContext;   /* P
21440 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a  ut saved Parse.z
21450 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65  AuthContext here
21460 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61   */.  Parse *pPa
21470 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
21480 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73    /* The Parse s
21490 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a  tructure */.};..
214a0 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66  /*.** Bitfield f
214b0 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75  lags for P5 valu
214c0 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63  e in various opc
214d0 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  odes..**.** Valu
214e0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
214f0 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
21500 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46  rt()):.**    OPF
21510 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
21520 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   == SQLITE_FUNC_
21530 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46  LENGTH.**    OPF
21540 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20  LAG_TYPEOFARG   
21550 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   == SQLITE_FUNC_
21560 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46  TYPEOF.**    OPF
21570 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20  LAG_BULKCSR     
21580 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f   == BTREE_BULKLO
21590 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  AD.**    OPFLAG_
215a0 53 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20  SEEKEQ       == 
215b0 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a  BTREE_SEEK_EQ.**
215c0 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45      OPFLAG_FORDE
215d0 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45  LETE    == BTREE
215e0 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20  _FORDELETE.**   
215f0 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
21600 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41  TION == BTREE_SA
21610 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20  VEPOSITION.**   
21620 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
21630 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55  E    == BTREE_AU
21640 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69  XDELETE.*/.#defi
21650 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  ne OPFLAG_NCHANG
21660 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
21670 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65  /* OP_Insert: Se
21680 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
21690 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20  nChange */.     
216a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216c0 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20  /* Also used in 
216d0 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f  P2 (not P5) of O
216e0 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66  P_Delete */.#def
216f0 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d  ine OPFLAG_EPHEM
21700 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20           0x01   
21710 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45   /* OP_Column: E
21720 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20  phemeral output 
21730 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  is ok */.#define
21740 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
21750 44 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  D     0x20    /*
21760 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
21770 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
21780 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
21790 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30  SUPDATE      0x0
217a0 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f  4    /* This OP_
217b0 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c  Insert is an sql
217c0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
217d0 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  ne OPFLAG_APPEND
217e0 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20          0x08    
217f0 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c  /* This is likel
21800 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
21810 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
21820 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
21830 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79  T 0x10    /* Try
21840 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b   to avoid a seek
21850 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28   in BtreeInsert(
21860 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
21870 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20  LAG_ISNOOP      
21880 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
21890 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d  Delete does pre-
218a0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79  update-hook only
218b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
218c0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
218d0 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
218e0 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
218f0 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
21900 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
21910 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
21920 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
21930 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
21940 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
21950 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
21960 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
21970 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
21980 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
21990 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
219a0 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
219b0 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
219c0 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73  * OP_Open** curs
219d0 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20  or uses EQ seek 
219e0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
219f0 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
21a00 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
21a10 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75  OP_Open should u
21a20 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45  se BTREE_FORDELE
21a30 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
21a40 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20  FLAG_P2ISREG    
21a50 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32     0x10    /* P2
21a60 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73   to OP_Open** is
21a70 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62   a register numb
21a80 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  er */.#define OP
21a90 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20  FLAG_PERMUTE    
21aa0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
21ab0 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68  _Compare: use th
21ac0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
21ad0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21ae0 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78  SAVEPOSITION  0x
21af0 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  02    /* OP_Dele
21b00 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20  te/Insert: save 
21b10 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64  cursor pos */.#d
21b20 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58  efine OPFLAG_AUX
21b30 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20  DELETE     0x04 
21b40 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a     /* OP_Delete:
21b50 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45   index in a DELE
21b60 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65  TE op */.#define
21b70 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d   OPFLAG_NOCHNG_M
21b80 41 47 49 43 20 20 30 78 36 64 20 20 20 20 2f 2a  AGIC  0x6d    /*
21b90 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
21ba0 73 65 72 69 61 6c 74 79 70 65 20 31 30 20 69 73  serialtype 10 is
21bb0 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61   ok */../*. * Ea
21bc0 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
21bd0 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
21be0 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
21bf0 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
21c00 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
21c10 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50  Trigger.. *. * P
21c20 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61  ointers to insta
21c30 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
21c40 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65  rigger are store
21c50 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20  d in two ways.. 
21c60 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69  * 1. In the "tri
21c70 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c  gHash" hash tabl
21c80 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73  e (part of the s
21c90 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70  qlite3* that rep
21ca0 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20  resents the. *  
21cb0 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
21cc0 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
21cd0 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
21ce0 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
21cf0 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
21d00 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
21d10 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
21d20 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
21d30 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
21d40 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
21d50 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
21d60 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
21d70 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
21d80 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
21d90 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
21da0 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
21db0 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
21dc0 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
21dd0 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
21de0 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
21df0 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
21e00 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
21e10 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
21e20 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
21e30 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
21e40 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
21e50 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
21e60 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
21e70 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
21e80 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
21e90 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
21ea0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
21eb0 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
21ec0 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
21ed0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
21ee0 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
21ef0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
21f00 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
21f10 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
21f20 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
21f30 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
21f40 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
21f50 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
21f60 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
21f70 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
21f80 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
21f90 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
21fa0 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
21fb0 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
21fc0 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
21fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
21fe0 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
21ff0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
22000 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
22010 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
22020 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
22030 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
22040 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
22050 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
22060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22070 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
22080 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
22090 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
220a0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
220b0 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
220c0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
220d0 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
220e0 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
220f0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
22100 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
22110 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
22120 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
22130 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
22140 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
22150 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
22160 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
22170 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
22180 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
22190 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
221a0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
221b0 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
221c0 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
221d0 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
221e0 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
221f0 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
22200 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
22210 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  hich..**.** If t
22220 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
22230 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
22240 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
22250 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
22260 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
22270 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
22280 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
22290 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
222a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
222b0 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
222c0 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
222d0 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
222e0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
222f0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
22300 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
22310 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
22320 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
22330 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
22340 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
22350 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73  . *. * Instances
22360 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
22370 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65  erStep are store
22380 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69  d in a singly li
22390 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65  nked list (linke
223a0 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22  d. * using the "
223b0 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72  pNext" member) r
223c0 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
223d0 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
223e0 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73  ber of the. * as
223f0 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20  sociated struct 
22400 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65  Trigger instance
22410 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
22420 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65  ent of the linke
22430 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65  d list is. * the
22440 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74   first step of t
22450 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72  he trigger-progr
22460 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f  am.. *. * The "o
22470 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61  p" member indica
22480 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73  tes whether this
22490 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20   is a "DELETE", 
224a0 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54  "INSERT", "UPDAT
224b0 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54  E" or. * "SELECT
224c0 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65  " statement. The
224d0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65   meanings of the
224e0 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69   other members i
224f0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
22500 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  the. * value of 
22510 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
22520 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
22530 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
22540 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
22550 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
22560 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
22570 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
22580 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
22590 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
225a0 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
225b0 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
225c0 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
225d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
225e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
225f0 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
22600 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  .. * zTarget   -
22610 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
22620 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
22630 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
22640 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
22650 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
22660 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
22670 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
22680 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
22690 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
226a0 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
226b0 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
226c0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
226d0 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
226e0 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
226f0 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
22700 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
22710 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
22720 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
22730 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
22740 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
22750 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
22760 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
22770 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
22780 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
22790 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
227a0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
227b0 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74  e table to delet
227c0 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72  e from.. * pWher
227d0 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
227e0 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
227f0 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
22800 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
22810 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
22820 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
22830 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  NULL.. *. * (op 
22840 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
22850 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
22860 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
22870 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
22880 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  te.. * pWhere   
22890 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
228a0 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
228b0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
228c0 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
228d0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
228e0 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
228f0 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
22900 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
22910 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
22920 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
22930 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
22940 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
22950 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
22960 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
22970 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
22980 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
22990 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
229a0 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74  t.. *. */.struct
229b0 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
229c0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
229d0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
229e0 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
229f0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
22a00 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
22a10 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  u8 orconf;      
22a20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
22a30 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72  ack etc. */.  Tr
22a40 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20  igger *pTrig;   
22a50 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
22a60 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70  r that this step
22a70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f   is a part of */
22a80 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
22a90 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43  ct;     /* SELEC
22aa0 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52  T statement or R
22ab0 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
22ac0 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  O SELECT ... */.
22ad0 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b    char *zTarget;
22ae0 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
22af0 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
22b00 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
22b10 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
22b20 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
22b30 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
22b40 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
22b50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
22b60 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
22b70 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
22b80 73 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a 2f  se for UPDATE */
22b90 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
22ba0 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
22bb0 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
22bc0 52 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a  RT */.  Upsert *
22bd0 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20  pUpsert;     /* 
22be0 55 70 73 65 72 74 20 63 6c 61 75 73 65 73 20 6f  Upsert clauses o
22bf0 6e 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20  n an INSERT */. 
22c00 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20   char *zSpan;   
22c10 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
22c20 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68  l SQL text of th
22c30 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
22c40 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
22c50 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
22c60 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
22c70 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
22c80 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
22c90 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
22ca0 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
22cb0 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
22cc0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
22cd0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
22ce0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
22cf0 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
22d00 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
22d10 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
22d20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
22d30 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
22d40 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
22d50 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
22d60 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
22d70 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
22d80 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
22d90 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
22da0 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
22db0 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
22dc0 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
22dd0 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
22de0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
22df0 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
22e00 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
22e10 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62  chema */.  int b
22e20 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f  VarOnly;       /
22e30 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69  * Check for vari
22e40 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references 
22e50 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  only */.  const 
22e60 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
22e70 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
22e80 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
22e90 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
22ea0 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
22eb0 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
22ec0 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
22ed0 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
22ee0 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
22ef0 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
22f00 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
22f10 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
22f20 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
22f30 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
22f40 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
22f50 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
22f60 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
22f70 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
22f80 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
22f90 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
22fa0 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
22fb0 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
22fc0 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
22fd0 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
22fe0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
22ff0 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
23000 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
23010 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
23020 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
23030 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
23040 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
23050 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
23060 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63  */.  u32  nAlloc
23070 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f  ;         /* Amo
23080 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c  unt of space all
23090 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20  ocated in zText 
230a0 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f  */.  u32  mxAllo
230b0 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  c;        /* Max
230c0 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c  imum allowed all
230d0 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20  ocation.  0 for 
230e0 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20  no malloc usage 
230f0 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b  */.  u32  nChar;
23100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
23110 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
23120 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38  g so far */.  u8
23130 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
23140 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e     /* STRACCUM_N
23150 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d  OMEM or STRACCUM
23160 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20  _TOOBIG */.  u8 
23170 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20    printfFlags;  
23180 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e    /* SQLITE_PRIN
23190 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a  TF flags below *
231a0 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52  /.};.#define STR
231b0 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a  ACCUM_NOMEM   1.
231c0 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
231d0 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69  _TOOBIG  2.#defi
231e0 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
231f0 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20  _INTERNAL 0x01  
23200 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d  /* Internal-use-
23210 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20  only converters 
23220 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
23230 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
23240 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20  _SQLFUNC  0x02  
23250 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  /* SQL function 
23260 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50  arguments to VXP
23270 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65  rintf */.#define
23280 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
23290 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a  ALLOCED 0x04  /*
232a0 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69   True if xText i
232b0 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  s allocated spac
232c0 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73  e */..#define is
232d0 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28  Malloced(X)  (((
232e0 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20  X)->printfFlags 
232f0 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  & SQLITE_PRINTF_
23300 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a  MALLOCED)!=0)...
23310 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
23320 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
23330 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
23340 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
23350 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
23360 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
23370 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
23380 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
23390 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
233a0 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
233b0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
233c0 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
233d0 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
233e0 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
233f0 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
23400 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
23410 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
23420 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
23430 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
23440 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
23450 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
23460 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
23470 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
23480 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
23490 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
234a0 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f  /.} InitData;../
234b0 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63  *.** Structure c
234c0 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c  ontaining global
234d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
234e0 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ata for the SQLi
234f0 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
23500 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
23510 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73   also contains s
23520 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  ome state inform
23530 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
23540 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b   Sqlite3Config {
23550 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b  .  int bMemstat;
23560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23570 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
23580 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74  enable memory st
23590 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43  atus */.  int bC
235a0 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  oreMutex;       
235b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
235c0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f  rue to enable co
235d0 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  re mutexing */. 
235e0 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b   int bFullMutex;
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
23610 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69  able full mutexi
23620 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65  ng */.  int bOpe
23630 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20  nUri;           
23640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
23650 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66  e to interpret f
23660 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73  ilenames as URIs
23670 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69   */.  int bUseCi
23680 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
23690 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63          /* Use c
236a0 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
236b0 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a  for full-scans *
236c0 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61  /.  int bSmallMa
236d0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
236e0 20 20 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c        /* Avoid l
236f0 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  arge memory allo
23700 63 61 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20  cations if true 
23710 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
23720 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
23730 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
23740 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
23750 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
23760 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
23770 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
23780 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
23790 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
237a0 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237c0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
237d0 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
237e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
237f0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
23800 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
23810 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
23820 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69  fer count */.  i
23830 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20  nt nStmtSpill;  
23840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23850 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c   /* Stmt-journal
23860 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74   spill-to-disk t
23870 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71  hreshold */.  sq
23880 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
23890 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
238a0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
238b0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
238c0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
238d0 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
238e0 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
238f0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
23900 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
23910 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
23920 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
23930 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
23940 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
23950 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
23960 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23980 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
23990 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
239a0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
239b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
239c0 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
239d0 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
239e0 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
239f0 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
23a00 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
23a10 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
23a20 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
23a30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
23a40 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
23a50 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
23a60 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
23a70 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
23a80 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
23a90 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
23aa0 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ac0 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
23ad0 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
23ae0 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b00 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
23b10 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
23b20 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
23b30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23b40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
23b50 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
23b60 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
23b70 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
23b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23b90 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
23ba0 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
23bb0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
23bc0 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
23bd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
23be0 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
23bf0 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
23c00 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20  /.  u32 szPma;  
23c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
23c30 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65   Sorter PMA size
23c40 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
23c50 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
23c60 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
23c70 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
23c80 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
23c90 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
23ca0 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
23cb0 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
23cc0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
23cd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
23ce0 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
23cf0 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
23d00 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
23d10 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
23d20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23d30 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
23d40 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
23d50 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
23d60 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
23d70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23d80 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
23d90 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
23da0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
23db0 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
23dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23dd0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
23de0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
23df0 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
23e00 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
23e10 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
23e20 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
23e30 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
23e40 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
23e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23e60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
23e70 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
23e80 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
23e90 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
23ea0 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
23eb0 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
23ec0 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
23ed0 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
23ee0 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
23ef0 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
23f00 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
23f10 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
23f20 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
23f30 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
23f40 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
23f50 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
23f60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
23f70 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
23f80 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
23f90 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23fa0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
23fb0 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
23fc0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
23fd0 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
23fe0 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
23ff0 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
24000 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
24010 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
24020 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
24030 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
24040 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
24050 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
24060 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
24070 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
24080 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
24090 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  int iSrcLine,u8 
240a0 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
240b0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
240c0 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
240d0 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
240e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
24100 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
24110 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
24120 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
24130 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
24140 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
24150 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
24160 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
24170 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
24180 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
24190 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
241a0 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
241b0 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
241c0 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63  ls */.  int iOnc
241d0 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b  eResetThreshold;
241e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
241f0 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e  n to reset OP_On
24200 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d  ce counters */.}
24210 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
24220 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
24230 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
24240 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
24250 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
24260 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
24270 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
24280 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
24290 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
242a0 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
242b0 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
242c0 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
242d0 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
242e0 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
242f0 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
24300 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
24310 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
24320 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
24330 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
24340 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
24350 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
24360 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
24370 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
24380 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
24390 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
243a0 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
243b0 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
243c0 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
243d0 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
243e0 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
243f0 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
24400 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
24410 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
24420 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
24430 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
24440 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
24450 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
24460 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
24470 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
24480 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
24490 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
244a0 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
244b0 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
244c0 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
244d0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
244e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
24500 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
24510 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  /.  int (*xExprC
24520 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
24530 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
24540 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
24550 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
24560 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
24570 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
24580 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
24590 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
245a0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
245b0 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
245c0 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
245d0 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
245e0 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
245f0 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
24600 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
24610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24620 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
24630 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43  eries */.  u8 eC
24640 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24660 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20       /* A small 
24670 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20  processing code 
24680 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
246b0 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
246c0 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
246d0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
246e0 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
246f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
24700 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
24710 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24740 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20   A counter */.  
24750 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
24780 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
24790 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
247a0 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
247b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247c0 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
247d0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
247e0 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
247f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24800 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
24810 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
24820 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72  .    struct CCur
24830 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b  Hint *pCCurHint;
24840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24850 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75  * Used by codeCu
24860 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20  rsorHint() */.  
24870 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20    int *aiCol;   
24880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61              /* a
248a0 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  rray of column i
248b0 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74  ndexes */.    st
248c0 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70  ruct IdxCover *p
248d0 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20  IdxCover;       
248e0 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b          /* Check
248f0 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72   for index cover
24900 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  age */.    struc
24910 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a  t IdxExprTrans *
24920 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20  pIdxTrans;      
24930 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20       /* Convert 
24940 69 64 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f  idxed expr to co
24950 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  lumn */.    Expr
24960 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24980 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42        /* GROUP B
24990 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  Y clause */.    
249a0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56            /* HAV
249d0 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61  ING to WHERE cla
249e0 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 7d 20 75  use ctx */.  } u
249f0 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64  ;.};../* Forward
24a00 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f   declarations */
24a10 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
24a20 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Expr(Walker*, Ex
24a30 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
24a40 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61  3WalkExprList(Wa
24a50 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lker*, ExprList*
24a60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
24a70 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a  lkSelect(Walker*
24a80 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
24a90 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
24aa0 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53  tExpr(Walker*, S
24ab0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
24ac0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72  ite3WalkSelectFr
24ad0 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  om(Walker*, Sele
24ae0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
24af0 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61  3ExprWalkNoop(Wa
24b00 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
24b10 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
24b20 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a  WalkNoop(Walker*
24b30 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
24b40 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
24b50 6b 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53  kFail(Walker*, S
24b60 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20  elect*);.#ifdef 
24b70 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69  SQLITE_DEBUG.voi
24b80 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
24b90 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65  alkAssert2(Walke
24ba0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65  r*, Select*);.#e
24bb0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
24bc0 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  rn code from the
24bd0 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b   parse-tree walk
24be0 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61  ing primitives a
24bf0 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c  nd their.** call
24c00 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  backs..*/.#defin
24c10 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20  e WRC_Continue  
24c20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75    0   /* Continu
24c30 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c  e down into chil
24c40 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  dren */.#define 
24c50 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20  WRC_Prune       
24c60 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c  1   /* Omit chil
24c70 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75  dren but continu
24c80 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e  e walking siblin
24c90 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  gs */.#define WR
24ca0 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20  C_Abort       2 
24cb0 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65    /* Abandon the
24cc0 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f   tree walk */../
24cd0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
24ce0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
24cf0 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  re represents a 
24d00 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f  set of one or mo
24d10 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d  re CTEs.** (comm
24d20 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
24d30 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79  ions) created by
24d40 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
24d50 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
24d60 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43   With {.  int nC
24d70 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
24d80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
24d90 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74  ber of CTEs in t
24da0 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a  he WITH clause *
24db0 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72  /.  With *pOuter
24dc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24dd0 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e      /* Containin
24de0 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  g WITH clause, o
24df0 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75  r NULL */.  stru
24e00 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20  ct Cte {        
24e10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
24e20 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74  or each CTE in t
24e30 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e  he WITH clause..
24e40 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  .. */.    char *
24e50 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
24e60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
24e70 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  e of this CTE */
24e80 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
24e90 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cols;           
24ea0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
24eb0 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20  explicit column 
24ec0 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a  names, or NULL *
24ed0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
24ee0 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20  elect;          
24ef0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
24f00 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  inition of this 
24f10 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  CTE */.    const
24f20 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20   char *zCteErr; 
24f30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
24f40 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20  ror message for 
24f50 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e  circular referen
24f60 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  ces */.  } a[1];
24f70 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
24f80 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41  TE_DEBUG./*.** A
24f90 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
24fa0 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63  e TreeView objec
24fb0 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72  t is used for pr
24fc0 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  inting the conte
24fd0 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74  nt of.** data st
24fe0 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69  ructures on sqli
24ff0 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29  te3DebugPrintf()
25000 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69   using a tree-li
25010 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75  ke view..*/.stru
25020 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20  ct TreeView {.  
25030 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
25040 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
25050 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72   level of the tr
25060 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a  ee we are on */.
25070 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d    u8  bLine[100]
25080 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61  ;         /* Dra
25090 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f  w vertical in co
250a0 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b  lumn i if bLine[
250b0 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b  i] is true */.};
250c0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
250d0 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a  E_DEBUG */../*.*
250e0 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
250f0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
25100 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
25110 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
25120 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
25130 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
25140 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
25150 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
25160 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
25170 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
25180 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
251a0 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
251b0 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
251c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251d0 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
251e0 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
251f0 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
25200 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
25210 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
25220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
25250 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
25260 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
25270 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
25280 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
25290 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
252a0 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
252b0 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
252c0 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
252d0 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
252e0 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
252f0 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
25300 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
25310 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
25320 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
25330 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
25340 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
25350 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
25360 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
25370 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
25380 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
25390 71 6c 69 74 65 33 52 65 70 6f 72 74 45 72 72 6f  qlite3ReportErro
253a0 72 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20  r(int iErr, int 
253b0 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68  lineno, const ch
253c0 61 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20  ar *zType);.int 
253d0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
253e0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
253f0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
25400 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
25410 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
25420 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
25430 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
25440 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
25450 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
25460 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
25470 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
25480 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
25490 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
254a0 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
254b0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
254c0 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
254d0 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54  __).#ifdef SQLIT
254e0 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71  E_DEBUG.  int sq
254f0 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
25500 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
25510 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
25520 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
25530 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
25540 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29  oError(int,Pgno)
25550 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ;.# define SQLIT
25560 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  E_NOMEM_BKPT sql
25570 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f  ite3NomemError(_
25580 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e  _LINE__).# defin
25590 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
255a0 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65  OMEM_BKPT sqlite
255b0 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
255c0 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66  (__LINE__).# def
255d0 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
255e0 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74  PT_PGNO(P) sqlit
255f0 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72  e3CorruptPgnoErr
25600 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29  or(__LINE__,(P))
25610 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
25620 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
25630 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23  T SQLITE_NOMEM.#
25640 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
25650 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
25660 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
25670 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
25680 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28  TE_CORRUPT_PGNO(
25690 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  P) sqlite3Corrup
256a0 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
256b0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
256c0 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74  TS3 and FTS4 bot
256d0 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75 61  h require virtua
256e0 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a  l table support.
256f0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
25700 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
25710 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66  ALTABLE).# undef
25720 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
25730 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  TS3.# undef SQLI
25740 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23  TE_ENABLE_FTS4.#
25750 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  endif../*.** FTS
25760 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65  4 is really an e
25770 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53  xtension for FTS
25780 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65  3.  It is enable
25790 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53  d using the.** S
257a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
257b0 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f  3 macro.  But to
257c0 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
257d0 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a   we also call.**
257e0 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
257f0 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f  LE_FTS4 macro to
25800 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69   serve as an ali
25810 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e  as for SQLITE_EN
25820 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69  ABLE_FTS3..*/.#i
25830 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
25840 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26  _ENABLE_FTS4) &&
25850 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25860 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20  _ENABLE_FTS3).# 
25870 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
25880 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64  ABLE_FTS3 1.#end
25890 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
258a0 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
258b0 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
258c0 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
258d0 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
258e0 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
258f0 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
25900 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
25910 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
25920 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
25930 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
25940 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
25950 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
25960 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
25970 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
25980 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
25990 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
259a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
259b0 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
259c0 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
259d0 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
259e0 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
259f0 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
25a00 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
25a10 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
25a20 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
25a30 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
25a40 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
25a50 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
25a60 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
25a70 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
25a80 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
25a90 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
25aa0 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
25ab0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
25ac0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
25ad0 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
25ae0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
25af0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
25b00 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
25b10 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
25b20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25b30 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
25b40 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
25b50 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
25b60 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
25b70 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
25b80 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
25b90 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
25ba0 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
25bb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25bc0 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
25bd0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
25be0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
25bf0 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
25c00 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
25c10 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
25c20 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
25c30 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
25c40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
25c50 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
25c60 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
25c70 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
25c80 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x)]).# define sq
25c90 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
25ca0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
25cb0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
25cc0 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c  r)(x)]&0x80).#el
25cd0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25ce0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
25cf0 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
25d00 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
25d10 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
25d20 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
25d30 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
25d40 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
25d50 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
25d60 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
25d70 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
25d80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25d90 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
25da0 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
25db0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
25dc0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
25dd0 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
25de0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
25df0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25e00 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
25e10 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
25e20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
25e30 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
25e40 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
25e50 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25e60 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
25e70 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20  te3Isquote(x)   
25e80 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d  ((x)=='"'||(x)==
25e90 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c  '\''||(x)=='['||
25ea0 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66  (x)=='`').#endif
25eb0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25ec0 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
25ed0 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c  ON_DIAGS.int sql
25ee0 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29  ite3IsIdChar(u8)
25ef0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
25f00 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
25f10 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
25f20 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49 43  int sqlite3StrIC
25f30 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  mp(const char*,c
25f40 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
25f50 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
25f60 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  (const char*);.c
25f70 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75  har *sqlite3Colu
25f80 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63  mnType(Column*,c
25f90 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73  har*);.#define s
25fa0 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73  qlite3StrNICmp s
25fb0 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a  qlite3_strnicmp.
25fc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
25fd0 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f  ocInit(void);.vo
25fe0 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  id sqlite3Malloc
25ff0 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  End(void);.void 
26000 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75  *sqlite3Malloc(u
26010 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
26020 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34  e3MallocZero(u64
26030 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
26040 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c  DbMallocZero(sql
26050 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  ite3*, u64);.voi
26060 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
26070 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20  ocRaw(sqlite3*, 
26080 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
26090 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e  te3DbMallocRawNN
260a0 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
260b0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
260c0 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  StrDup(sqlite3*,
260d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
260e0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
260f0 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  NDup(sqlite3*,co
26100 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  nst char*, u64);
26110 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
26120 53 70 61 6e 44 75 70 28 73 71 6c 69 74 65 33 2a  SpanDup(sqlite3*
26130 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
26140 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
26150 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
26160 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  void*, u64);.voi
26170 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
26180 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
26190 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
261a0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
261b0 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
261c0 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
261d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
261e0 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
261f0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
26200 69 74 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c  ite3DbFreeNN(sql
26210 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69  ite3*, void*);.i
26220 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
26230 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74  Size(void*);.int
26240 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
26250 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Size(sqlite3*, v
26260 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
26270 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69  ite3PageMalloc(i
26280 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26290 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29  3PageFree(void*)
262a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
262b0 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64  mSetDefault(void
262c0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
262d0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69  E_UNTESTABLE.voi
262e0 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d  d sqlite3BenignM
262f0 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20  allocHooks(void 
26300 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20  (*)(void), void 
26310 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64  (*)(void));.#end
26320 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65  if.int sqlite3He
26330 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69  apNearlyFull(voi
26340 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79  d);../*.** On sy
26350 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65  stems with ample
26360 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64   stack space and
26370 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c   that support al
26380 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20  loca(), make.** 
26390 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20  use of alloca() 
263a0 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  to obtain space 
263b0 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61  for large automa
263c0 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79  tic objects.  By
263d0 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74   default,.** obt
263e0 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d  ain space from m
263f0 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54  alloc()..**.** T
26400 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74  he alloca() rout
26410 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e  ine never return
26420 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69  s NULL.  This wi
26430 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61  ll cause code pa
26440 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c  ths.** that deal
26450 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61   with sqlite3Sta
26460 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72  ckAlloc() failur
26470 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68  es to be unreach
26480 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  able..*/.#ifdef 
26490 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43  SQLITE_USE_ALLOC
264a0 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  A.# define sqlit
264b0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
264c0 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29  D,N)   alloca(N)
264d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
264e0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
264f0 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c  D,N)  memset(all
26500 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20  oca(N), 0, N).# 
26510 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
26520 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c  ackFree(D,P).#el
26530 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
26540 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
26550 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
26560 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
26570 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26580 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
26590 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
265a0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
265b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
265c0 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
265d0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
265e0 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (D,P).#endif../*
265f0 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f   Do not allow bo
26600 74 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d  th MEMSYS5 and M
26610 45 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65 66  EMSYS3 to be def
26620 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20  ined together.  
26630 49 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20  If they.** are, 
26640 64 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a  disable MEMSYS3.
26650 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
26660 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a  _ENABLE_MEMSYS5.
26670 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
26680 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
26690 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28  e3MemGetMemsys5(
266a0 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51  void);.#undef SQ
266b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
266c0 59 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  YS3.#endif.#ifde
266d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
266e0 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
266f0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
26700 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
26710 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
26720 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
26730 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
26740 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  T.  sqlite3_mute
26750 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
26760 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d  *sqlite3DefaultM
26770 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
26780 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
26790 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
267a0 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64  e3NoopMutex(void
267b0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
267c0 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78  ex *sqlite3Mutex
267d0 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e  Alloc(int);.  in
267e0 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e  t sqlite3MutexIn
267f0 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20  it(void);.  int 
26800 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28  sqlite3MutexEnd(
26810 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69  void);.#endif.#i
26820 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
26830 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26  E_MUTEX_OMIT) &&
26840 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
26850 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76  _MUTEX_NOOP).  v
26860 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72  oid sqlite3Memor
26870 79 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a  yBarrier(void);.
26880 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26890 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
268a0 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71  ier().#endif..sq
268b0 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
268c0 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69  te3StatusValue(i
268d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
268e0 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69  3StatusUp(int, i
268f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26900 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c  3StatusDown(int,
26910 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26920 74 65 33 53 74 61 74 75 73 48 69 67 68 77 61 74  te3StatusHighwat
26930 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  er(int, int);.in
26940 74 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73 69  t sqlite3Lookasi
26950 64 65 55 73 65 64 28 73 71 6c 69 74 65 33 2a 2c  deUsed(sqlite3*,
26960 69 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65 73  int*);../* Acces
26970 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65  s to mutexes use
26980 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61  d by sqlite3_sta
26990 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33  tus() */.sqlite3
269a0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50  _mutex *sqlite3P
269b0 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64  cache1Mutex(void
269c0 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  );.sqlite3_mutex
269d0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d   *sqlite3MallocM
269e0 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66  utex(void);..#if
269f0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26a00 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 54 48 52 45  ENABLE_MULTITHRE
26a10 41 44 45 44 5f 43 48 45 43 4b 53 29 20 26 26 20  ADED_CHECKS) && 
26a20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26a30 4d 55 54 45 58 5f 4f 4d 49 54 29 0a 76 6f 69 64  MUTEX_OMIT).void
26a40 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72   sqlite3MutexWar
26a50 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 73 71  nOnContention(sq
26a60 6c 69 74 65 33 5f 6d 75 74 65 78 2a 29 3b 0a 23  lite3_mutex*);.#
26a70 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
26a80 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e  lite3MutexWarnOn
26a90 43 6f 6e 74 65 6e 74 69 6f 6e 28 78 29 0a 23 65  Contention(x).#e
26aa0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
26ab0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
26ac0 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73  NG_POINT.  int s
26ad0 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62  qlite3IsNaN(doub
26ae0 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  le);.#else.# def
26af0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  ine sqlite3IsNaN
26b00 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  (X)  0.#endif../
26b10 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
26b20 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
26b30 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
26b40 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
26b50 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74  out SQL.** funct
26b60 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74  ions arguments t
26b70 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61  hat are the para
26b80 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72  meters to the pr
26b90 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e  intf() function.
26ba0 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74  .*/.struct Print
26bb0 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69  fArguments {.  i
26bc0 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  nt nArg;        
26bd0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c          /* Total
26be0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
26bf0 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55  ents */.  int nU
26c00 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  sed;            
26c10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
26c20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73  arguments used s
26c30 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74  o far */.  sqlit
26c40 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67  e3_value **apArg
26c50 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d  ;   /* The argum
26c60 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b  ent values */.};
26c70 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58  ..void sqlite3VX
26c80 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
26c90 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  , const char*, v
26ca0 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71  a_list);.void sq
26cb0 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72  lite3XPrintf(Str
26cc0 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68  Accum*, const ch
26cd0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
26ce0 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
26cf0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
26d00 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
26d10 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
26d20 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
26d30 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
26d40 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
26d50 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
26d60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
26d70 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76  VE_OS_TRACE).  v
26d80 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
26d90 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
26da0 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
26db0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
26dc0 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
26dd0 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
26de0 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
26df0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
26e00 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26e10 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
26e20 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
26e30 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
26e40 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
26e50 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
26e60 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73  eViewBareExprLis
26e70 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
26e80 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  st ExprList*, co
26e90 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
26ea0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
26eb0 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
26ec0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
26ed0 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
26ee0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
26ef0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
26f00 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c  elect(TreeView*,
26f10 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20   const Select*, 
26f20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
26f30 74 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28  te3TreeViewWith(
26f40 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
26f50 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e   With*, u8);.#en
26f60 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
26f70 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
26f80 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
26f90 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
26fa0 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
26fb0 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
26fc0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
26fd0 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  d sqlite3Dequote
26fe0 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  (char*);.void sq
26ff0 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54  lite3TokenInit(T
27000 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e  oken*,char*);.in
27010 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
27020 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
27030 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
27040 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
27050 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
27060 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
27070 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
27080 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
27090 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
270a0 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
270b0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
270c0 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
270d0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
270e0 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
270f0 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
27100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27110 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
27120 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
27130 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
27140 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
27150 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53  arse*);.#ifdef S
27160 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
27170 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e  sqlite3NoTempsIn
27180 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
27190 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78  ,int);.#endif.Ex
271a0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
271b0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
271c0 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
271d0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
271e0 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
271f0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
27200 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27210 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
27220 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
27230 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
27240 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
27250 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
27260 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
27270 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64  d sqlite3PExprAd
27280 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  dSelect(Parse*, 
27290 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  Expr*, Select*);
272a0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
272b0 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
272c0 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
272d0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
272e0 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
272f0 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
27300 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27310 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
27320 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
27330 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
27340 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
27350 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
27360 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
27370 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
27380 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
27390 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  *,Expr*);.ExprLi
273a0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
273b0 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28  istAppendVector(
273c0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
273d0 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  ,IdList*,Expr*);
273e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
273f0 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
27400 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
27410 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27420 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
27430 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
27440 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
27450 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
27460 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
27470 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  xprList*,const c
27480 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
27490 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
274a0 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71  xprListDelete(sq
274b0 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74  lite3*, ExprList
274c0 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45  *);.u32 sqlite3E
274d0 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e  xprListFlags(con
274e0 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  st ExprList*);.i
274f0 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73  nt sqlite3Init(s
27500 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29  qlite3*, char**)
27510 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
27520 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c  tCallback(void*,
27530 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68   int, char**, ch
27540 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
27550 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a  te3Pragma(Parse*
27560 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
27570 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e  oken*,int);.#ifn
27580 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27590 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64  VIRTUALTABLE.Mod
275a0 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67  ule *sqlite3Prag
275b0 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28 73  maVtabRegister(s
275c0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
275d0 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64  ar *zName);.#end
275e0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
275f0 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
27600 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
27610 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
27620 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
27630 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
27640 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
27650 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
27660 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
27670 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
27680 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
27690 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
276a0 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75  qlite3DeleteColu
276b0 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a  mnNames(sqlite3*
276c0 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71  ,Table*);.int sq
276d0 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d  lite3ColumnsFrom
276e0 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
276f0 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43  ExprList*,i16*,C
27700 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73  olumn**);.void s
27710 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64 43  qlite3SelectAddC
27720 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c  olumnTypeAndColl
27730 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  ation(Parse*,Tab
27740 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61  le*,Select*);.Ta
27750 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
27760 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
27770 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
27780 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
27790 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
277a0 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20   *, int);.Index 
277b0 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b  *sqlite3PrimaryK
277c0 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b  eyIndex(Table*);
277d0 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75  .i16 sqlite3Colu
277e0 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a  mnOfIndex(Index*
277f0 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c  , i16);.void sql
27800 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50  ite3StartTable(P
27810 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
27820 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  en*,int,int,int,
27830 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45  int);.#if SQLITE
27840 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
27850 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71  OLUMNS.  void sq
27860 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65  lite3ColumnPrope
27870 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61  rtiesFromName(Ta
27880 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a  ble*, Column*);.
27890 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
278a0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
278b0 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
278c0 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  ,C) /* no-op */.
278d0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
278e0 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  te3AddColumn(Par
278f0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
27900 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27910 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65  AddNotNull(Parse
27920 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
27930 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b  lite3AddPrimaryK
27940 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
27950 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
27960 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27970 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72  e3AddCheckConstr
27980 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70  aint(Parse*, Exp
27990 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
279a0 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65  3AddDefaultValue
279b0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
279c0 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
279d0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
279e0 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
279f0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
27a00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27a10 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
27a20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
27a30 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
27a40 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
27a50 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
27a60 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
27a70 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
27a80 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
27a90 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
27aa0 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
27ab0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
27ac0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
27ad0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66  nst char*);..#if
27ae0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
27af0 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73  TABLE.# define s
27b00 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58  qlite3FaultSim(X
27b10 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73  ) SQLITE_OK.#els
27b20 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  e.  int sqlite3F
27b30 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65  aultSim(int);.#e
27b40 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71  ndif..Bitvec *sq
27b50 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74  lite3BitvecCreat
27b60 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  e(u32);.int sqli
27b70 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69  te3BitvecTest(Bi
27b80 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
27b90 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
27ba0 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63  stNotNull(Bitvec
27bb0 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
27bc0 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69  ite3BitvecSet(Bi
27bd0 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  tvec*, u32);.voi
27be0 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43  d sqlite3BitvecC
27bf0 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33  lear(Bitvec*, u3
27c00 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  2, void*);.void 
27c10 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73  sqlite3BitvecDes
27c20 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75  troy(Bitvec*);.u
27c30 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  32 sqlite3Bitvec
27c40 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23  Size(Bitvec*);.#
27c50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
27c60 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c  TESTABLE.int sql
27c70 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
27c80 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
27c90 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20  .#endif..RowSet 
27ca0 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e  *sqlite3RowSetIn
27cb0 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  it(sqlite3*, voi
27cc0 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  d*, unsigned int
27cd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27ce0 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65  owSetClear(RowSe
27cf0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
27d00 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f  3RowSetInsert(Ro
27d10 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74  wSet*, i64);.int
27d20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
27d30 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20  st(RowSet*, int 
27d40 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e  iBatch, i64);.in
27d50 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  t sqlite3RowSetN
27d60 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ext(RowSet*, i64
27d70 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
27d80 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73  3CreateView(Pars
27d90 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
27da0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
27db0 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
27dc0 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
27dd0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
27de0 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
27df0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
27e00 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
27e10 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
27e20 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
27e30 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
27e40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27e50 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
27e60 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
27e70 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
27e80 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69  _ATTACHED>30.  i
27e90 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b  nt sqlite3DbMask
27ea0 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29  AllZero(yDbMask)
27eb0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
27ec0 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
27ed0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
27ee0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
27ef0 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
27f00 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
27f10 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
27f20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
27f30 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
27f40 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e  *, Table*);.#ifn
27f50 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27f60 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
27f70 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
27f80 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
27f90 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
27fa0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
27fb0 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
27fc0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
27fd0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
27fe0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
27ff0 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
28000 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
28010 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
28020 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
28030 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
28040 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  SrcList*, Select
28050 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 2c  *, IdList*, int,
28060 20 55 70 73 65 72 74 2a 29 3b 0a 76 6f 69 64 20   Upsert*);.void 
28070 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
28080 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
28090 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
280a0 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
280b0 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
280c0 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
280d0 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
280e0 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
280f0 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
28100 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
28110 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
28120 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
28130 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
28140 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
28150 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
28160 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
28170 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
28180 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
28190 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
281a0 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
281b0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
281c0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
281d0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
281e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281f0 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
28200 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
28210 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
28220 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
28230 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
28240 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
28250 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
28260 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67  e3SrcListFuncArg
28270 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
28280 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
28290 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
282a0 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
282b0 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
282c0 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
282d0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
282e0 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
282f0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
28300 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
28310 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
28320 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
28330 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
28340 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
28350 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
28360 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
28370 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
28380 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
28390 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
283a0 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
283b0 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
283c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
283d0 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
283e0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
283f0 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
28400 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
28410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28420 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
28430 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
28440 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
28450 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72  Index(Parse*, Sr
28460 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  cList*, int);.in
28470 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28  t sqlite3Select(
28480 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
28490 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53   SelectDest*);.S
284a0 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
284b0 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45  lectNew(Parse*,E
284c0 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  xprList*,SrcList
284d0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
284e0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
284f0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
28500 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c  *,ExprList*,u32,
28510 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
28520 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
28530 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
28540 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
28550 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
28560 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
28570 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
28580 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
28590 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
285a0 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
285b0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
285c0 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
285d0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
285e0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
285f0 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
28600 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
28610 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
28620 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
28630 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
28640 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
28650 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
28660 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68  prList*,Expr*,ch
28670 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
28680 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
28690 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
286a0 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  ist*, Expr*, Exp
286b0 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  rList*, Expr*);.
286c0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
286d0 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
286e0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45  st*, ExprList*,E
286f0 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73  xpr*,int,ExprLis
28700 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20 20  t*,Expr*,.      
28710 20 20 20 20 20 20 20 20 20 20 20 20 20 55 70 73               Ups
28720 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f  ert*);.WhereInfo
28730 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65   *sqlite3WhereBe
28740 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  gin(Parse*,SrcLi
28750 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
28760 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  st*,ExprList*,u1
28770 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  6,int);.void sql
28780 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65  ite3WhereEnd(Whe
28790 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74  reInfo*);.LogEst
287a0 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74   sqlite3WhereOut
287b0 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72  putRowCount(Wher
287c0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
287d0 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
287e0 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  nct(WhereInfo*);
287f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
28800 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72 65  eIsOrdered(Where
28810 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
28820 74 65 33 57 68 65 72 65 4f 72 64 65 72 65 64 49  te3WhereOrderedI
28830 6e 6e 65 72 4c 6f 6f 70 28 57 68 65 72 65 49 6e  nnerLoop(WhereIn
28840 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
28850 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57  3WhereIsSorted(W
28860 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
28870 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74  sqlite3WhereCont
28880 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49  inueLabel(WhereI
28890 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
288a0 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65  e3WhereBreakLabe
288b0 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
288c0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  nt sqlite3WhereO
288d0 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e  kOnePass(WhereIn
288e0 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66  fo*, int*);.#def
288f0 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20  ine ONEPASS_OFF 
28900 20 20 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a       0        /*
28910 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20   Use of ONEPASS 
28920 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  not allowed */.#
28930 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53  define ONEPASS_S
28940 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20 20  INGLE   1       
28950 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69   /* ONEPASS vali
28960 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  d for a single r
28970 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65  ow update */.#de
28980 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c  fine ONEPASS_MUL
28990 54 49 20 20 20 20 32 20 20 20 20 20 20 20 20 2f  TI    2        /
289a0 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c  * ONEPASS is val
289b0 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20  id for multiple 
289c0 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  rows */.void sql
289d0 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64  ite3ExprCodeLoad
289e0 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73  IndexColumn(Pars
289f0 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
28a00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
28a10 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
28a20 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  etColumn(Parse*,
28a30 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
28a40 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
28a50 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
28a60 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28  eGetColumnToReg(
28a70 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
28a80 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
28a90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28aa0 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
28ab0 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c  able(Vdbe*, Tabl
28ac0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
28ad0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28ae0 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72  ExprCodeMove(Par
28af0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
28b00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28b10 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28  3ExprCacheStore(
28b20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
28b30 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28b40 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73  ite3ExprCachePus
28b50 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  h(Parse*);.void 
28b60 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
28b70 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Pop(Parse*);.voi
28b80 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
28b90 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c  heRemove(Parse*,
28ba0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28bb0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
28bc0 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a  eClear(Parse*);.
28bd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28be0 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61  CacheAffinityCha
28bf0 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  nge(Parse*, int,
28c00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28c10 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73  te3ExprCode(Pars
28c20 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
28c30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28c40 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a  rCodeCopy(Parse*
28c50 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
28c60 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
28c70 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61  odeFactorable(Pa
28c80 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
28c90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28ca0 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72  prCodeAtInit(Par
28cb0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
28cc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28cd0 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
28ce0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
28cf0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
28d00 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
28d10 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
28d20 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
28d30 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
28d40 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
28d50 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28d60 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
28d70 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
28d80 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  int, int, u8);.#
28d90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
28da0 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31  EL_DUP      0x01
28db0 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73    /* Deep, not s
28dc0 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f  hallow copies */
28dd0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
28de0 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78  ECEL_FACTOR   0x
28df0 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75  02  /* Factor ou
28e00 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73  t constant terms
28e10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
28e20 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20  TE_ECEL_REF     
28e30 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78   0x04  /* Use Ex
28e40 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
28e50 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e  rByCol */.#defin
28e60 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d  e SQLITE_ECEL_OM
28e70 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a 20  ITREF  0x08  /* 
28e80 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73 74  Omit if ExprList
28e90 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c  .u.x.iOrderByCol
28ea0 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
28eb0 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65  ExprIfTrue(Parse
28ec0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
28ed0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28ee0 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72  3ExprIfFalse(Par
28ef0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
28f00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28f10 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75  te3ExprIfFalseDu
28f20 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
28f30 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
28f40 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
28f50 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
28f60 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
28f70 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
28f80 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20 30  LOCATE_VIEW    0
28f90 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41  x01.#define LOCA
28fa0 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a  TE_NOERR   0x02.
28fb0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
28fc0 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a  cateTable(Parse*
28fd0 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74  ,u32 flags,const
28fe0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
28ff0 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
29000 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
29010 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66  tem(Parse*,u32 f
29020 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c  lags,struct SrcL
29030 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
29040 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
29050 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
29060 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
29070 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
29080 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
29090 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
290a0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
290b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
290c0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
290d0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
290e0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
290f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
29100 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  uum(Parse*,Token
29110 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
29120 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
29130 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b   sqlite3*, int);
29140 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
29150 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
29160 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
29170 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
29180 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45 78 70  mpare(Parse*,Exp
29190 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
291a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
291b0 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78 70 72  CompareSkip(Expr
291c0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
291d0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
291e0 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
291f0 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
29200 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
29210 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70  e3ExprImpliesExp
29220 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20  r(Parse*,Expr*, 
29230 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
29240 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
29250 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45 78  iesNonNullRow(Ex
29260 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  pr*,int);.void s
29270 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
29280 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
29290 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
292a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
292b0 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
292c0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
292d0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
292e0 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65 64  lite3ExprCovered
292f0 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69  ByIndex(Expr*, i
29300 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a  nt iCur, Index *
29310 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pIdx);.int sqlit
29320 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68  e3FunctionUsesTh
29330 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63  isSrc(Expr*, Src
29340 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
29350 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
29360 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  se*);.#ifndef SQ
29370 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
29380 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
29390 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
293a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
293b0 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
293c0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  id);.#endif.void
293d0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
293e0 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
293f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
29400 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
29410 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
29420 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
29430 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
29440 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
29450 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
29460 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
29470 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
29480 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29490 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28  3EndTransaction(
294a0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
294b0 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
294c0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
294d0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
294e0 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
294f0 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
29500 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61  .void sqlite3Lea
29510 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a  veMutexAndCloseZ
29520 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b  ombie(sqlite3*);
29530 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
29540 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28 45 78  IdToTrueFalse(Ex
29550 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
29560 33 45 78 70 72 54 72 75 74 68 56 61 6c 75 65 28  3ExprTruthValue(
29570 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e  const Expr*);.in
29580 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
29590 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
295a0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
295b0 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
295c0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
295d0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
295e0 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
295f0 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
29600 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
29610 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72 73  ntOrGroupBy(Pars
29620 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c  e*, Expr*, ExprL
29630 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
29640 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e  e3ExprIsTableCon
29650 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29  stant(Expr*,int)
29660 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
29670 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
29680 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  NTS.int sqlite3E
29690 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75  xprContainsSubqu
296a0 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64  ery(Expr*);.#end
296b0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  if.int sqlite3Ex
296c0 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72  prIsInteger(Expr
296d0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
296e0 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75  lite3ExprCanBeNu
296f0 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ll(const Expr*);
29700 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
29710 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
29720 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
29730 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
29740 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
29750 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
29760 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
29770 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61  owDelete(.    Pa
29780 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67  rse*,Table*,Trig
29790 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ger*,int,int,int
297a0 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e  ,i16,u8,u8,u8,in
297b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
297c0 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78  GenerateRowIndex
297d0 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
297e0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
297f0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74   int*, int);.int
29800 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
29810 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c  IndexKey(Parse*,
29820 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
29830 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64  t, int, int*,Ind
29840 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ex*,int);.void s
29850 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72  qlite3ResolvePar
29860 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a  tIdxLabel(Parse*
29870 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
29880 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74  te3GenerateConst
29890 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73  raintChecks(Pars
298a0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69  e*,Table*,int*,i
298b0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a  nt,int,int,int,.
298c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298e0 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69       u8,u8,int,i
298f0 6e 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a  nt*,int*,Upsert*
29900 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
29910 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49  _ENABLE_NULL_TRI
29920 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  M.  void sqlite3
29930 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28  SetMakeRecordP5(
29940 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  Vdbe*,Table*);.#
29950 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
29960 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f  lite3SetMakeReco
29970 72 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66  rdP5(A,B).#endif
29980 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
29990 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50  pleteInsertion(P
299a0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
299b0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  ,int,int,int*,in
299c0 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20  t,int,int);.int 
299d0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
299e0 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65  AndIndices(Parse
299f0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
29a00 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e  u8, int, u8*, in
29a10 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  t*, int*);.void 
29a20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
29a30 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65  eOperation(Parse
29a40 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
29a50 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57  id sqlite3MultiW
29a60 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f  rite(Parse*);.vo
29a70 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f  id sqlite3MayAbo
29a80 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  rt(Parse*);.void
29a90 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73   sqlite3HaltCons
29aa0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
29ab0 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20  nt, int, char*, 
29ac0 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  i8, u8);.void sq
29ad0 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74  lite3UniqueConst
29ae0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
29af0 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  t, Index*);.void
29b00 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e   sqlite3RowidCon
29b10 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
29b20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78  int, Table*);.Ex
29b30 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44  pr *sqlite3ExprD
29b40 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
29b50 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74  *,int);.ExprList
29b60 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
29b70 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  tDup(sqlite3*,Ex
29b80 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72  prList*,int);.Sr
29b90 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
29ba0 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  cListDup(sqlite3
29bb0 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b  *,SrcList*,int);
29bc0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
29bd0 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  IdListDup(sqlite
29be0 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c  3*,IdList*);.Sel
29bf0 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
29c00 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  ctDup(sqlite3*,S
29c10 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66  elect*,int);.#if
29c20 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
29c30 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65  BLED.void sqlite
29c40 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53  3SelectSetName(S
29c50 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61  elect*,const cha
29c60 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
29c70 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
29c80 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65  tSetName(A,B).#e
29c90 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
29ca0 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75  3InsertBuiltinFu
29cb0 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74  ncs(FuncDef*,int
29cc0 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
29cd0 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
29ce0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
29cf0 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  har*,int,u8,u8);
29d00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
29d10 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
29d20 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
29d30 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
29d40 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
29d50 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
29d60 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 50 65  qlite3RegisterPe
29d70 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74  rConnectionBuilt
29d80 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
29d90 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
29da0 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
29db0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
29dc0 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
29dd0 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
29de0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
29df0 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
29e00 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
29e10 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
29e20 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
29e30 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
29e40 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
29e50 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
29e60 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
29e70 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
29e80 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
29e90 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
29ea0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29eb0 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
29ec0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
29ed0 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
29ee0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
29ef0 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
29f00 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
29f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
29f30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
29f40 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
29f50 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
29f60 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
29f70 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
29f80 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
29f90 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
29fa0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
29fb0 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
29fc0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
29fd0 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
29fe0 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
29ff0 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
2a000 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
2a010 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
2a020 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
2a030 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
2a040 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
2a050 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
2a060 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
2a070 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
2a080 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2a090 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0b0 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
2a0c0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2a0d0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
2a0e0 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
2a0f0 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
2a100 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
2a110 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2a120 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
2a130 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2a140 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
2a150 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
2a160 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
2a170 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
2a180 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
2a190 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2a1a0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
2a1b0 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
2a1c0 33 2a 2c 53 65 6c 65 63 74 2a 2c 0a 20 20 20 20  3*,Select*,.    
2a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1f0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2a200 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2a210 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2a220 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72  ite3TriggerInser
2a230 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  tStep(sqlite3*,T
2a240 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a  oken*, IdList*,.
2a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a270 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c          Select*,
2a280 75 38 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20 20  u8,Upsert*,.    
2a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2b0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2a2c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2a2d0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2a2e0 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74  ite3TriggerUpdat
2a2f0 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
2a300 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2a310 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20   Expr*, u8,.    
2a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a340 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2a350 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2a360 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
2a370 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74  ite3TriggerDelet
2a380 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
2a390 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20  oken*, Expr*,.  
2a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3c0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2a3d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2a3e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
2a3f0 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
2a400 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
2a410 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
2a420 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2a430 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
2a440 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2a450 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
2a460 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
2a470 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
2a480 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
2a490 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
2a4a0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
2a4b0 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
2a4c0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
2a4d0 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
2a4e0 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
2a4f0 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
2a500 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
2a510 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
2a520 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
2a530 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
2a540 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
2a550 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
2a560 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
2a570 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
2a580 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
2a590 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
2a5a0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2a5b0 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
2a5c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2a5d0 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
2a5e0 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
2a5f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2a600 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
2a610 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
2a620 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2a630 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
2a640 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
2a650 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
2a660 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
2a670 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
2a680 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
2a690 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
2a6a0 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
2a6b0 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
2a6c0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
2a6d0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
2a6e0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
2a6f0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2a700 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
2a710 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
2a720 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
2a730 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
2a740 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
2a750 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
2a760 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
2a770 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
2a780 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
2a790 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
2a7a0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
2a7b0 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
2a7c0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
2a7d0 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
2a7e0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2a7f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2a800 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2a810 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
2a820 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
2a830 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
2a840 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2a850 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2a860 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
2a870 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
2a880 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
2a890 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
2a8a0 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
2a8b0 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
2a8c0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2a8d0 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
2a8e0 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
2a8f0 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
2a900 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
2a910 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
2a920 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2a930 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
2a940 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2a950 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
2a960 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
2a970 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2a980 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
2a990 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
2a9a0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2a9b0 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
2a9c0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2a9d0 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
2a9e0 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
2a9f0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
2aa00 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
2aa10 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
2aa20 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
2aa30 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
2aa40 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
2aa50 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
2aa60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2aa70 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
2aa80 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2aa90 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
2aaa0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
2aab0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2aac0 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
2aad0 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
2aae0 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
2aaf0 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
2ab00 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
2ab10 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
2ab20 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
2ab30 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
2ab40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2ab50 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
2ab60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2ab70 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73  OMIT_UTF16.int s
2ab80 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
2ab90 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
2aba0 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
2abb0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2abc0 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28  ite3Utf8CharLen(
2abd0 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
2abe0 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75  a, int nByte);.u
2abf0 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65  32 sqlite3Utf8Re
2ac00 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  ad(const u8**);.
2ac10 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
2ac20 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73  gEst(u64);.LogEs
2ac30 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41  t sqlite3LogEstA
2ac40 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74  dd(LogEst,LogEst
2ac50 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2ac60 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2ac70 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  BLE.LogEst sqlit
2ac80 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62  e3LogEstFromDoub
2ac90 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64  le(double);.#end
2aca0 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2acb0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
2acc0 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c  T_SCANSTATUS) ||
2acd0 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
2ace0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
2acf0 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20  T3_OR_STAT4) || 
2ad00 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
2ad10 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54  LITE_EXPLAIN_EST
2ad20 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34  IMATED_ROWS).u64
2ad30 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
2ad40 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e  Int(LogEst);.#en
2ad50 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74  dif.VList *sqlit
2ad60 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74  e3VListAdd(sqlit
2ad70 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74  e3*,VList*,const
2ad80 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b   char*,int,int);
2ad90 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2ada0 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61  ite3VListNumToNa
2adb0 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  me(VList*,int);.
2adc0 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74  int sqlite3VList
2add0 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a  NameToNum(VList*
2ade0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2adf0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  );../*.** Routin
2ae00 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
2ae10 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
2ae20 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
2ae30 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
2ae40 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
2ae50 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
2ae60 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
2ae70 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
2ae80 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
2ae90 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
2aea0 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
2aeb0 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
2aec0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2aed0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2aee0 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
2aef0 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
2af00 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
2af10 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
2af20 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2af30 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
2af40 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
2af50 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
2af60 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
2af70 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
2af80 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
2af90 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
2afa0 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
2afb0 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
2afc0 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
2afd0 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
2afe0 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
2aff0 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
2b000 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
2b010 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
2b020 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
2b030 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
2b040 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
2b050 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
2b060 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
2b070 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
2b080 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
2b090 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
2b0a0 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
2b0b0 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
2b0c0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2b0d0 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
2b0e0 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
2b0f0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2b100 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
2b110 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
2b120 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
2b130 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
2b140 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71  exAffinityStr(sq
2b150 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
2b160 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
2b170 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
2b180 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2b190 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
2b1a0 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
2b1b0 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
2b1c0 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
2b1d0 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
2b1e0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
2b1f0 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
2b200 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62  .char sqlite3Tab
2b210 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  leColumnAffinity
2b220 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68  (Table*,int);.ch
2b230 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
2b240 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
2b250 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2b260 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
2b270 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
2b280 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  8);.int sqlite3D
2b290 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e  ecOrHexToI64(con
2b2a0 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b  st char*, i64*);
2b2b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
2b2c0 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65  orWithMsg(sqlite
2b2d0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2b2e0 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
2b2f0 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
2b300 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2b310 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72   sqlite3SystemEr
2b320 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
2b330 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2b340 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
2b350 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
2b360 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
2b370 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
2b380 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
2b390 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
2b3a0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
2b3b0 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
2b3c0 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
2b3d0 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
2b3e0 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
2b3f0 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
2b400 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  (int);.#endif..#
2b410 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2b420 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a  BLE_DESERIALIZE.
2b430 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62  int sqlite3Memdb
2b440 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64  Init(void);.#end
2b450 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  if..const char *
2b460 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
2b470 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
2b480 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20  eadSchema(Parse 
2b490 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65  *pParse);.CollSe
2b4a0 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f  q *sqlite3FindCo
2b4b0 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75  llSeq(sqlite3*,u
2b4c0 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61  8 enc, const cha
2b4d0 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71  r*,int);.CollSeq
2b4e0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43   *sqlite3LocateC
2b4f0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2b500 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
2b510 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71  *zName);.CollSeq
2b520 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c   *sqlite3ExprCol
2b530 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2b540 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29  se, Expr *pExpr)
2b550 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2b560 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28  e3ExprNNCollSeq(
2b570 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
2b580 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
2b590 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c   sqlite3ExprColl
2b5a0 53 65 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c  SeqMatch(Parse*,
2b5b0 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
2b5c0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2b5d0 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
2b5e0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2b5f0 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
2b600 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
2b610 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
2b620 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
2b630 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
2b640 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
2b650 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
2b660 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
2b670 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
2b680 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
2b690 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
2b6a0 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
2b6b0 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
2b6c0 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
2b6d0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
2b6e0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
2b6f0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2b700 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
2b710 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2b720 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
2b730 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2b740 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
2b750 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
2b760 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
2b770 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2b780 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
2b790 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
2b7a0 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
2b7b0 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
2b7c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2b7d0 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
2b7e0 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
2b7f0 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
2b800 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a  st char *z,u8);.
2b810 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
2b820 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
2b830 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
2b840 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
2b850 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
2b860 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
2b870 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
2b880 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
2b890 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
2b8a0 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20   void *,u8,.    
2b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8c0 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
2b8d0 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
2b8e0 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
2b8f0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
2b900 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2b910 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
2b920 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
2b930 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
2b940 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
2b950 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b960 4f 4d 49 54 5f 55 54 46 31 36 0a 63 68 61 72 20  OMIT_UTF16.char 
2b970 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38  *sqlite3Utf16to8
2b980 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2b990 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38  t void*, int, u8
2b9a0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2b9b0 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78  lite3ValueFromEx
2b9c0 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78  pr(sqlite3 *, Ex
2b9d0 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71  pr *, u8, u8, sq
2b9e0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b  lite3_value **);
2b9f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2ba00 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
2ba10 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c  sqlite3_value *,
2ba20 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65   u8, u8);.#ifnde
2ba30 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
2ba40 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e  ATION.extern con
2ba50 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2ba60 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
2ba70 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e  operty[];.extern
2ba80 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69   const char sqli
2ba90 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a  te3StrBINARY[];.
2baa0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2bab0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2bac0 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
2bad0 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
2bae0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
2baf0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
2bb00 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
2bb10 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
2bb20 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
2bb30 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
2bb40 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
2bb50 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
2bb60 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20  ern FuncDefHash 
2bb70 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
2bb80 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66  nctions;.#ifndef
2bb90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
2bba0 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
2bbb0 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a  te3PendingByte;.
2bbc0 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69  #endif.#endif.#i
2bbd0 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
2bbe0 45 0a 65 78 74 65 72 6e 20 73 71 6c 69 74 65 33  E.extern sqlite3
2bbf0 5f 75 69 6e 74 36 34 20 73 71 6c 69 74 65 33 4e  _uint64 sqlite3N
2bc00 50 72 6f 66 69 6c 65 43 6e 74 3b 0a 23 65 6e 64  ProfileCnt;.#end
2bc10 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
2bc20 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c  ootPageMoved(sql
2bc30 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
2bc40 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2bc50 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65  te3Reindex(Parse
2bc60 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2bc70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2bc80 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76  AlterFunctions(v
2bc90 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2bca0 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62  e3AlterRenameTab
2bcb0 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
2bcc0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
2bcd0 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65  t sqlite3GetToke
2bce0 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n(const unsigned
2bcf0 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b   char *, int *);
2bd00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73  .void sqlite3Nes
2bd10 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c  tedParse(Parse*,
2bd20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
2bd30 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
2bd40 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
2bd50 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33  atements(sqlite3
2bd60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2bd70 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72  odeSubselect(Par
2bd80 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  se*, Expr *, int
2bd90 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2bda0 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
2bdb0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2bdc0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2bdd0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2bde0 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72  tWrongNumTermsEr
2bdf0 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ror(Parse *pPars
2be00 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69  e, Select *p);.i
2be10 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
2be20 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
2be30 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2be40 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2be50 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
2be60 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2be70 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
2be80 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  text*, Expr*);.i
2be90 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
2bea0 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e  eExprListNames(N
2beb0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2bec0 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
2bed0 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
2bee0 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
2bef0 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
2bf00 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
2bf10 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
2bf20 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
2bf30 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
2bf40 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
2bf50 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
2bf60 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
2bf70 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
2bf80 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2bf90 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2bfa0 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
2bfb0 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
2bfc0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2bfd0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
2bfe0 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
2bff0 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
2c000 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2c010 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
2c020 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
2c030 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71   *);.CollSeq *sq
2c040 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
2c050 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
2c060 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
2c070 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
2c080 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
2c090 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b  nst char*, u8*);
2c0a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2c0b0 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
2c0c0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
2c0d0 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
2c0e0 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
2c0f0 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74 65 33  andler*, sqlite3
2c100 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  _file*);.int sql
2c110 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
2c120 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
2c130 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
2c140 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
2c150 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
2c160 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
2c170 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
2c180 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
2c190 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
2c1a0 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
2c1b0 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
2c1c0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
2c1d0 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
2c1e0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2c1f0 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
2c200 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
2c210 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
2c220 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2c230 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
2c240 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2c250 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69  3SchemaClear(voi
2c260 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
2c270 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
2c280 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
2c290 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2c2a0 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
2c2b0 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
2c2c0 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
2c2d0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f  lite3KeyInfoAllo
2c2e0 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69  c(sqlite3*,int,i
2c2f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c300 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65  3KeyInfoUnref(Ke
2c310 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2c320 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2c330 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  Ref(KeyInfo*);.K
2c340 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2c350 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61  eyInfoOfIndex(Pa
2c360 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23  rse*, Index*);.#
2c370 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2c380 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  UG.int sqlite3Ke
2c390 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65  yInfoIsWriteable
2c3a0 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64  (KeyInfo*);.#end
2c3b0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72  if.int sqlite3Cr
2c3c0 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33  eateFunc(sqlite3
2c3d0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2c3e0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64  , int, int, void
2c3f0 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73   *,.  void (*)(s
2c400 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2c410 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2c420 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
2c430 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2c440 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2c450 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
2c460 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2c470 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
2c480 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
2c490 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  tor.);.void sqli
2c4a0 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69  te3OomFault(sqli
2c4b0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
2c4c0 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69  te3OomClear(sqli
2c4d0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2c4e0 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
2c4f0 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
2c500 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
2c510 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
2c520 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2c530 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
2c540 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a  Accum*, sqlite3*
2c550 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e  , char*, int, in
2c560 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2c570 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53  StrAccumAppend(S
2c580 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
2c590 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  har*,int);.void 
2c5a0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
2c5b0 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75  ppendAll(StrAccu
2c5c0 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  m*,const char*);
2c5d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70  .void sqlite3App
2c5e0 65 6e 64 43 68 61 72 28 53 74 72 41 63 63 75 6d  endChar(StrAccum
2c5f0 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61  *,int,char);.cha
2c600 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63  r *sqlite3StrAcc
2c610 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75  umFinish(StrAccu
2c620 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
2c630 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53  3StrAccumReset(S
2c640 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
2c650 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
2c660 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
2c670 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
2c680 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
2c690 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
2c6a0 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
2c6b0 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
2c6c0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
2c6d0 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
2c6e0 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
2c6f0 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
2c700 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
2c710 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
2c720 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  u8 *);..#ifndef 
2c730 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
2c740 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33  UERY.int sqlite3
2c750 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73  ExprCheckIN(Pars
2c760 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73  e*, Expr*);.#els
2c770 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2c780 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c  e3ExprCheckIN(x,
2c790 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e  y) SQLITE_OK.#en
2c7a0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2c7b0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
2c7c0 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
2c7d0 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
2c7e0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
2c7f0 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
2c800 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20  beSetValue(.    
2c810 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
2c820 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
2c830 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  xpr*,int,int,int
2c840 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2c850 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70  tat4ValueFromExp
2c860 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
2c870 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
2c880 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ue**);.void sqli
2c890 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65  te3Stat4ProbeFre
2c8a0 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  e(UnpackedRecord
2c8b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2c8c0 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74  tat4Column(sqlit
2c8d0 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  e3*, const void*
2c8e0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69  , int, int, sqli
2c8f0 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68  te3_value**);.ch
2c900 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43  ar sqlite3IndexC
2c910 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71  olumnAffinity(sq
2c920 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20  lite3*, Index*, 
2c930 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  int);.#endif../*
2c940 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
2c950 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
2c960 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
2c970 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2c980 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20  E_AMALGAMATION. 
2c990 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61   void *sqlite3Pa
2c9a0 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28  rserAlloc(void*(
2c9b0 2a 29 28 75 36 34 29 29 3b 0a 20 20 76 6f 69 64  *)(u64));.  void
2c9c0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
2c9d0 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
2c9e0 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64 69  )(void*));.#endi
2c9f0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  f.void sqlite3Pa
2ca00 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
2ca10 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
2ca20 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
2ca30 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
2ca40 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
2ca50 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
2ca60 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
2ca70 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
2ca80 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
2ca90 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2caa0 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
2cab0 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
2cac0 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
2cad0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2cae0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2caf0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2cb00 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
2cb10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2cb20 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
2cb30 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
2cb40 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
2cb50 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
2cb60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2cb70 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2cb80 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
2cb90 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
2cba0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2cbb0 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
2cbc0 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
2cbd0 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
2cbe0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2cbf0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2cc00 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
2cc10 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
2cc20 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
2cc30 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
2cc40 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
2cc50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2cc60 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
2cc70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2cc80 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
2cc90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2cca0 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
2ccb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2ccc0 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65  tabLock(X).#  de
2ccd0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2cce0 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
2ccf0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
2cd00 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
2cd10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2cd20 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
2cd30 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
2cd40 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2cd50 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
2cd60 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
2cd70 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
2cd80 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
2cd90 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
2cda0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2cdb0 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
2cdc0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
2cdd0 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
2cde0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
2cdf0 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65  qlite3 *db, Vdbe
2ce00 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
2ce10 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73  e3VtabRollback(s
2ce20 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2ce30 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2ce40 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64  ommit(sqlite3 *d
2ce50 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  b);.   void sqli
2ce60 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62  te3VtabLock(VTab
2ce70 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2ce80 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2ce90 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
2cea0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
2ceb0 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65  nlockList(sqlite
2cec0 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  3*);.   int sqli
2ced0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
2cee0 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c  (sqlite3 *, int,
2cef0 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73   int);.   void s
2cf00 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2cf10 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71  Errmsg(Vdbe*, sq
2cf20 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20  lite3_vtab*);.  
2cf30 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33   VTable *sqlite3
2cf40 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65  GetVTable(sqlite
2cf50 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  3*, Table*);.   
2cf60 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 56  Module *sqlite3V
2cf70 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  tabCreateModule(
2cf80 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a  .     sqlite3*,.
2cf90 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2cfa0 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71 6c  ,.     const sql
2cfb0 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20  ite3_module*,.  
2cfc0 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76     void*,.     v
2cfd0 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20  oid(*)(void*).  
2cfe0 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71   );.#  define sq
2cff0 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2d000 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
2d010 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
2d020 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
2d030 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2d040 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e  EponymousTableIn
2d050 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65  it(Parse*,Module
2d060 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d070 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
2d080 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  leClear(sqlite3*
2d090 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20  ,Module*);.void 
2d0a0 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
2d0b0 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
2d0c0 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
2d0d0 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
2d0e0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
2d0f0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2d100 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2d110 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
2d120 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2d130 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2d140 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
2d150 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
2d160 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
2d170 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2d180 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2d190 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
2d1a0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2d1b0 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
2d1c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2d1d0 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
2d1e0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
2d1f0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2d200 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
2d210 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2d220 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2d230 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
2d240 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
2d250 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
2d260 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
2d270 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
2d280 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
2d290 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
2d2a0 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
2d2b0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2d2c0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2d2d0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2d2e0 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
2d2f0 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
2d300 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
2d310 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
2d320 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
2d330 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
2d340 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
2d350 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
2d360 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
2d370 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
2d380 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
2d390 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2d3a0 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69  Reset(Parse*);.i
2d3b0 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
2d3c0 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
2d3d0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2d3e0 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
2d3f0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
2d400 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
2d410 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
2d420 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
2d430 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
2d440 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
2d450 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
2d460 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
2d470 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
2d480 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
2d490 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
2d4a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d4b0 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
2d4c0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
2d4d0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2d4e0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
2d4f0 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
2d500 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
2d510 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
2d520 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
2d530 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2d540 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
2d550 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
2d560 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
2d570 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2d580 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
2d590 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2d5a0 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
2d5b0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2d5c0 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
2d5d0 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
2d5e0 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
2d5f0 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
2d600 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
2d610 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
2d620 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  y).#endif.#ifnde
2d630 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 50  f SQLITE_OMIT_UP
2d640 53 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a 73  SERT.  Upsert *s
2d650 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77 28  qlite3UpsertNew(
2d660 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
2d670 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2d680 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  t*,Expr*);.  voi
2d690 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  d sqlite3UpsertD
2d6a0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 55  elete(sqlite3*,U
2d6b0 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65 72  psert*);.  Upser
2d6c0 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74  t *sqlite3Upsert
2d6d0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70 73  Dup(sqlite3*,Ups
2d6e0 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ert*);.  int sql
2d6f0 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79 7a  ite3UpsertAnalyz
2d700 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 53  eTarget(Parse*,S
2d710 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a 29  rcList*,Upsert*)
2d720 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2d730 55 70 73 65 72 74 44 6f 55 70 64 61 74 65 28 50  UpsertDoUpdate(P
2d740 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54 61  arse*,Upsert*,Ta
2d750 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 2c  ble*,Index*,int,
2d760 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66  int);.#else.#def
2d770 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72  ine sqlite3Upser
2d780 74 4e 65 77 28 78 2c 79 2c 7a 2c 77 29 20 28 28  tNew(x,y,z,w) ((
2d790 55 70 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69  Upsert*)0).#defi
2d7a0 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  ne sqlite3Upsert
2d7b0 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66  Delete(x,y).#def
2d7c0 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72  ine sqlite3Upser
2d7d0 74 44 75 70 28 78 2c 79 29 20 20 20 20 20 28 28  tDup(x,y)     ((
2d7e0 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64 69  Upsert*)0).#endi
2d7f0 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  f.../* Declarati
2d800 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
2d810 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
2d820 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
2d830 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
2d840 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
2d850 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
2d860 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
2d870 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
2d880 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
2d890 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
2d8a0 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
2d8b0 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
2d8c0 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
2d8d0 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
2d8e0 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
2d8f0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
2d900 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
2d910 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
2d920 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
2d930 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
2d940 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a  nctionality is.*
2d950 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
2d960 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
2d970 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
2d980 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
2d990 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
2d9a0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2d9b0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2d9c0 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
2d9d0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
2d9e0 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
2d9f0 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
2da00 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2da10 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2da20 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2da30 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
2da40 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
2da50 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
2da60 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
2da70 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2da80 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2da90 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
2daa0 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
2dab0 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
2dac0 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
2dad0 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
2dae0 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
2daf0 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
2db00 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
2db10 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
2db20 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2db30 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
2db40 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
2db50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2db60 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
2db70 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
2db80 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
2db90 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
2dba0 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
2dbb0 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
2dbc0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2dbd0 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
2dbe0 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65  ,c,d)    0.  #de
2dbf0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
2dc00 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20  ferences(a)     
2dc10 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
2dc20 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2dc30 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
2dc40 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
2dc50 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
2dc60 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
2dc70 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2dc80 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
2dc90 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
2dca0 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
2dcb0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2dcc0 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
2dcd0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
2dce0 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
2dcf0 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
2dd00 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
2dd10 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
2dd20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
2dd30 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
2dd40 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
2dd50 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
2dd60 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
2dd70 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
2dd80 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
2dd90 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
2dda0 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2ddb0 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
2ddc0 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
2ddd0 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
2dde0 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
2ddf0 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
2de00 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
2de10 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2de20 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  BLE.** is not de
2de30 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
2de40 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2de50 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BLE.  void sqlit
2de60 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2de70 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
2de80 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
2de90 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2dea0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2deb0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2dec0 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
2ded0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
2dee0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
2def0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
2df00 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
2df10 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
2df20 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
2df30 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2df40 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
2df50 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
2df60 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
2df70 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2df80 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
2df90 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
2dfa0 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
2dfb0 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
2dfc0 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
2dfd0 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
2dfe0 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
2dff0 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2e000 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
2e010 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
2e020 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
2e030 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
2e040 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2e050 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
2e060 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
2e070 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
2e080 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
2e090 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
2e0a0 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
2e0b0 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
2e0c0 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
2e0d0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
2e0e0 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
2e0f0 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
2e100 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
2e110 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2e120 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
2e130 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
2e140 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
2e150 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
2e160 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2e170 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
2e180 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
2e190 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
2e1a0 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
2e1b0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2e1c0 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
2e1d0 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u32, int*, int*
2e1e0 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  );..int sqlite3J
2e1f0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2e200 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
2e210 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
2e220 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
2e230 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  );.int sqlite3Jo
2e240 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
2e250 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65  3_vfs *);.#if de
2e260 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2e270 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
2e280 29 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28  ) \. || defined(
2e290 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
2e2a0 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
2e2b0 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ).  int sqlite3J
2e2c0 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c  ournalCreate(sql
2e2d0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65  ite3_file *);.#e
2e2e0 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
2e2f0 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f  3JournalIsInMemo
2e300 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  ry(sqlite3_file 
2e310 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *p);.void sqlite
2e320 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  3MemJournalOpen(
2e330 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
2e340 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ..void sqlite3Ex
2e350 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c  prSetHeightAndFl
2e360 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73  ags(Parse *pPars
2e370 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66  e, Expr *p);.#if
2e380 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
2e390 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73  _DEPTH>0.  int s
2e3a0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
2e3b0 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
2e3c0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
2e3d0 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
2e3e0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
2e3f0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2e400 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
2e410 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66  ight(x) 0.  #def
2e420 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2e430 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a  heckHeight(x,y).
2e440 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69  #endif..u32 sqli
2e450 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73  te3Get4byte(cons
2e460 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  t u8*);.void sql
2e470 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a  ite3Put4byte(u8*
2e480 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20  , u32);..#ifdef 
2e490 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
2e4a0 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f  LOCK_NOTIFY.  vo
2e4b0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2e4c0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69  tionBlocked(sqli
2e4d0 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  te3 *, sqlite3 *
2e4e0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2e4f0 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
2e500 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ked(sqlite3 *db)
2e510 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2e520 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
2e530 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23  (sqlite3 *db);.#
2e540 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2e550 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2e560 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23  Blocked(x,y).  #
2e570 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2e580 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
2e590 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  (x).  #define sq
2e5a0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
2e5b0 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a  losed(x).#endif.
2e5c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2e5d0 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
2e5e0 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46  te3ParserTrace(F
2e5f0 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23  ILE*, char *);.#
2e600 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2e610 64 28 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20  d(YYCOVERAGE).  
2e620 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2e630 72 43 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29  rCoverage(FILE*)
2e640 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2e650 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
2e660 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
2e670 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
2e680 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
2e690 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
2e6a0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2e6b0 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
2e6c0 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
2e6d0 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
2e6e0 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23  g messages..*/.#
2e6f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2e700 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
2e710 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
2e720 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
2e730 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
2e740 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
2e750 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
2e760 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
2e770 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
2e780 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
2e790 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
2e7a0 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
2e7b0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
2e7c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
2e7d0 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
2e7e0 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
2e7f0 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
2e800 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
2e810 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
2e820 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
2e830 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
2e840 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
2e850 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
2e860 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
2e870 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
2e880 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
2e890 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
2e8a0 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
2e8b0 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
2e8c0 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
2e8d0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2e8e0 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
2e8f0 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
2e900 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
2e910 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
2e920 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
2e930 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
2e940 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
2e950 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
2e960 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
2e970 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2e980 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
2e990 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
2e9a0 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2e9b0 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2e9c0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2e9d0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2e9e0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2e9f0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2ea00 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
2ea10 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
2ea20 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
2ea30 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
2ea40 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
2ea50 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2ea60 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
2ea70 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
2ea80 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
2ea90 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
2eaa0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
2eab0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
2eac0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
2ead0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2eae0 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
2eaf0 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
2eb00 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
2eb10 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
2eb20 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
2eb30 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
2eb40 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
2eb50 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
2eb60 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
2eb70 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
2eb80 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
2eb90 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
2eba0 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
2ebb0 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
2ebc0 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
2ebd0 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
2ebe0 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
2ebf0 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
2ec00 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
2ec10 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
2ec20 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
2ec30 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
2ec40 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
2ec50 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
2ec60 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
2ec70 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2ec80 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
2ec90 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
2eca0 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
2ecb0 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
2ecc0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
2ecd0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
2ece0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
2ecf0 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a  constraint..**.*
2ed00 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
2ed10 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
2ed20 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
2ed30 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
2ed40 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
2ed50 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
2ed60 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
2ed70 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
2ed80 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2ed90 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
2eda0 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
2edb0 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
2edc0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
2edd0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2ede0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
2edf0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
2ee00 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
2ee10 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2ee20 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2ee30 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
2ee40 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
2ee50 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2ee60 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
2ee70 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
2ee80 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2ee90 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
2eea0 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
2eeb0 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
2eec0 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
2eed0 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
2eee0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2eef0 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
2ef00 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
2ef10 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2ef20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
2ef30 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
2ef40 43 48 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a  CHE     0x04  /*
2ef50 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
2ef60 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  cations */../*.*
2ef70 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65  * Threading inte
2ef80 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c  rface.*/.#if SQL
2ef90 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
2efa0 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c  HREADS>0.int sql
2efb0 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65  ite3ThreadCreate
2efc0 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c  (SQLiteThread**,
2efd0 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c  void*(*)(void*),
2efe0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
2eff0 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51  te3ThreadJoin(SQ
2f000 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69  LiteThread*, voi
2f010 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  d**);.#endif..#i
2f020 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2f030 5f 45 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56  _ENABLE_DBPAGE_V
2f040 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
2f050 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
2f060 20 73 71 6c 69 74 65 33 44 62 70 61 67 65 52 65   sqlite3DbpageRe
2f070 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
2f080 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
2f090 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2f0a0 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
2f0b0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2f0c0 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
2f0d0 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
2f0e0 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
2f0f0 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
2f100 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45  ExprVectorSize(E
2f110 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
2f120 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65   sqlite3ExprIsVe
2f130 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72  ctor(Expr *pExpr
2f140 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2f150 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78  VectorFieldSubex
2f160 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  pr(Expr*, int);.
2f170 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2f180 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28  rForVectorField(
2f190 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74  Parse*,Expr*,int
2f1a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2f1b0 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61  ectorErrorMsg(Pa
2f1c0 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23  rse*, Expr*);..#
2f1d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f1e0 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
2f1f0 5f 44 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61  _DIAGS.const cha
2f200 72 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69  r **sqlite3Compi
2f210 6c 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70  leOptions(int *p
2f220 6e 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  nOpt);.#endif..#
2f230 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49  endif /* SQLITEI
2f240 4e 54 5f 48 20 2a 2f 0a                          NT_H */.