/ Hex Artifact Content
Login

Artifact a6ec75e9103eabf3b5b1383335ade27caa1c81bb51c89cfea2ff60b9909e9e29:


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 48 41 56 45 5f 53 54 44 49 4e 54 5f 48  ed(HAVE_STDINT_H
1f20: 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  )   /* Use this 
1f30: 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20  case if we have 
1f40: 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a  ANSI headers */.
1f50: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1f60: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1f70: 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74  (void*)(intptr_t
1f80: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
1f90: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
1fa0: 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70  (X)  ((int)(intp
1fb0: 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 69 66 20  tr_t)(X)).#elif 
1fc0: 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46  defined(__PTRDIF
1fd0: 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68  F_TYPE__)  /* Th
1fe0: 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77  is case should w
1ff0: 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23  ork for GCC */.#
2000: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2010: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2020: 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46  void*)(__PTRDIFF
2030: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64  _TYPE__)(X)).# d
2040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
2050: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
2060: 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  t)(__PTRDIFF_TYP
2070: 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21  E__)(X)).#elif !
2080: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
2090: 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73  )       /* Works
20a0: 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f   for compilers o
20b0: 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a  ther than LLVM *
20c0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
20d0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
20e0: 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72   ((void*)&((char
20f0: 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e  *)0)[X]).# defin
2100: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2110: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28  INT(X)  ((int)((
2120: 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a  (char*)X)-(char*
2130: 29 30 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  )0)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c  fined(__x86)   |
6950: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 28 64 65  |    \.      (de
6960: 66 69 6e 65 64 28 5f 5f 54 4f 53 5f 41 49 58 5f  fined(__TOS_AIX_
6970: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
6980: 5f 36 34 42 49 54 5f 5f 29 29 0a 23 20 20 20 64  _64BIT__)).#   d
6990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
69a0: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
69b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
69c0: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
69d0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
69e0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
69f0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6a00: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
6a10: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
6a20: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6a30: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6a40: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6a50: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6a60: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6a70: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6a80: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6a90: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6aa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6ab0: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6ac0: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
6ad0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
6ae0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
6af0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
6b00: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
6b10: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
6b20: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6b30: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6b40: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6b50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6b60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6b70: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6b80: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6b90: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6ba0: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6bb0: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6bc0: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
6bd0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
6c00: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
6c10: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
6c20: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6c30: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6c40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6c50: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6c60: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6c70: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6c80: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6c90: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6ca0: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6cb0: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6cc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
6cd0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
6ce0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
6cf0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
6d00: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
6d10: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
6d20: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6d30: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6d40: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6d50: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6d60: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6d70: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6d80: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6d90: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6da0: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6db0: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6dc0: 64 28 69 33 38 36 29 20 20 20 20 20 20 7c 7c 20  d(i386)      || 
6dd0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
6de0: 29 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  )      || define
6df0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
6e00: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6e10: 5f 5f 78 38 36 5f 36 34 29 20 20 7c 7c 20 64 65  __x86_64)  || de
6e20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
6e30: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6e40: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
6e50: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
6e60: 5f 41 4d 44 36 34 29 20 20 7c 7c 20 64 65 66 69  _AMD64)  || defi
6e70: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6e80: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6e90: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
6ea0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6eb0: 4d 45 4c 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEL__) || define
6ec0: 64 28 5f 5f 41 41 52 43 48 36 34 45 4c 5f 5f 29  d(__AARCH64EL__)
6ed0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41   || defined(_M_A
6ee0: 52 4d 36 34 29 0a 23 20 20 20 64 65 66 69 6e 65  RM64).#   define
6ef0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6f00: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6f10: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6f20: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6f30: 5f 70 70 63 5f 5f 29 20 7c 7c 20 5c 0a 20 20 20  _ppc__) || \.   
6f40: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 41 52      defined(__AR
6f50: 4d 45 42 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  MEB__) || define
6f60: 64 28 5f 5f 41 41 52 43 48 36 34 45 42 5f 5f 29  d(__AARCH64EB__)
6f70: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6f80: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
6f90: 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20  4321.# else.#   
6fa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59  define SQLITE_BY
6fb0: 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69  TEORDER 0.# endi
6fc0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  f.#endif.#if SQL
6fd0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34  ITE_BYTEORDER==4
6fe0: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6ff0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
7000: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
7010: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
7020: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
7030: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
7040: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
7050: 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  lif SQLITE_BYTEO
7060: 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66  RDER==1234.# def
7070: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
7080: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
7090: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
70a0: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
70b0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
70c0: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
70d0: 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64  16LE.#else.# ifd
70e0: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
70f0: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
7100: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
7110: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
7120: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
7130: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
7140: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7150: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
7160: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
7170: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
7180: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
7190: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
71a0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
71b0: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
71c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
71d0: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
71e0: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
71f0: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
7200: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
7210: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
7220: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
7230: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
7240: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7250: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
7260: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
7270: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
7280: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
7290: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
72a0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
72b0: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
72c0: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
72d0: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
72e0: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
72f0: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
7300: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
7310: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
7320: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20  ./*.** Round up 
7330: 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  a number to the 
7340: 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74  next larger mult
7350: 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73  iple of 8.  This
7360: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66   is used.** to f
7370: 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67  orce 8-byte alig
7380: 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20  nment on 64-bit 
7390: 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a  architectures..*
73a0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38  /.#define ROUND8
73b0: 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29  (x)     (((x)+7)
73c0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e  &~7)../*.** Roun
73d0: 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65  d down to the ne
73e0: 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f  arest multiple o
73f0: 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  f 8.*/.#define R
7400: 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78  OUNDDOWN8(x) ((x
7410: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  )&~7)../*.** Ass
7420: 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69  ert that the poi
7430: 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65  nter X is aligne
7440: 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62  d to an 8-byte b
7450: 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a  oundary.  This.*
7460: 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  * macro is used 
7470: 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65  only within asse
7480: 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74  rt() to verify t
7490: 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74  hat the code get
74a0: 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65  s.** all alignme
74b0: 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  nt restrictions 
74c0: 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45  correct..**.** E
74d0: 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45  xcept, if SQLITE
74e0: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
74f0: 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65  MALLOC is define
7500: 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75  d, then the.** u
7510: 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63  nderlying malloc
7520: 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  () implementatio
7530: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
7540: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
7550: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
7560: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
7570: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
7580: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
7590: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
75a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
75b0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
75c0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
75d0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
75e0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
75f0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
7600: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
7610: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
7620: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
7630: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
7640: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
7650: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
7660: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
7670: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
7680: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
7690: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
76a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
76b0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
76c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
76d0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
76e0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
76f0: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
7700: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
7710: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
7720: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
7730: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
7740: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
7750: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
7760: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
7770: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e  ditionals.h>.#en
7780: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
7790: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
77a0: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
77b0: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
77c0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
77d0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
77e0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
77f0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
7800: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7810: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
7820: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
7830: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
7840: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
7850: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
7860: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7870: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
7880: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
7890: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
78a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
78b0: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
78c0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
78d0: 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49   default MMAP_SI
78e0: 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c  ZE is zero on al
78f0: 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72  l platforms.  Or
7900: 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67  , even if a larg
7910: 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d  er.** default MM
7920: 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69  AP_SIZE is speci
7930: 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  fied at compile-
7940: 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
7950: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20  that it does.** 
7960: 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d  not exceed the m
7970: 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65  aximum mmap size
7980: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
7990: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
79a0: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
79b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
79c0: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
79d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
79e0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51  ULT_MMAP_SIZE>SQ
79f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7a00: 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  ZE.# undef SQLIT
7a10: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7a20: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
7a30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7a40: 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58  _SIZE SQLITE_MAX
7a50: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69  _MMAP_SIZE.#endi
7a60: 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54  f../*.** SELECTT
7a70: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c  RACE_ENABLED wil
7a80: 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f 72  l be either 1 or
7a90: 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   0 depending on 
7aa0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a  whether or not.*
7ab0: 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75 65  * the Select que
7ac0: 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61  ry generator tra
7ad0: 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75  cing logic is tu
7ae0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
7af0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
7b00: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
7b10: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
7b20: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
7b30: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
7b40: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7b50: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7b60: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7b70: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7b80: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7b90: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7ba0: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7bb0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7bc0: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7bd0: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7be0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
7bf0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
7c00: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
7c10: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
7c20: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
7c30: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
7c40: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7c50: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7c60: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7c70: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7c80: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7c90: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7ca0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7cb0: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7cc0: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7cd0: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7ce0: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
7cf0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
7d00: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
7d10: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
7d20: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
7d30: 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f 69  BusyHandler)(voi
7d40: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7d50: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
7d60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73 79  */.  void *pBusy
7d70: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7d80: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7d90: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7da0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7db0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
7dd0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7de0: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7df0: 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69 6c  /.  u8 bExtraFil
7e00: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7e10: 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64 65        /* Include
7e20: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61 73   sqlite3_file as
7e30: 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a 2f   callback arg */
7e40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
7e50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
7e70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
7e80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
7e90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
7ea0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
7eb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
7ec0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
7ed0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
7ee0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
7ef0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
7f00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
7f10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
7f20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
7f30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7f40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
7f50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
7f60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
7f70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7f80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
7f90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
7fa0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
7fb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
7fc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
7fd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
7fe0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
7ff0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
8000: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
8010: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
8020: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
8030: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
8040: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
8050: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
8060: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
8070: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
8080: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
8090: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
80a0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
80b0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
80c0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
80d0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
80e0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
80f0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
8100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
8110: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
8120: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
8130: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
8140: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
8150: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
8160: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
8170: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
8180: 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61   the.** one para
8190: 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74 72  meter that destr
81a0: 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20  uctors normally 
81b0: 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61 76  want.  So we hav
81c0: 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a  e to introduce.*
81d0: 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c  * this magic val
81e0: 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  ue that the code
81f0: 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65   knows to handle
8200: 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41   differently.  A
8210: 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69  ny.** pointer wi
8220: 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20  ll work here as 
8230: 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69  long as it is di
8240: 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49  stinct from SQLI
8250: 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64  TE_STATIC.** and
8260: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
8270: 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  T..*/.#define SQ
8280: 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28  LITE_DYNAMIC   (
8290: 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63  (sqlite3_destruc
82a0: 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33  tor_type)sqlite3
82b0: 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a  MallocSize)../*.
82c0: 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f  ** When SQLITE_O
82d0: 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e  MIT_WSD is defin
82e0: 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  ed, it means tha
82f0: 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61  t the target pla
8300: 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f  tform does.** no
8310: 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62  t support Writab
8320: 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28  le Static Data (
8330: 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f  WSD) such as glo
8340: 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76  bal and static v
8350: 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c  ariables..** All
8360: 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20   variables must 
8370: 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65  either be on the
8380: 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69   stack or dynami
8390: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
83a0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70  from.** the heap
83b0: 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75  .  When WSD is u
83c0: 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20  nsupported, the 
83d0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
83e0: 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a  tions scattered.
83f0: 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  ** throughout th
8400: 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75  e SQLite code mu
8410: 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61  st become consta
8420: 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68  nts instead.  Th
8430: 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20  e SQLITE_WSD.** 
8440: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
8450: 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20  r this purpose. 
8460: 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20   And instead of 
8470: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20  referencing the 
8480: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65  variable.** dire
8490: 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73  ctly, we use its
84a0: 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b   constant as a k
84b0: 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65  ey to lookup the
84c0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
84d0: 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68  ted.** buffer th
84e0: 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61  at holds real va
84f0: 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e  riable.  The con
8500: 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68  stant is also th
8510: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a  e initializer.**
8520: 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d   for the run-tim
8530: 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  e allocated buff
8540: 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  er..**.** In the
8550: 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72   usual case wher
8560: 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74  e WSD is support
8570: 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57  ed, the SQLITE_W
8580: 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a  SD and GLOBAL.**
8590: 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e   macros become n
85a0: 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a  o-ops and have z
85b0: 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ero performance 
85c0: 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65  impact..*/.#ifde
85d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
85e0: 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  D.  #define SQLI
85f0: 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23  TE_WSD const.  #
8600: 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c  define GLOBAL(t,
8610: 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33  v) (*(t*)sqlite3
8620: 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a  _wsd_find((void*
8630: 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29  )&(v), sizeof(v)
8640: 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  )).  #define sql
8650: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8660: 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53   GLOBAL(struct S
8670: 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71  qlite3Config, sq
8680: 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69  lite3Config).  i
8690: 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69  nt sqlite3_wsd_i
86a0: 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a  nit(int N, int J
86b0: 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  );.  void *sqlit
86c0: 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64  e3_wsd_find(void
86d0: 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c   *K, int L);.#el
86e0: 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  se.  #define SQL
86f0: 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  ITE_WSD.  #defin
8700: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
8710: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
8720: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
8730: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
8740: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
8750: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
8760: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
8770: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
8780: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
8790: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
87a0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
87b0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
87c0: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
87d0: 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74  berately.** left
87e0: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
87f0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
8800: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
8810: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
8820: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
8830: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
8840: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
8850: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
8860: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
8870: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
8880: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
8890: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
88a0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
88b0: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
88c0: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
88d0: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
88e0: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
88f0: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
8900: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
8910: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
8920: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
8930: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
8940: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
8950: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
8960: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
8970: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
8980: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
8990: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
89a0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
89b0: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
89c0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
89d0: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
89e0: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
89f0: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
8a00: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
8a10: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
8a20: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
8a30: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
8a40: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
8a50: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
8a60: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
8a70: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
8a80: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
8a90: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
8aa0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
8ab0: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
8ac0: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
8ad0: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
8ae0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
8af0: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
8b00: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
8b10: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8b20: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
8b30: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
8b40: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
8b50: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
8b60: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
8b70: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
8b80: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
8b90: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
8ba0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
8bb0: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
8bc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8bd0: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
8be0: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
8bf0: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
8c00: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
8c10: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
8c20: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
8c30: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
8c40: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
8c50: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
8c60: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
8c70: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
8c80: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
8c90: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
8ca0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
8cb0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
8cc0: 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a  ruct FKey FKey;.
8cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
8ce0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75  uncDestructor Fu
8cf0: 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79  ncDestructor;.ty
8d00: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d10: 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79  cDef FuncDef;.ty
8d20: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8d30: 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66  cDefHash FuncDef
8d40: 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74  Hash;.typedef st
8d50: 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69  ruct IdList IdLi
8d60: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
8d70: 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a  ct Index Index;.
8d80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
8d90: 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78  ndexSample Index
8da0: 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20  Sample;.typedef 
8db0: 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20  struct KeyClass 
8dc0: 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65  KeyClass;.typede
8dd0: 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  f struct KeyInfo
8de0: 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65   KeyInfo;.typede
8df0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
8e00: 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79  de Lookaside;.ty
8e10: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
8e20: 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61  kasideSlot Looka
8e30: 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65  sideSlot;.typede
8e40: 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  f struct Module 
8e50: 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20  Module;.typedef 
8e60: 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
8e70: 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a  xt NameContext;.
8e80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8e90: 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65  arse Parse;.type
8ea0: 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70  def struct PreUp
8eb0: 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a  date PreUpdate;.
8ec0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
8ed0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50  rintfArguments P
8ee0: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a  rintfArguments;.
8ef0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52  typedef struct R
8f00: 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61 6d  enameToken Renam
8f10: 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20  eToken;.typedef 
8f20: 73 74 72 75 63 74 20 46 61 73 74 50 72 6e 67 20  struct FastPrng 
8f30: 46 61 73 74 50 72 6e 67 3b 0a 74 79 70 65 64 65  FastPrng;.typede
8f40: 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20  f struct RowSet 
8f50: 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20  RowSet;.typedef 
8f60: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
8f70: 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65   Savepoint;.type
8f80: 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63  def struct Selec
8f90: 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65  t Select;.typede
8fa0: 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54  f struct SQLiteT
8fb0: 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65  hread SQLiteThre
8fc0: 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ad;.typedef stru
8fd0: 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65  ct SelectDest Se
8fe0: 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65  lectDest;.typede
8ff0: 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  f struct SrcList
9000: 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65   SrcList;.typede
9010: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
9020: 5f 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f  _str StrAccum; /
9030: 2a 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73  * Internal alias
9040: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72   for sqlite3_str
9050: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75   */.typedef stru
9060: 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a  ct Table Table;.
9070: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
9080: 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f  ableLock TableLo
9090: 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ck;.typedef stru
90a0: 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a  ct Token Token;.
90b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90c0: 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77  reeView TreeView
90d0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
90e0: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
90f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9100: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
9110: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
9120: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
9130: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
9140: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
9150: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
9160: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
9170: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73  pedef struct Ups
9180: 65 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65  ert Upsert;.type
9190: 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c  def struct VTabl
91a0: 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  e VTable;.typede
91b0: 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78  f struct VtabCtx
91c0: 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65   VtabCtx;.typede
91d0: 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  f struct Walker 
91e0: 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20  Walker;.typedef 
91f0: 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f  struct WhereInfo
9200: 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65   WhereInfo;.type
9210: 64 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f  def struct Windo
9220: 77 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65  w Window;.typede
9230: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
9240: 74 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  th;.../*.** The 
9250: 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
9260: 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
9270: 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
9280: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
9290: 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
92a0: 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
92b0: 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
92c0: 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
92d0: 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
92e0: 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
92f0: 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
9300: 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
9310: 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
9320: 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
9330: 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
9340: 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64  on ix86..*/.#ifd
9350: 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53  ef SQLITE_BITMAS
9360: 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66  K_TYPE.  typedef
9370: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9380: 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65  TYPE Bitmask;.#e
9390: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36  lse.  typedef u6
93a0: 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69  4 Bitmask;.#endi
93b0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  f../*.** The num
93c0: 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
93d0: 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
93e0: 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
93f0: 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
9400: 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
9410: 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
9420: 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
9430: 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
9440: 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
9450: 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
9460: 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
9470: 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28  MASKBIT32(n) (((
9480: 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c  unsigned int)1)<
9490: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c  <(n)).#define AL
94a0: 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74  LBITS      ((Bit
94b0: 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56  mask)-1)../* A V
94c0: 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f  List object reco
94d0: 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65  rds a mapping be
94e0: 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73  tween parameters
94f0: 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63  /variables/wildc
9500: 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53  ards.** in the S
9510: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75  QL statement (su
9520: 63 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72  ch as $abc, @pqr
9530: 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74  , or :xyz) and t
9540: 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61  he integer.** va
9550: 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73  riable number as
9560: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
9570: 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53  at parameter.  S
9580: 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65  ee the format de
9590: 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20  scription.** on 
95a0: 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74  the sqlite3VList
95b0: 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f  Add() routine fo
95c0: 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69  r more informati
95d0: 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20  on.  A VList is 
95e0: 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61  really.** just a
95f0: 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67  n array of integ
9600: 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ers..*/.typedef 
9610: 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a  int VList;../*.*
9620: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
9630: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
9640: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
9650: 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20  the "u8" and.** 
9660: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
9670: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
9680: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
9690: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
96a0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
96b0: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
96c0: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
96d0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
96e0: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
96f0: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
9700: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
9710: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23  ude "pcache.h".#
9720: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
9730: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
9740: 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45  "../* The SQLITE
9750: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63  _EXTRA_DURABLE c
9760: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
9770: 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74  on used to set t
9780: 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79  he default.** sy
9790: 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e  nchronous settin
97a0: 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20  g to EXTRA.  It 
97b0: 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70  is no longer sup
97c0: 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  ported..*/.#ifde
97d0: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
97e0: 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67  URABLE.# warning
97f0: 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41   Use SQLITE_DEFA
9800: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d  ULT_SYNCHRONOUS=
9810: 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c  3 instead of SQL
9820: 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c  ITE_EXTRA_DURABL
9830: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
9840: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9850: 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a  ONOUS 3.#endif..
9860: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79  /*.** Default sy
9870: 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73  nchronous levels
9880: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
9890: 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c  t (for historcal
98a0: 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41   reasons) the PA
98b0: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f  GER_SYNCHRONOUS_
98c0: 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a  * macros differ.
98d0: 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  ** from the SQLI
98e0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
98f0: 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20  RONOUS value by 
9900: 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  1..**.**        
9910: 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f     PAGER_SYNCHRO
9920: 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55  NOUS       DEFAU
9930: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a  LT_SYNCHRONOUS.*
9940: 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20  *   OFF         
9950: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
9960: 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a              0.**
9970: 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20     NORMAL       
9980: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
9990: 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20             1.** 
99a0: 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20    FULL          
99b0: 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3               
99c0: 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20            2.**  
99d0: 20 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34   EXTRA         4
99e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99f0: 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a           3.**.**
9a00: 20 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e   The "PRAGMA syn
9a10: 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d  chronous" statem
9a20: 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68  ent also uses th
9a30: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9a40: 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  bers..** In othe
9a50: 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72  r words, the zer
9a60: 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20  o-based numbers 
9a70: 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c  are used for all
9a80: 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66   external interf
9a90: 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  aces.** and the 
9aa0: 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73  one-based values
9ab0: 20 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e   are used intern
9ac0: 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ally..*/.#ifndef
9ad0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9ae0: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65  SYNCHRONOUS.# de
9af0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
9b00: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
9b10: 32 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  2.#endif.#ifndef
9b20: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9b30: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  WAL_SYNCHRONOUS.
9b40: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9b50: 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43  DEFAULT_WAL_SYNC
9b60: 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44  HRONOUS SQLITE_D
9b70: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9b80: 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  US.#endif../*.**
9b90: 20 53 74 61 74 65 20 6f 66 20 61 20 73 69 6d 70   State of a simp
9ba0: 6c 65 20 50 52 4e 47 20 75 73 65 64 20 66 6f 72  le PRNG used for
9bb0: 20 74 68 65 20 70 65 72 2d 63 6f 6e 6e 65 63 74   the per-connect
9bc0: 69 6f 6e 20 61 6e 64 20 70 65 72 2d 70 61 67 65  ion and per-page
9bd0: 72 0a 2a 2a 20 70 73 65 75 64 6f 2d 72 61 6e 64  r.** pseudo-rand
9be0: 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72 61  om number genera
9bf0: 74 6f 72 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tors..*/.struct 
9c00: 46 61 73 74 50 72 6e 67 20 7b 0a 20 20 75 6e 73  FastPrng {.  uns
9c10: 69 67 6e 65 64 20 69 6e 74 20 78 2c 20 79 3b 0a  igned int x, y;.
9c20: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  };../*.** Each d
9c30: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
9c40: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
9c50: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
9c60: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
9c70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
9c80: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
9c90: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
9ca0: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
9cb0: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
9cc0: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
9cd0: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
9ce0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
9cf0: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
9d00: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
9d10: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
9d20: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
9d30: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
9d40: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
9d50: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
9d60: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
9d70: 20 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b   char *zDbSName;
9d80: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
9d90: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 20   this database. 
9da0: 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f  (schema name, no
9db0: 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20  t filename) */. 
9dc0: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
9dd0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
9de0: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
9df0: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
9e00: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
9e10: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
9e20: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
9e30: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
9e40: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38   to disk */.  u8
9e50: 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20   bSyncSet;      
9e60: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50     /* True if "P
9e70: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
9e80: 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75  s=N" has been ru
9e90: 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  n */.  Schema *p
9ea0: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50  Schema;     /* P
9eb0: 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61  ointer to databa
9ec0: 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69  se schema (possi
9ed0: 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d  bly shared) */.}
9ee0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
9ef0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
9f00: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
9f10: 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73  stores a databas
9f20: 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
9f30: 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65  Most Schema obje
9f40: 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74  cts are associat
9f50: 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e  ed with a Btree.
9f60: 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20    The exception 
9f70: 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61  is.** the Schema
9f80: 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61   for the TEMP da
9f90: 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e  tabaes (sqlite3.
9fa0: 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73  aDb[1]) which is
9fb0: 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a   free-standing..
9fc0: 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63  ** In shared cac
9fd0: 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c  he mode, a singl
9fe0: 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  e Schema object 
9ff0: 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79  can be shared by
a000: 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72   multiple.** Btr
a010: 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74  ees that refer t
a020: 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72  o the same under
a030: 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f  lying BtShared o
a040: 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68  bject..**.** Sch
a050: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
a060: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
a070: 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74  allocated when t
a080: 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68  he last Btree th
a090: 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73  at.** references
a0a0: 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79   them is destroy
a0b0: 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53  ed.   The TEMP S
a0c0: 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c  chema is manuall
a0d0: 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71  y freed by.** sq
a0e0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a  lite3_close()..*
a0f0: 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73  .** A thread mus
a100: 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d  t be holding a m
a110: 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72  utex on the corr
a120: 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20  esponding Btree 
a130: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61  in order.** to a
a140: 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e  ccess Schema con
a150: 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c  tent.  This impl
a160: 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72  ies that the thr
a170: 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65  ead must also be
a180: 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75  .** holding a mu
a190: 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  tex on the sqlit
a1a0: 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  e3 connection po
a1b0: 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20  inter that owns 
a1c0: 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f  the Btree..** Fo
a1d0: 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c  r a TEMP Schema,
a1e0: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63   only the connec
a1f0: 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65  tion mutex is re
a200: 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  quired..*/.struc
a210: 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74  t Schema {.  int
a220: 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20   schema_cookie; 
a230: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63    /* Database sc
a240: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
a250: 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ber for this fil
a260: 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65  e */.  int iGene
a270: 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47  ration;     /* G
a280: 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
a290: 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20  r.  Incremented 
a2a0: 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65  with each change
a2b0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61   */.  Hash tblHa
a2c0: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
a2d0: 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64  l tables indexed
a2e0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a2f0: 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20  sh idxHash;     
a300: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
a310: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
a320: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a330: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
a340: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67      /* All trigg
a350: 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ers indexed by n
a360: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b  ame */.  Hash fk
a370: 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  eyHash;       /*
a380: 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   All foreign key
a390: 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20  s by referenced 
a3a0: 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
a3b0: 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20  Table *pSeqTab; 
a3c0: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69       /* The sqli
a3d0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
a3e0: 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e  e used by AUTOIN
a3f0: 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20  CREMENT */.  u8 
a400: 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
a410: 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d    /* Schema form
a420: 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74  at version for t
a430: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  his file */.  u8
a440: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
a450: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
a460: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73  ing used by this
a470: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
a480: 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20  16 schemaFlags; 
a490: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73      /* Flags ass
a4a0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
a4b0: 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
a4c0: 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20  t cache_size;   
a4d0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a4e0: 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20  pages to use in 
a4f0: 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a  the cache */.};.
a500: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
a510: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
a520: 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
a530: 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
a540: 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  he.** Db.pSchema
a550: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
a560: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
a570: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a580: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
a590: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a5a0: 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  Flags&(P))==(P))
a5b0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e  .#define DbHasAn
a5c0: 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  yProperty(D,I,P)
a5d0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
a5e0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a5f0: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
a600: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
a610: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
a620: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a630: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c  ma->schemaFlags|
a640: 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43  =(P).#define DbC
a650: 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49  learProperty(D,I
a660: 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  ,P)   (D)->aDb[I
a670: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
a680: 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  aFlags&=~(P)../*
a690: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
a6a0: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53  es for the DB.pS
a6b0: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a6c0: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42  ld..**.** The DB
a6d0: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c  _SchemaLoaded fl
a6e0: 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20  ag is set after 
a6f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
a700: 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ema has been.** 
a710: 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e  read into intern
a720: 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a  al hash tables..
a730: 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74  **.** DB_Unreset
a740: 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74  Views means that
a750: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65   one or more vie
a760: 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e  ws have column n
a770: 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76  ames that.** hav
a780: 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75  e been filled ou
a790: 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  t.  If the schem
a7a0: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65  a changes, these
a7b0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69   column names mi
a7c0: 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61  ght.** changes a
a7d0: 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77  nd so the view w
a7e0: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72  ill need to be r
a7f0: 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eset..*/.#define
a800: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
a810: 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54      0x0001  /* T
a820: 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  he schema has be
a830: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65  en loaded */.#de
a840: 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56  fine DB_UnresetV
a850: 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20  iews    0x0002  
a860: 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61  /* Some views ha
a870: 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  ve defined colum
a880: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
a890: 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20  ne DB_Empty     
a8a0: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
a8b0: 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70   The file is emp
a8c0: 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74  ty (length 0 byt
a8d0: 65 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  es) */.#define D
a8e0: 42 5f 52 65 73 65 74 57 61 6e 74 65 64 20 20 20  B_ResetWanted   
a8f0: 20 20 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73    0x0008  /* Res
a900: 65 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68  et the schema wh
a910: 65 6e 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d  en nSchemaLock==
a920: 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  0 */../*.** The 
a930: 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72  number of differ
a940: 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69  ent kinds of thi
a950: 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ngs that can be 
a960: 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67  limited.** using
a970: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d   the sqlite3_lim
a980: 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a  it() interface..
a990: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a9a0: 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54  E_N_LIMIT (SQLIT
a9b0: 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54  E_LIMIT_WORKER_T
a9c0: 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a  HREADS+1)../*.**
a9d0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
a9e0: 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69  c is a set of fi
a9f0: 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73  xed-size buffers
aa00: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
aa10: 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20  d.** to satisfy 
aa20: 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20  small transient 
aa30: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
aa40: 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f  n requests for o
aa50: 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69  bjects.** associ
aa60: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
aa70: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
aa80: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
aa90: 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61   use of.** looka
aaa0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76  side malloc prov
aab0: 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61  ides a significa
aac0: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65  nt performance e
aad0: 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61  nhancement.** (a
aae0: 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76  pprox 10%) by av
aaf0: 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20  oiding numerous 
ab00: 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75  malloc/free requ
ab10: 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69  ests while parsi
ab20: 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ng.** SQL statem
ab30: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
ab40: 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74  Lookaside struct
ab50: 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67  ure holds config
ab60: 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  uration informat
ab70: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a  ion about the.**
ab80: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
ab90: 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61  c subsystem.  Ea
aba0: 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  ch available mem
abb0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
abc0: 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69  n.** the lookasi
abd0: 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  de subsystem is 
abe0: 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b  stored on a link
abf0: 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61  ed list of Looka
ac00: 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65  sideSlot.** obje
ac10: 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61  cts..**.** Looka
ac20: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
ac30: 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65   are only allowe
ac40: 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68  d for objects th
ac50: 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  at are associate
ac60: 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74  d.** with a part
ac70: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
ac80: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e  connection.  Hen
ac90: 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  ce, schema infor
aca0: 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a  mation cannot.**
acb0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f   be stored in lo
acc0: 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20  okaside because 
acd0: 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  in shared cache 
ace0: 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20  mode the schema 
acf0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69  information.** i
ad00: 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  s shared by mult
ad10: 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f  iple database co
ad20: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72  nnections.  Ther
ad30: 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72  efore, while par
ad40: 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69  sing.** schema i
ad50: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  nformation, the 
ad60: 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c  Lookaside.bEnabl
ad70: 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ed flag is clear
ad80: 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f  ed so that.** lo
ad90: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
ada0: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64  ons are not used
adb0: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
adc0: 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  e schema objects
add0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  ..*/.struct Look
ade0: 61 73 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44  aside {.  u32 bD
adf0: 69 73 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  isable;         
ae00: 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74    /* Only operat
ae10: 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20  e the lookaside 
ae20: 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75  when zero */.  u
ae30: 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20  16 sz;          
ae40: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
ae50: 66 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e  f each buffer in
ae60: 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62   bytes */.  u8 b
ae70: 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20  Malloced;       
ae80: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70      /* True if p
ae90: 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66  Start obtained f
aea0: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
aeb0: 6f 63 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53  oc() */.  u32 nS
aec0: 6c 6f 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  lot;            
aed0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
aee0: 6f 6f 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61  ookaside slots a
aef0: 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33  llocated */.  u3
af00: 32 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20  2 anStat[3];    
af10: 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73        /* 0: hits
af20: 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65  .  1: size misse
af30: 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73  s.  2: full miss
af40: 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64  es */.  Lookasid
af50: 65 53 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20  eSlot *pInit;   
af60: 2f 2a 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65  /* List of buffe
af70: 72 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  rs not previousl
af80: 79 20 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b  y used */.  Look
af90: 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65  asideSlot *pFree
afa0: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61  ;   /* List of a
afb0: 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73  vailable buffers
afc0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61   */.  void *pSta
afd0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
afe0: 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   First byte of a
aff0: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
b000: 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  space */.  void 
b010: 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
b020: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
b030: 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61   past end of ava
b040: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a  ilable space */.
b050: 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  };.struct Lookas
b060: 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b  ideSlot {.  Look
b070: 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74  asideSlot *pNext
b080: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66  ;    /* Next buf
b090: 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  fer in the list 
b0a0: 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20  of free buffers 
b0b0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68  */.};../*.** A h
b0c0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75  ash table for bu
b0d0: 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20  ilt-in function 
b0e0: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41  definitions.  (A
b0f0: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
b100: 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  ed.** functions 
b110: 75 73 65 20 61 20 72 65 67 75 6c 61 72 20 74 61  use a regular ta
b120: 62 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68  ble table from h
b130: 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61  ash.h.).**.** Ha
b140: 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20  sh each FuncDef 
b150: 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f  structure into o
b160: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
b170: 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e  fHash.a[] slots.
b180: 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61  .** Collisions a
b190: 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65  re on the FuncDe
b1a0: 66 2e 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e  f.u.pHash chain.
b1b0: 20 20 55 73 65 20 74 68 65 20 53 51 4c 49 54 45    Use the SQLITE
b1c0: 5f 46 55 4e 43 5f 48 41 53 48 28 29 0a 2a 2a 20  _FUNC_HASH().** 
b1d0: 6d 61 63 72 6f 20 74 6f 20 63 6f 6d 70 75 74 65  macro to compute
b1e0: 20 61 20 68 61 73 68 20 6f 6e 20 74 68 65 20 66   a hash on the f
b1f0: 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 2e 0a 2a 2f  unction name..*/
b200: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b210: 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a  FUNC_HASH_SZ 23.
b220: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
b230: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
b240: 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  a[SQLITE_FUNC_HA
b250: 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a  SH_SZ];       /*
b260: 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   Hash table for 
b270: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
b280: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b290: 55 4e 43 5f 48 41 53 48 28 43 2c 4c 29 20 28 28  UNC_HASH(C,L) ((
b2a0: 28 43 29 2b 28 4c 29 29 25 53 51 4c 49 54 45 5f  (C)+(L))%SQLITE_
b2b0: 46 55 4e 43 5f 48 41 53 48 5f 53 5a 29 0a 0a 23  FUNC_HASH_SZ)..#
b2c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
b2d0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
b2e0: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
b2f0: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
b300: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
b310: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
b320: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
b330: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
b340: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
b350: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
b360: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
b370: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
b380: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
b390: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
b3a0: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
b3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b3c0: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
b3d0: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
b3e0: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b400: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
b410: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
b420: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
b430: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
b440: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
b450: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
b460: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
b470: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
b480: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
b490: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
b4a0: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
b4b0: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
b4c0: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
b4d0: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
b4e0: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
b4f0: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
b500: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
b510: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
b520: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
b530: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
b540: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
b550: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
b560: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
b570: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
b580: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
b590: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
b5a0: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
b5b0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
b5c0: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
b5d0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
b5e0: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
b5f0: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
b600: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
b610: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
b620: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
b630: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
b640: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
b650: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
b660: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
b670: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
b680: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
b690: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
b6a0: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
b6b0: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
b6c0: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
b6d0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
b6e0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
b6f0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b700: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b710: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
b720: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
b730: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
b740: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
b750: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
b760: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
b770: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
b780: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
b790: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
b7a0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b7b0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b7c0: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7e0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
b7f0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
b800: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
b810: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
b820: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
b830: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b840: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b850: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
b880: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
b890: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b8a0: 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73  CATED./* This is
b8b0: 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45   an extra SQLITE
b8c0: 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61  _TRACE macro tha
b8d0: 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67  t indicates "leg
b8e0: 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20  acy" tracing.** 
b8f0: 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20  in the style of 
b900: 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a  sqlite3_trace().
b910: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b920: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
b930: 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20 20          0x40    
b940: 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61   /* Use the lega
b950: 63 79 20 78 54 72 61 63 65 20 2a 2f 0a 23 64 65  cy xTrace */.#de
b960: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43  fine SQLITE_TRAC
b970: 45 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20  E_XPROFILE      
b980: 20 20 30 78 38 30 20 20 20 20 20 2f 2a 20 55 73    0x80     /* Us
b990: 65 20 74 68 65 20 6c 65 67 61 63 79 20 78 50 72  e the legacy xPr
b9a0: 6f 66 69 6c 65 20 2a 2f 0a 23 65 6c 73 65 0a 23  ofile */.#else.#
b9b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
b9c0: 41 43 45 5f 4c 45 47 41 43 59 20 20 20 20 20 20  ACE_LEGACY      
b9d0: 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51      0.#define SQ
b9e0: 4c 49 54 45 5f 54 52 41 43 45 5f 58 50 52 4f 46  LITE_TRACE_XPROF
b9f0: 49 4c 45 20 20 20 20 20 20 20 20 30 0a 23 65 6e  ILE        0.#en
ba00: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
ba10: 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f  IT_DEPRECATED */
ba20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba30: 54 52 41 43 45 5f 4e 4f 4e 4c 45 47 41 43 59 5f  TRACE_NONLEGACY_
ba40: 4d 41 53 4b 20 20 30 78 30 66 20 20 20 20 20 2f  MASK  0x0f     /
ba50: 2a 20 4e 6f 72 6d 61 6c 20 66 6c 61 67 73 20 2a  * Normal flags *
ba60: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  /.../*.** Each d
ba70: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
ba80: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
ba90: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
baa0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
bab0: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
bac0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
bad0: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
bae0: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
baf0: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
bb00: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
bb10: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
bb20: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
bb30: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
bb40: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
bb50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
bb60: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
bb70: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
bb80: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
bb90: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
bba0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
bbb0: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
bbc0: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbe0: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
bbf0: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc10: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
bc20: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
bc30: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75  ly in use */.  u
bc40: 33 32 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20  32 mDbFlags;    
bc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bc60: 66 6c 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20  flags recording 
bc70: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a  internal state *
bc80: 2f 0a 20 20 75 36 34 20 66 6c 61 67 73 3b 20 20  /.  u64 flags;  
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 20 20 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61    /* flags setta
bcb0: 62 6c 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20  ble by pragmas. 
bcc0: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
bcd0: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
bce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bcf0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
bd00: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
bd10: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
bd20: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
bd30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
bd40: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
bd50: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32  setting */.  u32
bd60: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20   nSchemaLock;   
bd70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
bd80: 20 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20 73   not reset the s
bd90: 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a  chema when non-z
bda0: 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ero */.  unsigne
bdb0: 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b  d int openFlags;
bdc0: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
bdd0: 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
bde0: 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f  3_vfs.xOpen() */
bdf0: 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20  .  int errCode; 
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be10: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
be20: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
be30: 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65  TE_*) */.  int e
be40: 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  rrMask;         
be50: 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65           /* & re
be60: 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20  sult codes with 
be70: 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75  this before retu
be80: 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  rning */.  int i
be90: 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20  SysErrno;       
bea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e           /* Errn
beb0: 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73  o value from las
bec0: 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a  t system error *
bed0: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
bee0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
bef0: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
bf00: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
bf10: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
bf20: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bf40: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
bf50: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
bf60: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
bf70: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
bf80: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
bf90: 75 38 20 62 43 6f 6e 63 75 72 72 65 6e 74 3b 20  u8 bConcurrent; 
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bfb0: 20 43 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   Current transac
bfc0: 74 69 6f 6e 20 69 73 20 22 43 4f 4e 43 55 52 52  tion is "CONCURR
bfd0: 45 4e 54 22 20 2a 2f 0a 20 20 75 38 20 74 65 6d  ENT" */.  u8 tem
bfe0: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
bff0: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
c000: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
c010: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
c020: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
c030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
c040: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
c050: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
c060: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e  ure */.  u8 bBen
c070: 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  ignMalloc;      
c080: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
c090: 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20 69 66   require OOMs if
c0a0: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 64 66   true */.  u8 df
c0b0: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
c0c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
c0d0: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
c0e0: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
c0f0: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
c100: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
c110: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
c120: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
c130: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
c140: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c160: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
c170: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
c180: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
c190: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
c1a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
c1b0: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
c1c0: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
c1d0: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
c1e0: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
c1f0: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
c200: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
c210: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
c220: 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61   TS */.  u8 mTra
c230: 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ce;             
c240: 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f         /* zero o
c250: 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f 54 52  r more SQLITE_TR
c260: 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75  ACE flags */.  u
c270: 38 20 6e 6f 53 68 61 72 65 64 43 61 63 68 65 3b  8 noSharedCache;
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c290: 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61 72 65  True if no share
c2a0: 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e 64 73  d-cache backends
c2b0: 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45 78 65   */.  u8 nSqlExe
c2c0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
c2d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c2e0: 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45   pending OP_SqlE
c2f0: 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20  xec opcodes */. 
c300: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
c310: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
c320: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
c330: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
c340: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c360: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
c370: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
c380: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
c390: 46 61 73 74 50 72 6e 67 20 73 50 72 6e 67 3b 20  FastPrng sPrng; 
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c3b0: 20 53 74 61 74 65 20 6f 66 20 74 68 65 20 70 65   State of the pe
c3c0: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 50 52 4e  r-connection PRN
c3d0: 47 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  G */.  int nChan
c3e0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
c3f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
c400: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
c410: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
c420: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
c430: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
c440: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
c450: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
c460: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
c470: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
c480: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
c490: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e  * Limits */.  in
c4a0: 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70  t nMaxSorterMmap
c4b0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
c4c0: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72  aximum size of r
c4d0: 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79  egions mapped by
c4e0: 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72   sorter */.  str
c4f0: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
c500: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
c510: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
c520: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
c530: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
c540: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
c550: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
c560: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
c570: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
c580: 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20  /.    u8 iDb;   
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5a0: 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69    /* Which db fi
c5b0: 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74  le is being init
c5c0: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
c5d0: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
c5e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
c5f0: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
c600: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
c610: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6f 72 70      unsigned orp
c620: 68 61 6e 54 72 69 67 67 65 72 20 3a 20 31 3b 20  hanTrigger : 1; 
c630: 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e  /* Last statemen
c640: 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45  t is orphaned TE
c650: 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  MP trigger */.  
c660: 20 20 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73    unsigned impos
c670: 74 65 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a  terTable : 1; /*
c680: 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70   Building an imp
c690: 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20  oster table */. 
c6a0: 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6f 70     unsigned reop
c6b0: 65 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f  enMemdb : 1;   /
c6c0: 2a 20 41 54 54 41 43 48 20 69 73 20 72 65 61 6c  * ATTACH is real
c6d0: 6c 79 20 61 20 72 65 6f 70 65 6e 20 75 73 69 6e  ly a reopen usin
c6e0: 67 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 20 20 63  g MemDB */.    c
c6f0: 68 61 72 20 2a 2a 61 7a 49 6e 69 74 3b 20 20 20  har **azInit;   
c700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22 74             /* "t
c710: 79 70 65 22 2c 20 22 6e 61 6d 65 22 2c 20 61 6e  ype", "name", an
c720: 64 20 22 74 62 6c 5f 6e 61 6d 65 22 20 63 6f 6c  d "tbl_name" col
c730: 75 6d 6e 73 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  umns */.  } init
c740: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
c750: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
c760: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
c770: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
c780: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
c790: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
c7a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c7b0: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
c7c0: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
c7d0: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
c7e0: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
c7f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c800: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
c810: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
c820: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
c830: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
c840: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c850: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
c860: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
c870: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65  () */.  int nVDe
c880: 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20  stroy;          
c890: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c8a0: 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65  of active OP_VDe
c8b0: 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
c8c0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e   */.  int nExten
c8d0: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
c8e0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c8f0: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
c900: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
c910: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
c920: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
c930: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
c940: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e   handles */.  in
c950: 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c  t (*xTrace)(u32,
c960: 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64  void*,void*,void
c970: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65  *);     /* Trace
c980: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c990: 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20  oid *pTraceArg; 
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
c9c0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63  ment to the trac
c9d0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 69  e function */.#i
c9e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c9f0: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20 76  T_DEPRECATED.  v
ca00: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
ca10: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
ca20: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
ca30: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
ca40: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
ca50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ca70: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
ca80: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
ca90: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 20 2a  .#endif.  void *
caa0: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cac0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
cad0: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  itCallback() */.
cae0: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
caf0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
cb00: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
cb10: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
cb20: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
cb30: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
cb40: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
cb50: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
cb60: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76  allback() */.  v
cb70: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
cb80: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
cb90: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
cba0: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
cbb0: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
cbc0: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
cbd0: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
cbe0: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
cbf0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
cc00: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
cc10: 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc30: 2f 2a 20 43 75 72 72 65 6e 74 20 70 61 72 73 65  /* Current parse
cc40: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
cc50: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
cc60: 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a  TE_HOOK.  void *
cc70: 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20 20  pPreUpdateArg;  
cc80: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
cc90: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72   argument to xPr
cca0: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
ccb0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65  */.  void (*xPre
ccc0: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
ccd0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64     /* Registered
cce0: 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
ccf0: 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20  reupdate_hook() 
cd00: 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c  */.    void*,sql
cd10: 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63  ite3*,int,char c
cd20: 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74  onst*,char const
cd30: 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c  *,sqlite3_int64,
cd40: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20  sqlite3_int64.  
cd50: 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a  );.  PreUpdate *
cd60: 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20 20  pPreUpdate;     
cd70: 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f     /* Context fo
cd80: 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70 64  r active pre-upd
cd90: 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ate callback */.
cda0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
cdb0: 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
cdc0: 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65  E_HOOK */.#ifnde
cdd0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
cde0: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
cdf0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
ce00: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
ce10: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
ce20: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
ce30: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
ce40: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
ce50: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
ce60: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
ce70: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
ce80: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
ce90: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
cea0: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
ceb0: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
cec0: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
ced0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
cee0: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
cef0: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
cf00: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
cf10: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
cf20: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
cf30: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
cf40: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
cf50: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
cf60: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
cf70: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
cf80: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
cf90: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
cfa0: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
cfb0: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
cfc0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
cfd0: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
cfe0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cff0: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
d000: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78  TION.  sqlite3_x
d010: 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20  auth xAuth;     
d020: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
d030: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
d040: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
d050: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
d060: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
d070: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
d080: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
d090: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
d0a0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d0b0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
d0c0: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
d0d0: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
d0e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
d0f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
d100: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
d110: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
d120: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
d130: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
d140: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
d150: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
d160: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
d170: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
d180: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
d190: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
d1a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d1b0: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
d1c0: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d1e0: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
d1f0: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
d200: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d220: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
d230: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
d240: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
d250: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
d260: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
d270: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
d280: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
d290: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
d2a0: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
d2b0: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
d2c0: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
d2d0: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
d2e0: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
d2f0: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 20 20 20  sconnect;       
d300: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
d310: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
d320: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
d330: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73   */.#endif.  Has
d340: 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20  h aFunc;        
d350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
d360: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
d370: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
d380: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
d390: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
d3a0: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
d3b0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
d3c0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
d3d0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
d3e0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
d3f0: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
d400: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
d410: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
d420: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
d430: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
d440: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
d450: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
d460: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
d470: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
d480: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
d490: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
d4a0: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
d4b0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
d4c0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
d4d0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
d4e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d4f0: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
d500: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
d510: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
d520: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
d530: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
d540: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
d550: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
d560: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
d570: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
d580: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
d590: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
d5a0: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
d5b0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
d5c0: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
d5d0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
d5e0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
d5f0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
d600: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
d610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
d620: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
d630: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
d640: 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66  Free() */.#ifdef
d650: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
d660: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
d670: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
d680: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
d690: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
d6a0: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
d6b0: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
d6c0: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
d6d0: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
d6e0: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
d6f0: 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  fy.c..  **.  ** 
d700: 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f  When X.pUnlockCo
d710: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
d720: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69  t means that X i
d730: 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20  s waiting for Y 
d740: 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73  to.  ** unlock s
d750: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72  o that it can pr
d760: 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  oceed..  **.  **
d770: 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e   When X.pBlockin
d780: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  gConnection==Y, 
d790: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
d7a0: 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58  something that X
d7b0: 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65   tried.  ** trie
d7c0: 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79  d to do recently
d7d0: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20   failed with an 
d7e0: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72  SQLITE_LOCKED er
d7f0: 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73  ror due to locks
d800: 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e  .  ** held by Y.
d810: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  .  */.  sqlite3 
d820: 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  *pBlockingConnec
d830: 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74  tion; /* Connect
d840: 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20  ion that caused 
d850: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f  SQLITE_LOCKED */
d860: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c  .  sqlite3 *pUnl
d870: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20  ockConnection;  
d880: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
d890: 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20  ection to watch 
d8a0: 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20  for unlock */.  
d8b0: 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67  void *pUnlockArg
d8c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d8d0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
d8e0: 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69  t to xUnlockNoti
d8f0: 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  fy */.  void (*x
d900: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f  UnlockNotify)(vo
d910: 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a  id **, int);  /*
d920: 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63   Unlock notify c
d930: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c  allback */.  sql
d940: 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b  ite3 *pNextBlock
d950: 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  ed;        /* Ne
d960: 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c  xt in list of al
d970: 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63  l blocked connec
d980: 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
d990: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
d9a0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
d9b0: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72  N.  sqlite3_user
d9c0: 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20  auth auth;      
d9d0: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
d9e0: 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  tication informa
d9f0: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  tion */.#endif.}
da00: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f  ;../*.** A macro
da10: 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65   to discover the
da20: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64   encoding of a d
da30: 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66  atabase..*/.#def
da40: 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64  ine SCHEMA_ENC(d
da50: 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d  b) ((db)->aDb[0]
da60: 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23  .pSchema->enc).#
da70: 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20  define ENC(db)  
da80: 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63        ((db)->enc
da90: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
daa0: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
dab0: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
dac0: 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
dad0: 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
dae0: 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
daf0: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
db00: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d  FullFSync     ==
db10: 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43   PAGER_FULLFSYNC
db20: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
db30: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d  CkptFullFSync ==
db40: 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c   PAGER_CKPT_FULL
db50: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
db60: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
db70: 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48     == PAGER_CACH
db80: 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69  E_SPILL.*/.#defi
db90: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
dba0: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
dbb0: 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  001  /* OK to up
dbc0: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
dbd0: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
dbe0: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
dbf0: 6d 74 20 20 30 78 30 30 30 30 30 30 30 32 20 20  mt  0x00000002  
dc00: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
dc10: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
dc20: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
dc30: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
dc40: 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20  es   0x00000004 
dc50: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
dc60: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
dc70: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
dc80: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
dc90: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38        0x00000008
dca0: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
dcb0: 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65  ync on the backe
dcc0: 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nd */.#define SQ
dcd0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
dce0: 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20  nc  0x00000010  
dcf0: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
dd00: 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  c for checkpoint
dd10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd20: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
dd30: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
dd40: 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67   OK to spill pag
dd50: 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  er cache */.#def
dd60: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
dd70: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
dd80: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
dd90: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
dda0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ddb0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
ddc0: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
ddd0: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
dde0: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
ddf0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
de20: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
de30: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
de40: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
de70: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
de80: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
de90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
dea0: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
deb0: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
dec0: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
ded0: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
df10: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
df20: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
df30: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
df40: 73 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20  s   0x00000200  
df50: 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63  /* Do not enforc
df60: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
df70: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
df80: 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
df90: 69 74 20 20 20 30 78 30 30 30 30 30 34 30 30 20  it   0x00000400 
dfa0: 20 2f 2a 20 52 45 41 44 20 55 4e 43 4f 4d 4d 49   /* READ UNCOMMI
dfb0: 54 54 45 44 20 69 6e 20 73 68 61 72 65 64 2d 63  TTED in shared-c
dfc0: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
dfd0: 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43  SQLITE_NoCkptOnC
dfe0: 6c 6f 73 65 20 20 30 78 30 30 30 30 30 38 30 30  lose  0x00000800
dff0: 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69    /* No checkpoi
e000: 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45  nt on close()/DE
e010: 54 41 43 48 20 2a 2f 0a 23 64 65 66 69 6e 65 20  TACH */.#define 
e020: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
e030: 64 65 72 20 20 20 30 78 30 30 30 30 31 30 30 30  der   0x00001000
e040: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
e050: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
e060: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e070: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
e080: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 45  0x00002000  /* E
e090: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
e0a0: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
e0b0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
e0c0: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 30  gnKeys    0x0000
e0d0: 34 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  4000  /* Enforce
e0e0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
e0f0: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
e100: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
e110: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 30  Index      0x000
e120: 30 38 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  08000  /* Enable
e130: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
e140: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e150: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
e160: 6f 6e 20 20 30 78 30 30 30 31 30 30 30 30 20 20  on  0x00010000  
e170: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
e180: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
e190: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
e1a0: 78 74 46 75 6e 63 20 20 20 20 30 78 30 30 30 32  xtFunc    0x0002
e1b0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
e1c0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
e1d0: 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65   SQL func */.#de
e1e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
e1f0: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 30  leTrigger  0x000
e200: 34 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  40000  /* True t
e210: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
e220: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e230: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
e240: 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f     0x00080000  /
e250: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
e260: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
e270: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
e280: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 30  ryOnly      0x00
e290: 31 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  100000  /* Disab
e2a0: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
e2b0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
e2c0: 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b  QLITE_CellSizeCk
e2d0: 20 20 20 20 20 30 78 30 30 32 30 30 30 30 30 20       0x00200000 
e2e0: 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20   /* Check btree 
e2f0: 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f  cell sizes on lo
e300: 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ad */.#define SQ
e310: 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a  LITE_Fts3Tokeniz
e320: 65 72 20 20 30 78 30 30 34 30 30 30 30 30 20 20  er  0x00400000  
e330: 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74  /* Enable fts3_t
e340: 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23  okenizer(2) */.#
e350: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
e360: 61 62 6c 65 51 50 53 47 20 20 20 20 20 30 78 30  ableQPSG     0x0
e370: 30 38 30 30 30 30 30 20 20 2f 2a 20 51 75 65 72  0800000  /* Quer
e380: 79 20 50 6c 61 6e 6e 65 72 20 53 74 61 62 69 6c  y Planner Stabil
e390: 69 74 79 20 47 75 61 72 61 6e 74 65 65 2a 2f 0a  ity Guarantee*/.
e3a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
e3b0: 72 69 67 67 65 72 45 51 50 20 20 20 20 20 30 78  riggerEQP     0x
e3c0: 30 31 30 30 30 30 30 30 20 20 2f 2a 20 53 68 6f  01000000  /* Sho
e3d0: 77 20 74 72 69 67 67 65 72 20 45 58 50 4c 41 49  w trigger EXPLAI
e3e0: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
e3f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
e400: 65 73 65 74 44 61 74 61 62 61 73 65 20 20 30 78  esetDatabase  0x
e410: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 52 65 73  02000000  /* Res
e420: 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
e430: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e440: 45 5f 4c 65 67 61 63 79 41 6c 74 65 72 20 20 20  E_LegacyAlter   
e450: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
e460: 4c 65 67 61 63 79 20 41 4c 54 45 52 20 54 41 42  Legacy ALTER TAB
e470: 4c 45 20 62 65 68 61 76 69 6f 75 72 20 2a 2f 0a  LE behaviour */.
e480: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
e490: 6f 53 63 68 65 6d 61 45 72 72 6f 72 20 20 30 78  oSchemaError  0x
e4a0: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44 6f 20  08000000  /* Do 
e4b0: 6e 6f 74 20 72 65 70 6f 72 74 20 73 63 68 65 6d  not report schem
e4c0: 61 20 70 61 72 73 65 20 65 72 72 6f 72 73 2a 2f  a parse errors*/
e4d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e4e0: 44 65 66 65 6e 73 69 76 65 20 20 20 20 20 20 30  Defensive      0
e4f0: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 49 6e  x10000000  /* In
e500: 70 75 74 20 53 51 4c 20 69 73 20 6c 69 6b 65 6c  put SQL is likel
e510: 79 20 68 6f 73 74 69 6c 65 20 2a 2f 0a 23 64 65  y hostile */.#de
e520: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 71 73 44  fine SQLITE_DqsD
e530: 44 4c 20 20 20 20 20 20 20 20 20 30 78 32 30 30  DL         0x200
e540: 30 30 30 30 30 20 20 2f 2a 20 64 62 6c 2d 71 75  00000  /* dbl-qu
e550: 6f 74 65 64 20 73 74 72 69 6e 67 73 20 61 6c 6c  oted strings all
e560: 6f 77 65 64 20 69 6e 20 44 44 4c 2a 2f 0a 23 64  owed in DDL*/.#d
e570: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 71 73  efine SQLITE_Dqs
e580: 44 4d 4c 20 20 20 20 20 20 20 20 20 30 78 34 30  DML         0x40
e590: 30 30 30 30 30 30 20 20 2f 2a 20 64 62 6c 2d 71  000000  /* dbl-q
e5a0: 75 6f 74 65 64 20 73 74 72 69 6e 67 73 20 61 6c  uoted strings al
e5b0: 6c 6f 77 65 64 20 69 6e 20 44 4d 4c 2a 2f 0a 23  lowed in DML*/.#
e5c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
e5d0: 61 62 6c 65 56 69 65 77 20 20 20 20 20 30 78 38  ableView     0x8
e5e0: 30 30 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0000000  /* Enab
e5f0: 6c 65 20 74 68 65 20 75 73 65 20 6f 66 20 76 69  le the use of vi
e600: 65 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ews */.#define S
e610: 51 4c 49 54 45 5f 4e 6f 6f 70 55 70 64 61 74 65  QLITE_NoopUpdate
e620: 20 20 20 20 20 48 49 28 30 78 30 30 30 31 30 30       HI(0x000100
e630: 30 29 20 2f 2a 20 55 50 44 41 54 45 20 6f 70 65  0) /* UPDATE ope
e640: 72 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f  rations are no-o
e650: 70 73 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20  ps */../* Flags 
e660: 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65 62  used only if deb
e670: 75 67 67 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  ugging */.#defin
e680: 65 20 48 49 28 58 29 20 20 28 28 75 36 34 29 28  e HI(X)  ((u64)(
e690: 58 29 3c 3c 33 32 29 0a 23 69 66 64 65 66 20 53  X)<<32).#ifdef S
e6a0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66  QLITE_DEBUG.#def
e6b0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  ine SQLITE_SqlTr
e6c0: 61 63 65 20 20 20 20 20 20 20 48 49 28 30 78 30  ace       HI(0x0
e6d0: 31 30 30 30 30 30 29 20 2f 2a 20 44 65 62 75 67  100000) /* Debug
e6e0: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
e6f0: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
e700: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
e710: 4c 69 73 74 69 6e 67 20 20 20 20 48 49 28 30 78  Listing    HI(0x
e720: 30 32 30 30 30 30 30 29 20 2f 2a 20 44 65 62 75  0200000) /* Debu
e730: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
e740: 42 45 20 70 72 6f 67 73 20 2a 2f 0a 23 64 65 66  BE progs */.#def
e750: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
e760: 72 61 63 65 20 20 20 20 20 20 48 49 28 30 78 30  race      HI(0x0
e770: 34 30 30 30 30 30 29 20 2f 2a 20 54 72 75 65 20  400000) /* True 
e780: 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78  to trace VDBE ex
e790: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
e7a0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64  ne SQLITE_VdbeAd
e7b0: 64 6f 70 54 72 61 63 65 20 48 49 28 30 78 30 38  dopTrace HI(0x08
e7c0: 30 30 30 30 30 29 20 2f 2a 20 54 72 61 63 65 20  00000) /* Trace 
e7d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e7e0: 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66  () calls */.#def
e7f0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45  ine SQLITE_VdbeE
e800: 51 50 20 20 20 20 20 20 20 20 48 49 28 30 78 31  QP        HI(0x1
e810: 30 30 30 30 30 30 29 20 2f 2a 20 44 65 62 75 67  000000) /* Debug
e820: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
e830: 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LAN */.#define S
e840: 51 4c 49 54 45 5f 50 61 72 73 65 72 54 72 61 63  QLITE_ParserTrac
e850: 65 20 20 20 20 48 49 28 30 78 32 30 30 30 30 30  e    HI(0x200000
e860: 30 29 20 2f 2a 20 50 52 41 47 4d 41 20 70 61 72  0) /* PRAGMA par
e870: 73 65 72 5f 74 72 61 63 65 3d 4f 4e 20 2a 2f 0a  ser_trace=ON */.
e880: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c  #endif../*.** Al
e890: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
e8a0: 20 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67   sqlite3.mDbFlag
e8b0: 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46  s.*/.#define DBF
e8c0: 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65  LAG_SchemaChange
e8d0: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e     0x0001  /* Un
e8e0: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
e8f0: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
e900: 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50  #define DBFLAG_P
e910: 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78  referBuiltin  0x
e920: 30 30 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65  0002  /* Prefere
e930: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
e940: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
e950: 20 44 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20   DBFLAG_Vacuum  
e960: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
e970: 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61  * Currently in a
e980: 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69   VACUUM */.#defi
e990: 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75 6d  ne DBFLAG_Vacuum
e9a0: 49 6e 74 6f 20 20 20 20 20 30 78 30 30 30 38 20  Into     0x0008 
e9b0: 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 72 75   /* Currently ru
e9c0: 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 49 4e 54  nning VACUUM INT
e9d0: 4f 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46  O */.#define DBF
e9e0: 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f  LAG_SchemaKnownO
e9f0: 6b 20 20 30 78 30 30 31 30 20 20 2f 2a 20 53 63  k  0x0010  /* Sc
ea00: 68 65 6d 61 20 69 73 20 6b 6e 6f 77 6e 20 74 6f  hema is known to
ea10: 20 62 65 20 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a   be valid */../*
ea20: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
ea30: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
ea40: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
ea50: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
ea60: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
ea70: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
ea80: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
ea90: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
eaa0: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
eab0: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
eac0: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
ead0: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
eae0: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
eaf0: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
eb00: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
eb10: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
eb20: 49 54 45 5f 57 69 6e 64 6f 77 46 75 6e 63 20 20  ITE_WindowFunc  
eb30: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 55     0x0002   /* U
eb40: 73 65 20 78 49 6e 76 65 72 73 65 20 66 6f 72 20  se xInverse for 
eb50: 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73  window functions
eb60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
eb70: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
eb80: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
eb90: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
eba0: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
ebb0: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
ebc0: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
ebd0: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
ebe0: 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  toring */.#defin
ebf0: 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63  e SQLITE_Distinc
ec00: 74 4f 70 74 20 20 20 20 30 78 30 30 31 30 20 20  tOpt    0x0010  
ec10: 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69   /* DISTINCT usi
ec20: 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ng indexes */.#d
ec30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76  efine SQLITE_Cov
ec40: 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30  erIdxScan   0x00
ec50: 32 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67  20   /* Covering
ec60: 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a   index scans */.
ec70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
ec80: 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78  rderByIdxJoin 0x
ec90: 30 30 34 30 20 20 20 2f 2a 20 4f 52 44 45 52 20  0040   /* ORDER 
eca0: 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20  BY of joins via 
ecb0: 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
ecc0: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
ecd0: 76 65 20 20 20 20 20 30 78 30 30 38 30 20 20 20  ve     0x0080   
ece0: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
ecf0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
ed00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
ed10: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 31 30  NoopJoin   0x010
ed20: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
ed30: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
ed40: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ed50: 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77  LITE_CountOfView
ed60: 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20      0x0200   /* 
ed70: 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65  The count-of-vie
ed80: 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  w optimization *
ed90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eda0: 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20  _CursorHints    
edb0: 30 78 30 34 30 30 20 20 20 2f 2a 20 41 64 64 20  0x0400   /* Add 
edc0: 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70  OP_CursorHint op
edd0: 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  codes */.#define
ede0: 20 53 51 4c 49 54 45 5f 53 74 61 74 34 20 20 20   SQLITE_Stat4   
edf0: 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20         0x0800   
ee00: 2f 2a 20 55 73 65 20 53 54 41 54 34 20 64 61 74  /* Use STAT4 dat
ee10: 61 20 2a 2f 0a 20 20 20 2f 2a 20 54 48 33 20 65  a */.   /* TH3 e
ee20: 78 70 65 63 74 73 20 74 68 65 20 53 74 61 74 34  xpects the Stat4
ee30: 20 20 20 5e 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20     ^^^^^^ value 
ee40: 74 6f 20 62 65 20 30 78 30 38 30 30 2e 20 20 44  to be 0x0800.  D
ee50: 6f 6e 27 74 20 63 68 61 6e 67 65 20 69 74 20 2a  on't change it *
ee60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ee70: 5f 50 75 73 68 44 6f 77 6e 20 20 20 20 20 20 20  _PushDown       
ee80: 30 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65 20  0x1000   /* The 
ee90: 70 75 73 68 2d 64 6f 77 6e 20 6f 70 74 69 6d 69  push-down optimi
eea0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
eeb0: 65 20 53 51 4c 49 54 45 5f 53 69 6d 70 6c 69 66  e SQLITE_Simplif
eec0: 79 4a 6f 69 6e 20 20 20 30 78 32 30 30 30 20 20  yJoin   0x2000  
eed0: 20 2f 2a 20 43 6f 6e 76 65 72 74 20 4c 45 46 54   /* Convert LEFT
eee0: 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f   JOIN to JOIN */
eef0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ef00: 53 6b 69 70 53 63 61 6e 20 20 20 20 20 20 20 30  SkipScan       0
ef10: 78 34 30 30 30 20 20 20 2f 2a 20 53 6b 69 70 2d  x4000   /* Skip-
ef20: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
ef30: 20 53 51 4c 49 54 45 5f 50 72 6f 70 61 67 61 74   SQLITE_Propagat
ef40: 65 43 6f 6e 73 74 20 30 78 38 30 30 30 20 20 20  eConst 0x8000   
ef50: 2f 2a 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20  /* The constant 
ef60: 70 72 6f 70 61 67 61 74 69 6f 6e 20 6f 70 74 20  propagation opt 
ef70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ef80: 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20  E_AllOpts       
ef90: 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c   0xffff   /* All
efa0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
efb0: 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  /../*.** Macros 
efc0: 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74  for testing whet
efd0: 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d  her or not optim
efe0: 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61  izations are ena
eff0: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
f000: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74  ..*/.#define Opt
f010: 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65  imizationDisable
f020: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28  d(db, mask)  (((
f030: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
f040: 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66  (mask))!=0).#def
f050: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
f060: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
f070: 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  )   (((db)->dbOp
f080: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d  tFlags&(mask))==
f090: 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  0)../*.** Return
f0a0: 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74   true if it OK t
f0b0: 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e  o factor constan
f0c0: 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  t expressions in
f0d0: 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  to the initializ
f0e0: 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54  ation.** code. T
f0f0: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
f100: 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f   Parse object fo
f110: 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  r the code gener
f120: 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ator..*/.#define
f130: 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50   ConstFactorOk(P
f140: 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46  ) ((P)->okConstF
f150: 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  actor)../*.** Po
f160: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
f170: 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67  r the sqlite.mag
f180: 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65  ic field..** The
f190: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74   numbers are obt
f1a0: 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20  ained at random 
f1b0: 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63  and have no spec
f1c0: 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68  ial meaning, oth
f1d0: 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67  er.** than being
f1e0: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f   distinct from o
f1f0: 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23  ne another..*/.#
f200: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
f210: 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61  GIC_OPEN     0xa
f220: 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61  029a697  /* Data
f230: 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a  base is open */.
f240: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
f250: 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78  AGIC_CLOSED   0x
f260: 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74  9f3c2d33  /* Dat
f270: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20  abase is closed 
f280: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f290: 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20  E_MAGIC_SICK    
f2a0: 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20   0x4b771290  /* 
f2b0: 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69  Error and awaiti
f2c0: 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66  ng close */.#def
f2d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f2e0: 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62  _BUSY     0xf03b
f2f0: 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73  7906  /* Databas
f300: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  e currently in u
f310: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
f320: 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
f330: 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20      0xb5357930  
f340: 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53  /* An SQLITE_MIS
f350: 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72  USE error occurr
f360: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
f370: 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49  LITE_MAGIC_ZOMBI
f380: 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20  E   0x64cffc7f  
f390: 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61  /* Close with la
f3a0: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f  st statement clo
f3b0: 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  se */../*.** Eac
f3c0: 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  h SQL function i
f3d0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
f3e0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
f3f0: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
f400: 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f  ucture.  For glo
f410: 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  bal built-in fun
f420: 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62 73  ctions (ex: subs
f430: 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75  tr(), max(), cou
f440: 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74  nt()).** a point
f450: 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
f460: 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20  ture is held in 
f470: 74 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c 74  the sqlite3Built
f480: 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65  inFunctions obje
f490: 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63  ct..** For per-c
f4a0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69 63  onnection applic
f4b0: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75  ation-defined fu
f4c0: 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74  nctions, a point
f4d0: 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74  er to this.** st
f4e0: 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20  ructure is held 
f4f0: 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73 68  in the db->aHash
f500: 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a   hash table..**.
f510: 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20 66  ** The u.pHash f
f520: 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20  ield is used by 
f530: 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74  the global built
f540: 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44 65  -ins.  The u.pDe
f550: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c  structor.** fiel
f560: 64 20 69 73 20 75 73 65 64 20 62 79 20 70 65 72  d is used by per
f570: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d  -connection app-
f580: 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  def functions..*
f590: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  /.struct FuncDef
f5a0: 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20 20   {.  i8 nArg;   
f5b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f5c0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
f5d0: 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69  .  -1 means unli
f5e0: 6d 69 74 65 64 20 2a 2f 0a 20 20 75 33 32 20 66  mited */.  u32 f
f5f0: 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20  uncFlags;       
f600: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
f610: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
f620: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
f630: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
f640: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
f650: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
f660: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
f670: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
f680: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
f690: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75  */.  void (*xSFu
f6a0: 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  nc)(sqlite3_cont
f6b0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
f6c0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75  _value**); /* fu
f6d0: 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20 2a  nc or agg-step *
f6e0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  /.  void (*xFina
f6f0: 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  lize)(sqlite3_co
f700: 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20  ntext*);        
f710: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67            /* Agg
f720: 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20   finalizer */.  
f730: 76 6f 69 64 20 28 2a 78 56 61 6c 75 65 29 28 73  void (*xValue)(s
f740: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
f750: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f760: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
f770: 20 61 67 67 20 76 61 6c 75 65 20 2a 2f 0a 20 20   agg value */.  
f780: 76 6f 69 64 20 28 2a 78 49 6e 76 65 72 73 65 29  void (*xInverse)
f790: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
f7a0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
f7b0: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 69 6e 76 65 72  lue**); /* inver
f7c0: 73 65 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20  se agg-step */. 
f7d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
f7e0: 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d  me;   /* SQL nam
f7f0: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
f800: 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  n. */.  union {.
f810: 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61      FuncDef *pHa
f820: 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  sh;      /* Next
f830: 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e   with a differen
f840: 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73  t name but the s
f850: 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20  ame hash */.    
f860: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
f870: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
f880: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
f890: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
f8a0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75  unction */.  } u
f8b0: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ;.};../*.** This
f8c0: 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70   structure encap
f8d0: 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66  sulates a user-f
f8e0: 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74  unction destruct
f8f0: 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a  or callback (as.
f900: 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73  ** configured us
f910: 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74  ing create_funct
f920: 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20  ion_v2()) and a 
f930: 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  reference counte
f940: 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74  r. When.** creat
f950: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20  e_function_v2() 
f960: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
f970: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77  ate a function w
f980: 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72  ith a destructor
f990: 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62  ,.** a single ob
f9a0: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
f9b0: 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20  e is allocated. 
f9c0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e  FuncDestructor.n
f9d0: 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  Ref is set to.**
f9e0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46   the number of F
f9f0: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63  uncDef objects c
fa00: 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31  reated (either 1
fa10: 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67   or 3, depending
fa20: 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f   on whether.** o
fa30: 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66  r not the specif
fa40: 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20  ied encoding is 
fa50: 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65  SQLITE_ANY). The
fa60: 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75   FuncDef.pDestru
fa70: 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f  ctor.** member o
fa80: 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65  f each of the ne
fa90: 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  w FuncDef object
faa0: 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e  s is set to poin
fab0: 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74  t to the allocat
fac0: 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75  ed.** FuncDestru
fad0: 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  ctor..**.** Ther
fae0: 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65  eafter, when one
faf0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20   of the FuncDef 
fb00: 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74  objects is delet
fb10: 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63  ed, the referenc
fb20: 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68  e.** count on th
fb30: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63  is object is dec
fb40: 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69  remented. When i
fb50: 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65  t reaches 0, the
fb60: 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69   destructor.** i
fb70: 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68  s invoked and th
fb80: 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  e FuncDestructor
fb90: 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64   structure freed
fba0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
fbb0: 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69  Destructor {.  i
fbc0: 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20  nt nRef;.  void 
fbd0: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
fbe0: 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73   *);.  void *pUs
fbf0: 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  erData;.};../*.*
fc00: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
fc10: 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c  s for FuncDef.fl
fc20: 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  ags.  Note that 
fc30: 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20  the _LENGTH and 
fc40: 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65  _TYPEOF.** value
fc50: 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e  s must correspon
fc60: 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  d to OPFLAG_LENG
fc70: 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
fc80: 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64  _TYPEOFARG.  And
fc90: 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  .** SQLITE_FUNC_
fca0: 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65  CONSTANT must be
fcb0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c   the same as SQL
fcc0: 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49  ITE_DETERMINISTI
fcd0: 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  C.  There.** are
fce0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
fcf0: 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65  ents in the code
fd00: 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e   to verify this.
fd10: 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
fd20: 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
fd30: 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
fd40: 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  :.**     SQLITE_
fd50: 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d  FUNC_MINMAX    =
fd60: 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  =  NC_MinMaxAgg 
fd70: 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61       == SF_MinMa
fd80: 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49  xAgg.**     SQLI
fd90: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
fda0: 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e    ==  OPFLAG_LEN
fdb0: 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51  GTHARG.**     SQ
fdc0: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
fdd0: 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54      ==  OPFLAG_T
fde0: 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20  YPEOFARG.**     
fdf0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
fe00: 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45  TANT  ==  SQLITE
fe10: 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66  _DETERMINISTIC f
fe20: 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20  rom the API.**  
fe30: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 44     SQLITE_FUNC_D
fe40: 49 52 45 43 54 20 20 20 20 3d 3d 20 20 53 51 4c  IRECT    ==  SQL
fe50: 49 54 45 5f 44 49 52 45 43 54 4f 4e 4c 59 20 66  ITE_DIRECTONLY f
fe60: 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20  rom the API.**  
fe70: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45     SQLITE_FUNC_E
fe80: 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73  NCMASK   depends
fe90: 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20   on SQLITE_UTF* 
fea0: 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50  macros in the AP
feb0: 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  I.*/.#define SQL
fec0: 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b  ITE_FUNC_ENCMASK
fed0: 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49    0x0003 /* SQLI
fee0: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
fef0: 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36  UTF16BE or UTF16
ff00: 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LE */.#define SQ
ff10: 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20  LITE_FUNC_LIKE  
ff20: 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e     0x0004 /* Can
ff30: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
ff40: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
ff50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ff60: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20  TE_FUNC_CASE    
ff70: 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d   0x0008 /* Case-
ff80: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
ff90: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
ffa0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ffb0: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
ffc0: 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c  010 /* Ephemeral
ffd0: 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56  .  Delete with V
ffe0: 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DBE */.#define S
fff0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
10000 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71  OLL 0x0020 /* sq
10010 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
10020 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
10030 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20  alled*/.#define 
10040 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
10050 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42  TH   0x0040 /* B
10060 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
10070 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
10080 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10090 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38 30  _TYPEOF   0x0080
100a0 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70   /* Built-in typ
100b0 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  eof() function *
100c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
100d0 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
100e0 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0100 /* Built-i
100f0 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
10100 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
10110 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
10120 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42  ESCE 0x0200 /* B
10130 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
10140 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a  () or ifnull() *
10150 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10160 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30  _FUNC_UNLIKELY 0
10170 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0400 /* Built-i
10180 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e  n unlikely() fun
10190 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
101a0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
101b0 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20  STANT 0x0800 /* 
101c0 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20  Constant inputs 
101d0 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20  give a constant 
101e0 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e  output */.#defin
101f0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  e SQLITE_FUNC_MI
10200 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a  NMAX   0x1000 /*
10210 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20   True for min() 
10220 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67  and max() aggreg
10230 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
10240 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
10250 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22  HNG  0x2000 /* "
10260 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61  Slow Change". Va
10270 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72  lue constant dur
10280 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20 20  ing a.          
10290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102a0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e            ** sin
102b0 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68  gle query - migh
102c0 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69  t change over ti
102d0 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  me */.#define SQ
102e0 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49  LITE_FUNC_AFFINI
102f0 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69  TY 0x4000 /* Bui
10300 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29  lt-in affinity()
10310 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
10320 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10330 5f 4f 46 46 53 45 54 20 20 20 30 78 38 30 30 30  _OFFSET   0x8000
10340 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 73 71 6c   /* Built-in sql
10350 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e  ite_offset() fun
10360 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
10370 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 57 49 4e   SQLITE_FUNC_WIN
10380 44 4f 57 20 20 20 30 78 30 30 30 31 30 30 30 30  DOW   0x00010000
10390 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 77 69 6e   /* Built-in win
103a0 64 6f 77 2d 6f 6e 6c 79 20 66 75 6e 63 74 69 6f  dow-only functio
103b0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
103c0 49 54 45 5f 46 55 4e 43 5f 49 4e 54 45 52 4e 41  ITE_FUNC_INTERNA
103d0 4c 20 30 78 30 30 30 34 30 30 30 30 20 2f 2a 20  L 0x00040000 /* 
103e0 46 6f 72 20 75 73 65 20 62 79 20 4e 65 73 74 65  For use by Neste
103f0 64 50 61 72 73 65 28 29 20 6f 6e 6c 79 20 2a 2f  dParse() only */
10400 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10410 46 55 4e 43 5f 44 49 52 45 43 54 20 20 20 30 78  FUNC_DIRECT   0x
10420 30 30 30 38 30 30 30 30 20 2f 2a 20 4e 6f 74 20  00080000 /* Not 
10430 66 6f 72 20 75 73 65 20 69 6e 20 54 52 49 47 47  for use in TRIGG
10440 45 52 73 20 6f 72 20 56 49 45 57 73 20 2a 2f 0a  ERs or VIEWs */.
10450 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
10460 55 4e 43 5f 53 55 42 54 59 50 45 20 20 30 78 30  UNC_SUBTYPE  0x0
10470 30 31 30 30 30 30 30 20 2f 2a 20 52 65 73 75 6c  0100000 /* Resul
10480 74 20 6c 69 6b 65 6c 79 20 74 6f 20 68 61 76 65  t likely to have
10490 20 73 75 62 2d 74 79 70 65 20 2a 2f 0a 0a 2f 2a   sub-type */../*
104a0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
104b0 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
104c0 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
104d0 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
104e0 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
104f0 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
10500 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
10510 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
10520 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
10530 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
10540 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10550 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
10560 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
10570 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
10580 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
10590 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
105a0 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
105b0 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
105c0 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
105d0 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
105e0 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
105f0 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
10600 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
10610 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
10620 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
10630 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
10640 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
10650 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
10660 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a  he function. If.
10670 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
10680 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
10690 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
106a0 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
106b0 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
106c0 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
106d0 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
106e0 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
106f0 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
10700 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
10710 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
10720 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
10730 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
10740 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10750 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
10760 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
10770 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
10780 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
10790 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
107a0 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
107b0 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
107c0 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
107d0 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
107e0 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
107f0 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
10800 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
10810 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
10820 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
10830 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
10840 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
10850 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69 67    The iArg is ig
10860 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65 72  nored.  The user
10870 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73 20  -data is always 
10880 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20  set.**     to a 
10890 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
108a0 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
108b0 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
108c0 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28  .**   PURE_DATE(
108d0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
108e0 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
108f0 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20 22  *     Used for "
10900 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20  pure" date/time 
10910 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20  functions, this 
10920 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46  macro is like DF
10930 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65  UNCTION.**     e
10940 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64 6f  xcept that it do
10950 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49 54  es set the SQLIT
10960 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
10970 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a  flags.  iArg is.
10980 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61  **     ignored a
10990 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  nd the user-data
109a0 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74   for these funct
109b0 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61  ions is set to a
109c0 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72  n .**     arbitr
109d0 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69  ary non-NULL poi
109e0 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
109f0 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
10a00 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  used..**.**   AG
10a10 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
10a20 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10a30 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
10a40 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
10a50 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
10a60 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
10a70 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
10a80 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
10a90 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
10aa0 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
10ab0 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
10ac0 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
10ad0 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
10ae0 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
10af0 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
10b00 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
10b10 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
10b20 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e  *.**   WFUNCTION
10b30 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10b40 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  rg, xStep, xFina
10b50 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65  l, xValue, xInve
10b60 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  rse).**     Used
10b70 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
10b80 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10b90 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
10ba0 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
10bb0 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
10bc0 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10bd0 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
10be0 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
10bf0 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
10c00 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
10c10 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
10c20 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
10c30 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
10c40 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
10c50 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
10c60 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
10c70 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10c80 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
10c90 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10ca0 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
10cb0 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
10cc0 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
10cd0 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
10ce0 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
10cf0 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
10d00 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
10d10 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
10d20 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
10d30 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
10d40 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
10d50 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
10d60 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
10d70 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
10d80 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
10d90 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
10da0 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
10db0 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
10dc0 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
10dd0 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
10de0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
10df0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10e00 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10e10 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10e20 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10e30 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
10e40 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
10e50 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
10e60 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10e70 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
10e80 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10e90 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10ea0 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
10eb0 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10ec0 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10ed0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10ee0 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10ef0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10f00 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10f10 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
10f20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
10f30 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10f40 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
10f50 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10f60 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
10f70 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10f80 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
10f90 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20  LITE_UTF8, \.   
10fa0 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  0, 0, xFunc, 0, 
10fb0 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10fc0 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45  } }.#define PURE
10fd0 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
10fe0 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10ff0 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
11000 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
11010 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
11020 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
11030 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64  TANT, \.   (void
11040 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  *)&sqlite3Config
11050 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
11060 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
11070 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
11080 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
11090 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
110a0 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
110b0 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
110c0 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
110d0 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
110e0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
110f0 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
11100 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
11110 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
11120 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
11130 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
11140 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
11150 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
11160 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
11170 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
11180 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
11190 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NG|SQLITE_UTF8|(
111a0 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
111b0 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
111c0 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
111d0 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
111e0 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
111f0 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
11200 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
11210 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
11220 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
11230 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
11240 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
11250 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
11260 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
11270 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
11280 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
11290 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
112a0 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61  tep, xFinal, xVa
112b0 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  lue) \.  {nArg, 
112c0 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
112d0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
112e0 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
112f0 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
11300 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
11310 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e  nal,xValue,0,#zN
11320 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
11330 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
11340 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
11350 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
11360 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
11370 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
11380 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
11390 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
113a0 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
113b0 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
113c0 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
113d0 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30  ,xFinal,xFinal,0
113e0 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64  ,#zName, {0}}.#d
113f0 65 66 69 6e 65 20 57 41 47 47 52 45 47 41 54 45  efine WAGGREGATE
11400 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
11410 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
11420 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49  inal, xValue, xI
11430 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a 20 20 7b  nverse, f) \.  {
11440 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
11450 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
11460 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20 5c  C_NEEDCOLL)|f, \
11470 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
11480 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
11490 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c  Step,xFinal,xVal
114a0 75 65 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e 61  ue,xInverse,#zNa
114b0 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65  me, {0}}.#define
114c0 20 49 4e 54 45 52 4e 41 4c 5f 46 55 4e 43 54 49   INTERNAL_FUNCTI
114d0 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
114e0 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
114f0 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e  , SQLITE_FUNC_IN
11500 54 45 52 4e 41 4c 7c 53 51 4c 49 54 45 5f 55 54  TERNAL|SQLITE_UT
11510 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  F8|SQLITE_FUNC_C
11520 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 30 2c  ONSTANT, \.   0,
11530 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
11540 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
11550 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  }.../*.** All cu
11560 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
11570 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
11580 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
11590 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
115a0 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
115b0 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
115c0 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
115d0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
115e0 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
115f0 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
11600 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
11610 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
11620 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
11630 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
11640 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
11650 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
11660 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
11670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11680 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
11690 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
116a0 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
116b0 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
116c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
116d0 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
116e0 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
116f0 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
11700 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
11710 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11720 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
11730 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
11740 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11760 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
11770 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
11780 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
11790 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
117a0 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
117b0 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
117c0 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
117d0 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
117e0 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
117f0 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
11800 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
11810 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
11820 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
11830 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
11840 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
11850 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
11860 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
11870 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
11880 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
11890 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
118a0 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
118b0 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
118c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
118d0 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
118e0 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
118f0 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
11900 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
11910 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
11920 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
11930 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
11940 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
11950 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
11960 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11980 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
11990 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
119a0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 4d 6f 64  */.  int nRefMod
119b0 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
119c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
119d0 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
119e0 74 6f 20 74 68 69 73 20 6f 62 6a 65 63 74 20 2a  to this object *
119f0 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a10 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
11a20 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
11a30 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
11a40 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
11a50 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
11a60 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
11a70 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
11a80 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  on */.  Table *p
11a90 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20  EpoTab;         
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11ab0 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20  Eponymous table 
11ac0 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20  for this module 
11ad0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
11ae0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
11af0 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
11b00 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
11b10 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
11b20 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
11b30 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
11b40 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
11b50 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
11b60 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
11b70 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e  lumn, \000, then
11b80 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45   the type */.  E
11b90 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
11ba0 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
11bb0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
11bc0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
11bd0 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
11be0 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
11bf0 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
11c00 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
11c10 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
11c20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
11c30 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
11c40 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
11c50 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
11c60 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
11c70 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
11c80 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
11c90 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
11ca0 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
11cb0 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69   of value in thi
11cc0 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66  s column. sizeof
11cd0 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38  (INT)==1 */.  u8
11ce0 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
11cf0 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
11d00 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
11d10 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
11d20 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
11d30 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
11d40 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
11d50 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11d60 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
11d70 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
11d80 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
11d90 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
11da0 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
11db0 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
11dc0 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
11dd0 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
11de0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
11df0 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50  e COLFLAG_HASTYP
11e00 45 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20  E  0x0004    /* 
11e10 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77  Type name follow
11e20 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f  s column name */
11e30 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
11e40 5f 55 4e 49 51 55 45 20 20 20 30 78 30 30 30 38  _UNIQUE   0x0008
11e50 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65      /* Column de
11e60 66 20 63 6f 6e 74 61 69 6e 73 20 22 55 4e 49 51  f contains "UNIQ
11e70 55 45 22 20 6f 72 20 22 50 4b 22 20 2a 2f 0a 23  UE" or "PK" */.#
11e80 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 53  define COLFLAG_S
11e90 4f 52 54 45 52 52 45 46 20 30 78 30 30 31 30 20  ORTERREF 0x0010 
11ea0 20 20 2f 2a 20 55 73 65 20 73 6f 72 74 65 72 2d    /* Use sorter-
11eb0 72 65 66 73 20 77 69 74 68 20 74 68 69 73 20 63  refs with this c
11ec0 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  olumn */../*.** 
11ed0 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
11ee0 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
11ef0 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
11f00 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11f10 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
11f20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
11f30 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11f40 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
11f50 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
11f60 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
11f70 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
11f80 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
11f90 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
11fa0 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
11fb0 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
11fc0 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
11fd0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11fe0 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
11ff0 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
12000 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
12010 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
12020 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
12030 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
12040 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
12050 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
12060 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
12070 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
12080 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
12090 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
120a0 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
120b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
120c0 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
120d0 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
120e0 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
120f0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
12100 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
12110 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
12120 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
12130 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
12140 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
12150 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
12160 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
12170 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
12180 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
12190 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
121a0 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
121b0 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
121c0 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
121d0 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
121e0 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
121f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12200 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
12210 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
12220 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
12230 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12240 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20  SO_UNDEFINED -1 
12250 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72  /* No sort order
12260 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f   specified */../
12270 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69  *.** Column affi
12280 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a  nity types..**.*
12290 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20  * These used to 
122a0 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61  have mnemonic na
122b0 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20  me like 'i' for 
122c0 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
122d0 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f  ER and.** 't' fo
122e0 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  r SQLITE_AFF_TEX
122f0 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73  T.  But we can s
12300 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61  ave a little spa
12310 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a  ce and improve.*
12320 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69  * the speed a li
12330 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e  ttle by numberin
12340 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e  g the values con
12350 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a  secutively..**.*
12360 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
12370 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
12380 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
12390 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61  th 'A'.  That wa
123a0 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
123b0 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
123c0 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
123d0 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
123e0 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
123f0 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
12400 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
12410 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
12420 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
12430 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
12440 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
12450 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
12460 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
12470 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
12480 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
12490 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20  rison.  And the 
124a0 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72  BLOB type is fir
124b0 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  st..*/.#define S
124c0 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20  QLITE_AFF_NONE  
124d0 20 20 20 30 78 34 30 20 20 2f 2a 20 27 40 27 20     0x40  /* '@' 
124e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
124f0 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 30  E_AFF_BLOB     0
12500 78 34 31 20 20 2f 2a 20 27 41 27 20 2a 2f 0a 23  x41  /* 'A' */.#
12510 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
12520 46 5f 54 45 58 54 20 20 20 20 20 30 78 34 32 20  F_TEXT     0x42 
12530 20 2f 2a 20 27 42 27 20 2a 2f 0a 23 64 65 66 69   /* 'B' */.#defi
12540 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
12550 4d 45 52 49 43 20 20 30 78 34 33 20 20 2f 2a 20  MERIC  0x43  /* 
12560 27 43 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  'C' */.#define S
12570 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
12580 52 20 20 30 78 34 34 20 20 2f 2a 20 27 44 27 20  R  0x44  /* 'D' 
12590 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
125a0 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 30  E_AFF_REAL     0
125b0 78 34 35 20 20 2f 2a 20 27 45 27 20 2a 2f 0a 0a  x45  /* 'E' */..
125c0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
125d0 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
125e0 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
125f0 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
12600 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
12610 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
12620 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
12630 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
12640 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
12650 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66  y value..*/.#def
12660 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
12670 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a  ASK     0x47../*
12680 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
12690 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
126a0 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
126b0 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
126c0 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
126d0 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a  the affinity..**
126e0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e  .** The SQLITE_N
126f0 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61  OTNULL flag is a
12700 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
12710 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49  NULLEQ and JUMPI
12720 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75  FNULL..** It cau
12730 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20  ses an assert() 
12740 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65  to fire if eithe
12750 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63  r operand to a c
12760 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65  omparison.** ope
12770 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20  rator is NULL.  
12780 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63  It is added to c
12790 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ertain compariso
127a0 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a  n operators to.*
127b0 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65  * prove that the
127c0 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c   operands are al
127d0 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a  ways NOT NULL..*
127e0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
127f0 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78  _KEEPNULL     0x
12800 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76  08  /* Used by v
12810 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a  ector == or <> *
12820 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12830 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
12840 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  10  /* jumps if 
12850 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
12860 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
12870 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
12880 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53        0x20  /* S
12890 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
128a0 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
128b0 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
128c0 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
128d0 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
128e0 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65  NULL=NULL */.#de
128f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  fine SQLITE_NOTN
12900 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f  ULL      0x90  /
12910 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70  * Assert that op
12920 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72  erands are never
12930 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
12940 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
12950 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
12960 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
12970 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
12980 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
12990 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
129a0 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
129b0 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
129c0 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
129d0 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
129e0 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
129f0 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
12a00 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12a10 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
12a20 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
12a30 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
12a40 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
12a50 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12a60 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
12a70 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
12a80 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12a90 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
12aa0 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
12ab0 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
12ac0 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  table.** impleme
12ad0 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
12ae0 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
12af0 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
12b00 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61   between.** data
12b10 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
12b20 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
12b30 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
12b40 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a  emory database.*
12b50 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
12b60 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
12b70 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
12b80 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
12b90 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
12ba0 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
12bb0 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
12bc0 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
12bd0 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
12be0 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
12bf0 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
12c00 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
12c10 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12c20 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
12c30 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
12c40 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
12c50 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
12c60 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a  ess real tables.
12c70 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
12c80 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
12c90 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
12ca0 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
12cb0 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  rs.** transactio
12cc0 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
12cd0 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
12ce0 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
12cf0 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
12d00 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
12d10 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
12d20 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
12d30 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
12d40 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
12d50 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
12d60 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
12d70 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
12d80 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
12d90 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
12da0 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
12db0 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
12dc0 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
12dd0 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
12de0 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
12df0 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
12e00 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
12e10 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
12e20 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
12e30 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
12e40 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
12e50 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
12e60 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
12e70 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
12e80 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
12e90 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
12ea0 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
12eb0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
12ec0 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
12ed0 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
12ee0 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
12ef0 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
12f00 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
12f10 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
12f20 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
12f30 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
12f40 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
12f50 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
12f60 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
12f70 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
12f80 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
12f90 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
12fa0 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c  s are not.** del
12fb0 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
12fc0 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
12fd0 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
12fe0 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d  onnect()ed.** im
12ff0 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
13000 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
13010 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
13020 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
13030 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
13040 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
13050 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
13060 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
13070 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
13080 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
13090 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
130a0 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
130b0 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
130c0 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
130d0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
130e0 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
130f0 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
13100 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
13110 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
13120 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
13130 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
13140 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
13150 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
13160 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
13170 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
13180 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
13190 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
131a0 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
131b0 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
131c0 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
131d0 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
131e0 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
131f0 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
13200 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
13210 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
13220 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
13230 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
13240 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
13250 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a  s allocated by.*
13260 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
13270 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
13280 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
13290 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
132a0 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66  e.db as.** the f
132b0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
132c0 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
132d0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
132e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
132f0 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
13300 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
13310 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
13320 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
13330 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
13340 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
13350 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
13360 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
13370 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
13380 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
13390 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
133a0 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
133b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
133c0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
133d0 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
133e0 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
133f0 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
13400 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
13410 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
13420 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
13430 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
13440 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
13450 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
13460 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
13470 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
13480 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
13490 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
134a0 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
134b0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d  ./*.** The schem
134c0 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74  a for each SQL t
134d0 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73  able and view is
134e0 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
134f0 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20  memory.** by an 
13500 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
13510 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
13520 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ure..*/.struct T
13530 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
13540 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
13550 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
13560 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
13570 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
13580 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
13590 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
135a0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
135b0 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
135c0 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
135d0 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
135e0 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
135f0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
13600 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
13610 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
13620 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
13630 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
13640 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
13650 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
13660 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
13670 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
13680 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
13690 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
136a0 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
136b0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
136c0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  h column */.  Ex
136d0 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20  prList *pCheck; 
136e0 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20     /* All CHECK 
136f0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13710 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61        /*   ... a
13720 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75  lso used as colu
13730 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20  mn name list in 
13740 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20  a VIEW */.  int 
13750 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
13760 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70   /* Root BTree p
13770 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  age for this tab
13780 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62  le */.  u32 nTab
13790 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Ref;         /* 
137a0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
137b0 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
137c0 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61   */.  u32 tabFla
137d0 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  gs;        /* Ma
137e0 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
137f0 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  s */.  i16 iPKey
13800 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
13810 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
13820 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
13830 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  as the rowid */.
13840 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
13850 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13860 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
13870 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  his table */.  L
13880 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
13890 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
138a0 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
138b0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
138c0 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
138d0 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
138e0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
138f0 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
13900 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
13910 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
13920 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
13930 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
13940 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
13950 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
13960 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
13970 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b  */.#endif.  u8 k
13980 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
13990 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
139a0 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
139b0 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
139c0 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
139d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
139e0 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
139f0 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
13a00 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
13a10 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
13a20 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
13a30 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
13a40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
13a50 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
13a60 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
13a70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13a80 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
13a90 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
13aa0 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
13ab0 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65  g;  /* 0: module
13ac0 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74   1: schema 2: vt
13ad0 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72  ab name 3...: ar
13ae0 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  gs */.  VTable *
13af0 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
13b00 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
13b10 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
13b20 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
13b30 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
13b40 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
13b50 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
13b60 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
13b70 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
13b80 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
13b90 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13ba0 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
13bb0 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
13bc0 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
13bd0 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
13be0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
13bf0 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65  values for Table
13c00 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  .tabFlags..**.**
13c10 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70   TF_OOOHidden ap
13c20 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20  plies to tables 
13c30 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76  or view that hav
13c40 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
13c50 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c   that are.** fol
13c60 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64  lowed by non-hid
13c70 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78  den columns.  Ex
13c80 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20  ample:  "CREATE 
13c90 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20  VIRTUAL TABLE x 
13ca0 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61  USING.** vtab1(a
13cb0 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20   HIDDEN, b);".  
13cc0 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e  Since "b" is a n
13cd0 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
13ce0 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64   but "a" is hidd
13cf0 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f  en,.** the TF_OO
13d00 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74  OHidden attribut
13d10 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e  e would apply in
13d20 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63   this case.  Suc
13d30 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65  h tables require
13d40 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64  .** special hand
13d50 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45  ling during INSE
13d60 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a  RT processing..*
13d70 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61  /.#define TF_Rea
13d80 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30  donly        0x0
13d90 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  001    /* Read-o
13da0 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
13db0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
13dc0 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
13dd0 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65  x0002    /* An e
13de0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
13df0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
13e00 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
13e10 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  004    /* Table 
13e20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
13e30 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
13e40 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
13e50 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74  0x0008    /* Int
13e60 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
13e70 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
13e80 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
13e90 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20 20  HasStat1        
13ea0 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f  0x0010    /* nRo
13eb0 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d  wLogEst set from
13ec0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f   sqlite_stat1 */
13ed0 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
13ee0 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30 30  outRowid    0x00
13ef0 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
13f00 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
13f10 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
13f20 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
13f30 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30 20  leRowid  0x0040 
13f40 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69     /* No user-vi
13f50 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f  sible "rowid" co
13f60 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
13f70 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20  TF_OOOHidden    
13f80 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20     0x0080    /* 
13f90 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64  Out-of-Order hid
13fa0 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23  den columns */.#
13fb0 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55  define TF_StatsU
13fc0 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30  sed       0x0100
13fd0 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61      /* Query pla
13fe0 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61  nner decisions a
13ff0 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20  ffected by.     
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14020 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f  ** Index.aiRowLo
14030 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f  gEst[] values */
14040 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e  .#define TF_HasN
14050 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32  otNull      0x02
14060 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  00    /* Contain
14070 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  s NOT NULL const
14080 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
14090 65 20 54 46 5f 53 68 61 64 6f 77 20 20 20 20 20  e TF_Shadow     
140a0 20 20 20 20 20 30 78 30 34 30 30 20 20 20 20 2f       0x0400    /
140b0 2a 20 54 72 75 65 20 66 6f 72 20 61 20 73 68 61  * True for a sha
140c0 64 6f 77 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  dow table */../*
140d0 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
140e0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
140f0 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
14100 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
14110 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
14120 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
14130 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
14140 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
14150 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
14160 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
14170 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
14180 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
14190 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
141a0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
141b0 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
141c0 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72   ((X)->nModuleAr
141d0 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  g).#else.#  defi
141e0 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
141f0 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f       0.#endif../
14200 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
14210 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f  etermine if a co
14220 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20  lumn is hidden. 
14230 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
14240 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c  nColumn().** onl
14250 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d  y works for non-
14260 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28  virtual tables (
14270 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20  ordinary tables 
14280 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20 69  and views) and i
14290 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73  s.** always fals
142a0 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f  e unless SQLITE_
142b0 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
142c0 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64  LUMNS is defined
142d0 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64  .  The.** IsHidd
142e0 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f  enColumn() macro
142f0 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70   is general purp
14300 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ose..*/.#if defi
14310 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
14320 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
14330 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
14340 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
14350 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c        (((X)->col
14360 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
14370 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64  HIDDEN)!=0).#  d
14380 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
14390 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
143a0 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
143b0 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
143c0 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66  )!=0).#elif !def
143d0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
143e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
143f0 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
14400 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
14410 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
14420 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
14430 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
14440 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
14450 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
14460 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
14470 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
14480 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65           0.#  de
14490 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
144a0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
144b0 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65  .#endif.../* Doe
144c0 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65  s the table have
144d0 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66   a rowid */.#def
144e0 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20  ine HasRowid(X) 
144f0 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
14500 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74  ags & TF_Without
14510 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69  Rowid)==0).#defi
14520 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28  ne VisibleRowid(
14530 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61  X) (((X)->tabFla
14540 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c  gs & TF_NoVisibl
14550 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  eRowid)==0)../*.
14560 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
14570 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
14580 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
14590 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
145a0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
145b0 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
145c0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
145d0 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
145e0 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
145f0 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
14600 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
14610 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
14620 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
14630 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
14640 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
14650 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
14660 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
14670 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
14680 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
14690 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
146a0 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
146b0 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
146c0 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
146d0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
146e0 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
146f0 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
14700 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
14710 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
14720 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
14730 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
14740 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
14750 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
14760 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20  le is "ex2"..** 
14770 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73  Equivalent names
14780 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d  :.**.**     from
14790 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d  -table == child-
147a0 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74  table.**       t
147b0 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e  o-table == paren
147c0 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61  t-table.**.** Ea
147d0 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
147e0 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
147f0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
14800 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
14810 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
14820 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
14830 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
14840 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
14850 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
14860 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
14870 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
14880 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
14890 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
148a0 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a  not checked..**.
148b0 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61  ** The list of a
148c0 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63  ll parents for c
148d0 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20  hild Table X is 
148e0 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e  held at X.pFKey.
148f0 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  .**.** A list of
14900 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f   all children fo
14910 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  r a table named 
14920 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e  Z (which might n
14930 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a  ot even exist).*
14940 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68  * is held in Sch
14950 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74  ema.fkeyHash wit
14960 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20  h a hash key of 
14970 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  Z..*/.struct FKe
14980 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
14990 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
149a0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
149b0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
149c0 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
149d0 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
149e0 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b  rom;  /* Next FK
149f0 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ey with the same
14a00 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20   in pFrom. Next 
14a10 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20  parent of pFrom 
14a20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
14a30 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
14a40 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
14a50 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
14a60 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
14a70 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
14a80 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
14a90 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e   the same zTo. N
14aa0 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f  ext child of zTo
14ab0 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  . */.  FKey *pPr
14ac0 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
14ad0 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61  ious with the sa
14ae0 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20  me zTo */.  int 
14af0 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  nCol;         /*
14b00 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
14b10 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a  ns in this key *
14b20 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33  /.  /* EV: R-303
14b30 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38  23-21917 */.  u8
14b40 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20   isDeferred;    
14b50 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
14b60 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
14b70 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
14b80 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
14b90 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
14ba0 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
14bb0 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
14bc0 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
14bd0 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
14be0 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
14bf0 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72  ;/* Triggers for
14c00 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f   aAction[] actio
14c10 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ns */.  struct s
14c20 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a  ColMap {      /*
14c30 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
14c40 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
14c50 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
14c60 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
14c70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
14c80 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
14c90 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
14ca0 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
14cb0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
14cc0 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
14cd0 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d  If NULL use PRIM
14ce0 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
14cf0 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  Col[1];         
14d00 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
14d10 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c  for each of nCol
14d20 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a   columns */.};..
14d30 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70  /*.** SQLite sup
14d40 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65  ports many diffe
14d50 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73  rent ways to res
14d60 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  olve a constrain
14d70 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c  t.** error.  ROL
14d80 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67  LBACK processing
14d90 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f   means that a co
14da0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
14db0 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65  on.** causes the
14dc0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
14dd0 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e  ocess to fail an
14de0 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  d for the curren
14df0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
14e00 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
14e10 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65  ck.  ABORT proce
14e20 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20  ssing means the 
14e30 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
14e40 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e  cess.** fails an
14e50 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e  d any prior chan
14e60 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e  ges from that on
14e70 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
14e80 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62  backed out,.** b
14e90 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ut the transacti
14ea0 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64  on is not rolled
14eb0 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f   back.  FAIL pro
14ec0 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
14ed0 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74  at.** the operat
14ee0 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
14ef0 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e  stops and return
14f00 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  s an error code.
14f10 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63    But prior.** c
14f20 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68  hanges due to th
14f30 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
14f40 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20   are not backed 
14f50 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62  out and no rollb
14f60 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20  ack.** occurs.  
14f70 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61  IGNORE means tha
14f80 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  t the particular
14f90 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64   row that caused
14fa0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a   the constraint.
14fb0 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20  ** error is not 
14fc0 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
14fd0 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  ted.  Processing
14fe0 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
14ff0 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  o error.** is re
15000 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45  turned.  REPLACE
15010 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65   means that pree
15020 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
15030 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65   rows that cause
15040 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f  d.** a UNIQUE co
15050 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
15060 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73  on are removed s
15070 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69  o that the new i
15080 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61  nsert or.** upda
15090 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20  te can proceed. 
150a0 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
150b0 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
150c0 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a  or is reported..
150d0 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20  **.** RESTRICT, 
150e0 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53  SETNULL, and CAS
150f0 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70  CADE actions app
15100 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69  ly only to forei
15110 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54  gn keys..** REST
15120 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65  RICT is the same
15130 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d   as ABORT for IM
15140 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20  MEDIATE foreign 
15150 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20  keys and the.** 
15160 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b  same as ROLLBACK
15170 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65   for DEFERRED ke
15180 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61  ys.  SETNULL mea
15190 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65  ns that the fore
151a0 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65  ign.** key is se
151b0 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43  t to NULL.  CASC
151c0 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ADE means that a
151d0 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
151e0 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65  E of the.** refe
151f0 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77  renced table row
15200 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69   is propagated i
15210 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74  nto the row that
15220 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f   holds the.** fo
15230 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  reign key..**.**
15240 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
15250 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
15260 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
15270 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
15280 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
15290 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
152a0 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
152b0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
152c0 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
152d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
152e0 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
152f0 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
15300 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
15310 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
15320 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
15330 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
15340 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
15350 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
15360 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
15370 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
15380 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
15390 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
153a0 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
153b0 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
153c0 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
153d0 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
153e0 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
153f0 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
15400 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
15410 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
15420 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
15430 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
15440 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
15450 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
15460 6e 65 20 4f 45 5f 55 70 64 61 74 65 20 20 20 36  ne OE_Update   6
15470 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61 73     /* Process as
15480 20 61 20 44 4f 20 55 50 44 41 54 45 20 69 6e 20   a DO UPDATE in 
15490 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23 64 65  an upsert */.#de
154a0 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74  fine OE_Restrict
154b0 20 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74   7   /* OE_Abort
154c0 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20   for IMMEDIATE, 
154d0 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20  OE_Rollback for 
154e0 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66  DEFERRED */.#def
154f0 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20  ine OE_SetNull  
15500 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  8   /* Set the f
15510 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
15520 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   to NULL */.#def
15530 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20  ine OE_SetDflt  
15540 39 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  9   /* Set the f
15550 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
15560 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
15570 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61  */.#define OE_Ca
15580 73 63 61 64 65 20 20 31 30 20 20 2f 2a 20 43 61  scade  10  /* Ca
15590 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65  scade the change
155a0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
155b0 44 65 66 61 75 6c 74 20 20 31 31 20 20 2f 2a 20  Default  11  /* 
155c0 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
155d0 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
155e0 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
155f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
15600 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
15610 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
15620 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
15630 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
15640 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
15650 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
15660 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f  ontrol the.** co
15670 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
15680 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
15690 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
156a0 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
156b0 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
156c0 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
156d0 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
156e0 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
156f0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
15700 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
15710 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
15720 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
15730 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
15740 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
15750 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
15760 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
15770 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
15780 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
15790 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
157a0 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
157b0 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
157c0 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
157d0 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
157e0 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20 20  6 nKeyField;    
157f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
15800 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
15810 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
15820 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20 20   nAllField;     
15830 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e   /* Total column
15840 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65 79  s, including key
15850 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f 0a   plus others */.
15860 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
15870 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
15880 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
15890 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 46   */.  u8 *aSortF
158a0 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 53 6f 72  lags;     /* Sor
158b0 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
158c0 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
158d0 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
158e0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
158f0 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
15900 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
15910 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20   */.};..#define 
15920 4b 45 59 49 4e 46 4f 5f 4f 52 44 45 52 5f 44 45  KEYINFO_ORDER_DE
15930 53 43 20 20 20 20 30 78 30 31 0a 23 64 65 66 69  SC    0x01.#defi
15940 6e 65 20 4b 45 59 49 4e 46 4f 5f 4f 52 44 45 52  ne KEYINFO_ORDER
15950 5f 42 49 47 4e 55 4c 4c 20 30 78 30 32 0a 0a 2f  _BIGNULL 0x02../
15960 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74  *.** This object
15970 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
15980 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20 70  which has been p
15990 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
159a0 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65  ndividual.** fie
159b0 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72  lds, for the pur
159c0 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61  poses of doing a
159d0 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a   comparison..**.
159e0 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
159f0 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
15a00 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
15a10 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
15a20 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
15a30 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
15a40 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
15a50 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
15a60 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
15a70 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
15a80 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
15a90 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
15aa0 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
15ab0 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
15ac0 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
15ad0 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
15ae0 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
15af0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
15b00 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  e..**.** An inst
15b10 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
15b20 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61 20  ect serves as a 
15b30 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20  "key" for doing 
15b40 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61  a search on.** a
15b50 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20  n index b+tree. 
15b60 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20  The goal of the 
15b70 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e  search is to fin
15b80 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  d the entry that
15b90 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f  .** is closed to
15ba0 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69 62   the key describ
15bb0 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63  ed by this objec
15bc0 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20  t.  This object 
15bd0 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75  might hold.** ju
15be0 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
15bf0 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d  he key.  The num
15c00 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73  ber of fields is
15c10 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65   given by.** pKe
15c20 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a  yInfo->nField..*
15c30 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
15c40 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74 68  r2 fields are th
15c50 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75  e values to retu
15c60 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20 69  rn if this key i
15c70 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f  s less than.** o
15c80 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 61  r greater than a
15c90 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72 65   key in the btre
15ca0 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
15cb0 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d    These are norm
15cc0 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b  ally.** -1 and +
15cd0 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  1 respectively, 
15ce0 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76  but might be inv
15cf0 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20  erted to +1 and 
15d00 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65 65  -1 if the b-tree
15d10 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f  .** is in DESC o
15d20 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rder..**.** The 
15d30 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
15d40 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c  unctions actuall
15d50 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74  y return default
15d60 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66 69  _rc when they fi
15d70 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20  nd.** an equals 
15d80 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66  comparison.  def
15d90 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d  ault_rc can be -
15da0 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66  1, 0, or +1.  If
15db0 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75   there are.** mu
15dc0 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69  ltiple entries i
15dd0 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69 74  n the b-tree wit
15de0 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28  h the same key (
15df0 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e  when only lookin
15e00 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73  g.** at the firs
15e10 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  t pKeyInfo->nFie
15e20 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75  lds,) then defau
15e30 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74  lt_rc can be set
15e40 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75   to -1 to.** cau
15e50 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
15e60 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d   find the last m
15e70 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63  atch, or +1 to c
15e80 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
15e90 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66  to.** find the f
15ea0 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  irst match..**.*
15eb0 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
15ec0 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77  ison functions w
15ed0 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74  ill set eqSeen t
15ee0 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65  o true if they e
15ef0 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65  ver.** get and e
15f00 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65  qual results whe
15f10 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73  n comparing this
15f20 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20   structure to a 
15f30 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a  b-tree record..*
15f40 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72  * When default_r
15f50 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68  c!=0, the search
15f60 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e   might end up on
15f70 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
15f80 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72  diately.** befor
15f90 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  e the first matc
15fa0 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  h or immediately
15fb0 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20   after the last 
15fc0 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65  match.  The.** e
15fd0 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c  qSeen field will
15fe0 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65   indicate whethe
15ff0 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63  r or not an exac
16000 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69  t match exists i
16010 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e  n the.** b-tree.
16020 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
16030 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
16040 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
16050 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
16060 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
16070 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d  formation */.  M
16080 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
16090 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
160a0 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
160b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
160c0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
160d0 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
160e0 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
160f0 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
16100 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
16110 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
16120 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
16130 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
16140 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
16150 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
16160 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31  OMEM) */.  i8 r1
16170 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
16180 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
16190 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68 73 29  n if (lhs < rhs)
161a0 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20   */.  i8 r2;    
161b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
161c0 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
161d0 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20  (lhs > rhs) */. 
161e0 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20   u8 eqSeen;     
161f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
16200 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70  an equality comp
16210 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20  arison has been 
16220 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a  seen */.};.../*.
16230 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
16240 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
16250 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
16260 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
16270 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
16280 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
16290 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
162a0 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
162b0 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
162c0 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
162d0 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
162e0 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
162f0 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
16300 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
16310 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
16320 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
16330 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
16340 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
16350 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
16360 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
16370 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
16380 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
16390 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
163a0 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
163b0 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
163c0 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
163d0 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
163e0 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
163f0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
16400 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
16410 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
16420 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
16430 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
16440 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
16450 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
16460 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
16470 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
16480 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
16490 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 0a  ==2 because the.
164a0 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
164b0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
164c0 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
164d0 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
164e0 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
164f0 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
16500 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
16510 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
16520 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
16530 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
16540 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
16550 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
16560 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
16570 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
16580 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
16590 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
165a0 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
165b0 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
165c0 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
165d0 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
165e0 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
165f0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
16600 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
16610 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
16620 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
16630 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
16640 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
16650 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
16660 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
16670 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74  ution.** algorit
16680 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
16690 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
166a0 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
166b0 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
166c0 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a  ** element..**.*
166d0 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20  * While parsing 
166e0 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  a CREATE TABLE o
166f0 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  r CREATE INDEX s
16700 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65  tatement in orde
16710 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65  r to.** generate
16720 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f   VDBE code (as o
16730 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e  pposed to parsin
16740 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20  g one read from 
16750 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  an sqlite_master
16760 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72  .** table as par
16770 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20  t of parsing an 
16780 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
16790 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73  e schema), trans
167a0 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a  ient instances.*
167b0 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
167c0 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74  ure may be creat
167d0 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
167e0 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20   the Index.tnum 
167f0 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75  variable is.** u
16800 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
16810 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44   address of a VD
16820 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  BE instruction, 
16830 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70  not a database p
16840 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69  age.** number (i
16850 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64  t cannot - the d
16860 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20  atabase page is 
16870 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e  not allocated un
16880 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20  til the VDBE.** 
16890 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75  program is execu
168a0 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72  ted). See conver
168b0 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54  tToWithoutRowidT
168c0 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69  able() for detai
168d0 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  ls..*/.struct In
168e0 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
168f0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
16900 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
16910 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
16920 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
16930 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
16940 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
16950 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
16960 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
16970 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
16980 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
16990 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
169a0 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
169b0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
169c0 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
169d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
169e0 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
169f0 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
16a00 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
16a10 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
16a20 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
16a30 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
16a40 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
16a50 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
16a60 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
16a70 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
16a80 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
16a90 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
16aa0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
16ab0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
16ac0 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
16ad0 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
16ae0 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
16af0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
16b00 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
16b10 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f  lse==ASC */.  co
16b20 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  nst char **azCol
16b30 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  l;     /* Array 
16b40 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
16b50 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
16b60 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
16b70 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
16b80 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
16b90 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
16ba0 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70  indices */.  Exp
16bb0 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b  rList *aColExpr;
16bc0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
16bd0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
16be0 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
16bf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
16c00 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
16c10 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
16c20 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
16c30 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
16c40 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
16c50 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
16c60 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
16c70 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
16c80 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16c90 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
16ca0 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
16cb0 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
16cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16cd0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
16ce0 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
16cf0 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
16d00 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
16d10 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
16d20 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
16d30 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
16d40 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
16d50 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
16d60 30 3a 4e 6f 72 6d 61 6c 20 31 3a 55 4e 49 51 55  0:Normal 1:UNIQU
16d70 45 2c 20 32 3a 50 52 49 4d 41 52 59 20 4b 45 59  E, 2:PRIMARY KEY
16d80 2c 20 33 3a 49 50 4b 20 2a 2f 0a 20 20 75 6e 73  , 3:IPK */.  uns
16d90 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64  igned bUnordered
16da0 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69  :1;   /* Use thi
16db0 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f  s index for == o
16dc0 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c  r IN queries onl
16dd0 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  y */.  unsigned 
16de0 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20  uniqNotNull:1;  
16df0 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55  /* True if UNIQU
16e00 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66  E and NOT NULL f
16e10 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a  or all columns *
16e20 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52  /.  unsigned isR
16e30 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20  esized:1;    /* 
16e40 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e  True if resizeIn
16e50 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20  dexObject() has 
16e60 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20  been called */. 
16e70 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65   unsigned isCove
16e80 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ring:1;   /* Tru
16e90 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20 63  e if this is a c
16ea0 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f  overing index */
16eb0 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b  .  unsigned noSk
16ec0 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44  ipScan:1;   /* D
16ed0 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65  o not try to use
16ee0 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72   skip-scan if tr
16ef0 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ue */.  unsigned
16f00 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20 20 20   hasStat1:1;    
16f10 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73 74 20   /* aiRowLogEst 
16f20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72 6f 6d  values come from
16f30 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f   sqlite_stat1 */
16f40 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 4e 6f 51  .  unsigned bNoQ
16f50 75 65 72 79 3a 31 3b 20 20 20 20 20 2f 2a 20 44  uery:1;     /* D
16f60 6f 20 6e 6f 74 20 75 73 65 20 74 68 69 73 20 69  o not use this i
16f70 6e 64 65 78 20 74 6f 20 6f 70 74 69 6d 69 7a 65  ndex to optimize
16f80 20 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e   queries */.  un
16f90 73 69 67 6e 65 64 20 62 41 73 63 4b 65 79 42 75  signed bAscKeyBu
16fa0 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
16fb0 66 20 74 68 65 20 62 62 61 37 62 36 39 66 39 38  f the bba7b69f98
16fc0 34 39 62 35 62 66 20 62 75 67 20 61 70 70 6c 69  49b5bf bug appli
16fd0 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  es */.#ifdef SQL
16fe0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
16ff0 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
17000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17010 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
17020 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
17030 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43  /.  int nSampleC
17040 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ol;          /* 
17050 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d  Size of IndexSam
17060 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73  ple.anEq[] and s
17070 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  o on */.  tRowcn
17080 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20  t *aAvgEq;      
17090 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45     /* Average nE
170a0 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79  q values for key
170b0 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65  s not in aSample
170c0 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c   */.  IndexSampl
170d0 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f  e *aSample;    /
170e0 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  * Samples of the
170f0 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a   left-most key *
17100 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
17110 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  owEst;       /* 
17120 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
17130 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74  stat1 data for t
17140 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74  his index */.  t
17150 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b  Rowcnt nRowEst0;
17160 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c          /* Non-l
17170 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65  ogarithmic numbe
17180 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
17190 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66   index */.#endif
171a0 0a 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f  .  Bitmask colNo
171b0 74 49 64 78 65 64 3b 20 20 20 20 20 2f 2a 20 30  tIdxed;     /* 0
171c0 20 66 6f 72 20 75 6e 69 6e 64 65 78 65 64 20 63   for unindexed c
171d0 6f 6c 75 6d 6e 73 20 69 6e 20 70 54 61 62 20 2a  olumns in pTab *
171e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
171f0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49  wed values for I
17200 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a  ndex.idxType.*/.
17210 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
17220 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20  DXTYPE_APPDEF   
17230 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65     0   /* Create
17240 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49  d using CREATE I
17250 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
17260 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55  SQLITE_IDXTYPE_U
17270 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f  NIQUE      1   /
17280 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55  * Implements a U
17290 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
172a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
172b0 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
172c0 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73  RYKEY  2   /* Is
172d0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
172e0 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a   for the table *
172f0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
17300 5f 49 44 58 54 59 50 45 5f 49 50 4b 20 20 20 20  _IDXTYPE_IPK    
17310 20 20 20 20 20 33 20 20 20 2f 2a 20 49 4e 54 45       3   /* INTE
17320 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
17330 69 6e 64 65 78 20 2a 2f 0a 0a 2f 2a 20 52 65 74  index */../* Ret
17340 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
17350 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59  x X is a PRIMARY
17360 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64   KEY index */.#d
17370 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b  efine IsPrimaryK
17380 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29  eyIndex(X)  ((X)
17390 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54  ->idxType==SQLIT
173a0 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
173b0 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e  YKEY)../* Return
173c0 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
173d0 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64   is a UNIQUE ind
173e0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
173f0 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20  UniqueIndex(X)  
17400 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f      ((X)->onErro
17410 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20  r!=OE_None)../* 
17420 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75  The Index.aiColu
17430 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20  mn[] values are 
17440 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76  normally positiv
17450 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a  e integer.  But.
17460 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d  ** there are som
17470 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  e negative value
17480 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65 63  s that have spec
17490 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a  ial meaning:.*/.
174a0 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44  #define XN_ROWID
174b0 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a       (-1)     /*
174c0 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
174d0 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  is the rowid */.
174e0 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20  #define XN_EXPR 
174f0 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a       (-2)     /*
17500 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
17510 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
17520 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
17530 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e  sample stored in
17540 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
17550 34 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  4 table is repre
17560 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
17570 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
17580 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
17590 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e  pe.  See documen
175a0 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f  tation at the to
175b0 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c  p of the.** anal
175c0 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c  yze.c source fil
175d0 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
175e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
175f0 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d  .struct IndexSam
17600 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b  ple {.  void *p;
17610 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
17620 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20  nter to sampled 
17630 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
17640 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
17650 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20   Size of record 
17660 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52  in bytes */.  tR
17670 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20  owcnt *anEq;    
17680 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
17690 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  f rows where the
176a0 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73   key equals this
176b0 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
176c0 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f  wcnt *anLt;    /
176d0 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
176e0 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20   rows where key 
176f0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  is less than thi
17700 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
17710 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20  owcnt *anDLt;   
17720 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
17730 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20  f distinct keys 
17740 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
17750 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ample */.};../*.
17760 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
17770 65 73 20 74 6f 20 75 73 65 20 77 69 74 68 69 6e  es to use within
17780 20 74 68 65 20 66 6c 61 67 73 20 61 72 67 75 6d   the flags argum
17790 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 47 65  ent to sqlite3Ge
177a0 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65  tToken()..*/.#de
177b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45  fine SQLITE_TOKE
177c0 4e 5f 51 55 4f 54 45 44 20 20 20 20 30 78 31 20  N_QUOTED    0x1 
177d0 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20 71 75  /* Token is a qu
177e0 6f 74 65 64 20 69 64 65 6e 74 69 66 69 65 72 2e  oted identifier.
177f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
17800 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44  TE_TOKEN_KEYWORD
17810 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e 20     0x2 /* Token 
17820 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20 2a 2f  is a keyword. */
17830 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
17840 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
17850 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
17860 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
17870 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
17880 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
17890 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
178a0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
178b0 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
178c0 20 74 68 61 74 20 22 7a 22 20 70 6f 69 6e 74 73   that "z" points
178d0 20 74 6f 20 69 73 20 6f 77 6e 65 64 20 62 79 20   to is owned by 
178e0 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2e 20 20  other objects.  
178f0 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68 61  Take care.** tha
17900 74 20 74 68 65 20 6f 77 6e 65 72 20 6f 66 20 74  t the owner of t
17910 68 65 20 22 7a 22 20 73 74 72 69 6e 67 20 64 6f  he "z" string do
17920 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61 74  es not deallocat
17930 65 20 74 68 65 20 73 74 72 69 6e 67 20 62 65 66  e the string bef
17940 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65 6e  ore.** the Token
17950 20 67 6f 65 73 20 6f 75 74 20 6f 66 20 73 63 6f   goes out of sco
17960 70 65 21 20 20 56 65 72 79 20 6f 66 74 65 6e 2c  pe!  Very often,
17970 20 74 68 65 20 22 7a 22 20 70 6f 69 6e 74 73 20   the "z" points 
17980 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a  to some place.**
17990 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
179a0 66 20 74 68 65 20 50 61 72 73 65 2e 7a 53 71 6c  f the Parse.zSql
179b0 20 74 65 78 74 2e 20 20 42 75 74 20 69 74 20 6d   text.  But it m
179c0 69 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74 20  ight also point 
179d0 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63 20 73  to a.** static s
179e0 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74  tring..*/.struct
179f0 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
17a00 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a   char *z;     /*
17a10 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
17a20 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
17a30 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
17a40 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20  nsigned int n;  
17a50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
17a60 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
17a70 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
17a80 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
17a90 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
17aa0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
17ab0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
17ac0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
17ad0 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
17ae0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
17af0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17b00 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
17b10 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
17b20 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
17b30 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
17b40 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
17b50 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
17b60 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
17b70 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
17b80 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
17b90 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
17ba0 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
17bb0 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
17bc0 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
17bd0 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
17be0 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
17bf0 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
17c00 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
17c10 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
17c20 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
17c30 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
17c40 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
17c50 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
17c60 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
17c70 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
17c80 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
17c90 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
17ca0 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
17cb0 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
17cc0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
17cd0 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
17ce0 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
17cf0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
17d00 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
17d10 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
17d20 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d40 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
17d50 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
17d60 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
17d70 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
17d80 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
17d90 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
17da0 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
17db0 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
17dc0 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
17dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17de0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
17df0 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
17e00 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
17e10 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
17e20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
17e30 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
17e40 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
17e50 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20  sortingIdxPTab; 
17e60 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17e70 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74  mber of pseudo-t
17e80 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  able */.  int nS
17e90 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
17ea0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
17eb0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
17ec0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
17ed0 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65   int mnReg, mxRe
17ee0 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67  g;       /* Rang
17ef0 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  e of registers a
17f00 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
17f10 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20  l and aFunc */. 
17f20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
17f30 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
17f40 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
17f50 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
17f60 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
17f70 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
17f80 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
17f90 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
17fa0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
17fb0 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
17fc0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
17fd0 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
17fe0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
17ff0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
18000 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
18010 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
18020 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
18030 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
18040 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
18050 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
18060 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
18070 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
18080 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
18090 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
180a0 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
180b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
180c0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
180d0 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
180e0 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
180f0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
18100 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
18110 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
18120 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
18130 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
18140 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18150 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
18160 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
18170 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74    int nAccumulat
18180 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  or;       /* Num
18190 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ber of columns t
181a0 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68  hat show through
181b0 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   to the output..
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64            ** Add
181e0 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20  itional columns 
181f0 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73  are used only as
18200 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20   parameters to. 
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18220 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72           ** aggr
18230 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
18240 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
18250 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20  nfo_func {   /* 
18260 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61  For each aggrega
18270 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  te function */. 
18280 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
18290 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
182a0 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69  xpression encodi
182b0 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ng the function 
182c0 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  */.    FuncDef *
182d0 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  pFunc;          
182e0 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65  /* The aggregate
182f0 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
18300 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  entation */.    
18310 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
18320 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
18330 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
18340 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
18350 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ator */.    int 
18360 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  iDistinct;      
18370 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61       /* Ephemera
18380 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20  l table used to 
18390 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54  enforce DISTINCT
183a0 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a   */.  } *aFunc;.
183b0 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20    int nFunc;    
183c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
183d0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
183e0 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a  n aFunc[] */.};.
183f0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
18400 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73  ype ynVar is a s
18410 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65  igned integer, e
18420 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20  ither 16-bit or 
18430 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c  32-bit..** Usual
18440 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73  ly it is 16-bits
18450 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45  .  But if SQLITE
18460 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
18470 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a  MBER is greater.
18480 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65  ** than 32767 we
18490 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74   have to make it
184a0 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74   32-bit.  16-bit
184b0 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65   is preferred be
184c0 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73  cause.** it uses
184d0 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20   less memory in 
184e0 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c  the Expr object,
184f0 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20   which is a big 
18500 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69  memory user.** i
18510 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c  n systems with l
18520 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20  ots of prepared 
18530 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64  statements.  And
18540 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   few application
18550 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74  s.** need more t
18560 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20  han about 10 or 
18570 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42  20 variables.  B
18580 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20  ut some extreme 
18590 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f  users want.** to
185a0 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73   have prepared s
185b0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f  tatements with o
185c0 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62  ver 32767 variab
185d0 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65  les, and for the
185e0 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20  m.** the option 
185f0 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74  is available (at
18600 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a   compile-time)..
18610 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
18620 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
18630 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66  R<=32767.typedef
18640 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73   i16 ynVar;.#els
18650 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e  e.typedef int yn
18660 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Var;.#endif../*.
18670 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
18680 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
18690 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
186a0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
186b0 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
186c0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
186d0 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
186e0 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61  . The integer pa
186f0 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73  rser token codes
18700 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61   are reused.** a
18710 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20  s opcodes here. 
18720 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
18730 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20   parser defines 
18740 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69  TK_GE to be an i
18750 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72  nteger.** code r
18760 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
18770 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54  ">=" operator. T
18780 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72  his same integer
18790 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a   code is reused.
187a0 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ** to represent 
187b0 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e  the greater-than
187c0 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65  -or-equal-to ope
187d0 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70  rator in the exp
187e0 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e  ression.** tree.
187f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
18800 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
18810 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49  QL literal (TK_I
18820 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54  NTEGER, TK_FLOAT
18830 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72  , TK_BLOB,.** or
18840 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
18850 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
18860 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
18870 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
18880 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
18890 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
188a0 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
188b0 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
188c0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
188d0 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61  e.** variable na
188e0 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  me. Finally, if 
188f0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18900 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
18910 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c  n (TK_FUNCTION),
18920 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  .** then Expr.to
18930 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
18940 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
18950 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  ction..**.** Exp
18960 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70  r.pRight and Exp
18970 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20  r.pLeft are the 
18980 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73  left and right s
18990 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66  ubexpressions of
189a0 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65   a.** binary ope
189b0 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72  rator. Either or
189c0 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c   both may be NUL
189d0 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e  L..**.** Expr.x.
189e0 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20  pList is a list 
189f0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20  of arguments if 
18a00 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18a10 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
18a20 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70  n,.** a CASE exp
18a30 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e  ression or an IN
18a40 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
18a50 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
18a60 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22  N (<y>, <z>...)"
18a70 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c  ..** Expr.x.pSel
18a80 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74  ect is used if t
18a90 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
18aa0 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72   a sub-select or
18ab0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
18ac0 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c  f.** the form "<
18ad0 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20  lhs> IN (SELECT 
18ae0 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50  ...)". If the EP
18af0 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69  _xIsSelect bit i
18b00 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20  s set in the.** 
18b10 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
18b20 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65   then Expr.x.pSe
18b30 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f  lect is valid. O
18b40 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78  therwise, Expr.x
18b50 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c  .pList is.** val
18b60 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70  id..**.** An exp
18b70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
18b80 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20  orm ID or ID.ID 
18b90 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75  refers to a colu
18ba0 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a  mn in a table..*
18bb0 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65  * For such expre
18bc0 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20  ssions, Expr.op 
18bd0 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c  is set to TK_COL
18be0 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61  UMN and Expr.iTa
18bf0 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e  ble is.** the in
18c00 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d  teger cursor num
18c10 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75  ber of a VDBE cu
18c20 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
18c30 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a   that table and.
18c40 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  ** Expr.iColumn 
18c50 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
18c60 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65  mber for the spe
18c70 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49  cific column.  I
18c80 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73  f the.** express
18c90 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61  ion is used as a
18ca0 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67   result in an ag
18cb0 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20  gregate SELECT, 
18cc0 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
18cd0 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64  e is also stored
18ce0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67   in the Expr.iAg
18cf0 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
18d00 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61  aggregate so tha
18d10 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61  t.** it can be a
18d20 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c  ccessed after al
18d30 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65  l aggregates are
18d40 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a   computed..**.**
18d50 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
18d60 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64  on is an unbound
18d70 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72   variable marker
18d80 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72   (a question mar
18d90 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27  k.** character '
18da0 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ?' in the origin
18db0 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65  al SQL) then the
18dc0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c   Expr.iTable hol
18dd0 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  ds the index.** 
18de0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
18df0 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  variable..**.** 
18e00 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
18e10 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20  n is a subquery 
18e20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  then Expr.iColum
18e30 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  n holds an integ
18e40 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e  er.** register n
18e50 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  umber containing
18e60 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
18e70 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66  he subquery.  If
18e80 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79   the.** subquery
18e90 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e   gives a constan
18ea0 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69  t result, then i
18eb0 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66  Table is -1.  If
18ec0 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a   the subquery.**
18ed0 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65   gives a differe
18ee0 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66  nt answer at dif
18ef0 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72  ferent times dur
18f00 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72  ing statement pr
18f10 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e  ocessing.** then
18f20 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61   iTable is the a
18f30 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72  ddress of a subr
18f40 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70  outine that comp
18f50 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72  utes the subquer
18f60 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  y..**.** If the 
18f70 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20  Expr is of type 
18f80 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  OP_Column, and t
18f90 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73  he table it is s
18fa0 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a  electing from.**
18fb0 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65   is a disk table
18fc0 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20   or the "old.*" 
18fd0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68  pseudo-table, th
18fe0 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74  en pTab points t
18ff0 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  o the.** corresp
19000 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66  onding table def
19010 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  inition..**.** A
19020 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a  LLOCATION NOTES:
19030 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65  .**.** Expr obje
19040 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f  cts can use a lo
19050 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  t of memory spac
19060 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63  e in database sc
19070 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c  hema.  To.** hel
19080 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20  p reduce memory 
19090 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f  requirements, so
190a0 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20  metimes an Expr 
190b0 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a  object will be.*
190c0 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e  * truncated.  An
190d0 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
190e0 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
190f0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f   allocations, so
19100 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f  metimes.** two o
19110 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65  r more Expr obje
19120 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  cts will be stor
19130 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d  ed in a single m
19140 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
19150 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69  ,.** together wi
19160 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73  th Expr.zToken s
19170 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  trings..**.** If
19180 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
19190 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  and EP_TokenOnly
191a0 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77   flags are set w
191b0 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f  hen.** an Expr o
191c0 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74  bject is truncat
191d0 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64  ed.  When EP_Red
191e0 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65  uced is set, the
191f0 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69  n all.** the chi
19200 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ld Expr objects 
19210 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66  in the Expr.pLef
19220 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68  t and Expr.pRigh
19230 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72  t subtrees.** ar
19240 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
19250 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f  in the same memo
19260 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ry allocation.  
19270 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  Note, however, t
19280 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72  hat.** the subtr
19290 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c  ees in Expr.x.pL
192a0 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53  ist or Expr.x.pS
192b0 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73  elect are always
192c0 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61   separately.** a
192d0 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64  llocated, regard
192e0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
192f0 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65  or not EP_Reduce
19300 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72  d is set..*/.str
19310 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20  uct Expr {.  u8 
19320 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
19330 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e      /* Operation
19340 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68   performed by th
19350 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61  is node */.  cha
19360 72 20 61 66 66 45 78 70 72 3b 20 20 20 20 20 20  r affExpr;      
19370 20 20 20 20 2f 2a 20 61 66 66 69 6e 69 74 79 2c      /* affinity,
19380 20 6f 72 20 52 41 49 53 45 20 74 79 70 65 20 2a   or RAISE type *
19390 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
193a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
193b0 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
193c0 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
193d0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
193e0 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
193f0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
19400 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
19410 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
19420 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
19430 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
19440 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
19450 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
19460 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
19470 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
19480 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
19490 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
194a0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
194b0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
194c0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
194d0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
194e0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
194f0 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
19500 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
19510 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
19520 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
19530 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
19540 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
19550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19580 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
19590 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
195a0 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
195b0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
195c0 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
195d0 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
195e0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
195f0 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
19600 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c       /* op = IN,
19610 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c   EXISTS, SELECT,
19620 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c   CASE, FUNCTION,
19630 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20   BETWEEN */.    
19640 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
19650 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65       /* EP_xIsSe
19660 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e  lect and op = IN
19670 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
19680 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
19690 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
196a0 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
196b0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
196c0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
196d0 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
196e0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
196f0 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
19700 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
19710 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
19720 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
19730 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
19740 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
19750 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
19760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19790 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
197a0 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
197b0 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
197c0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
197d0 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
197e0 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
197f0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
19800 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
19810 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19820 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
19830 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
19840 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
19850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19860 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19870 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
19880 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198a0 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
198b0 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
198c0 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20   old.           
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
198e0 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31   EP_Unlikely:  1
198f0 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c  34217728 times l
19900 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20  ikelihood.      
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19920 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f     ** TK_SELECT_
19930 43 4f 4c 55 4d 4e 3a 20 4e 75 6d 62 65 72 20 6f  COLUMN: Number o
19940 66 20 63 6f 6c 75 6d 6e 73 20 6f 6e 20 74 68 65  f columns on the
19950 20 4c 48 53 0a 20 20 20 20 20 20 20 20 20 20 20   LHS.           
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
19970 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20   TK_SELECT: 1st 
19980 72 65 67 69 73 74 65 72 20 6f 66 20 72 65 73 75  register of resu
19990 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79  lt vector */.  y
199a0 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  nVar iColumn;   
199b0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
199c0 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  MN: column index
199d0 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e  .  -1 for rowid.
199e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
199f0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
19a00 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62  VARIABLE: variab
19a10 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79  le number (alway
19a20 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20  s >= 1)..       
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a40 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43    ** TK_SELECT_C
19a50 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66  OLUMN: column of
19a60 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 63 74   the result vect
19a70 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67  or */.  i16 iAgg
19a80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
19a90 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e  * Which entry in
19aa0 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b   pAggInfo->aCol[
19ab0 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a  ] or ->aFunc[] *
19ac0 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f  /.  i16 iRightJo
19ad0 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66  inTable;   /* If
19ae0 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68   EP_FromJoin, th
19af0 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66  e right table of
19b00 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75   the join */.  u
19b10 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20  8 op2;          
19b20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49        /* TK_REGI
19b30 53 54 45 52 2f 54 4b 5f 54 52 55 54 48 3a 20 6f  STER/TK_TRUTH: o
19b40 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
19b50 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
19b80 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
19b90 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
19bc0 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
19bd0 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
19be0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
19bf0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
19c00 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
19c10 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
19c20 4e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  N */.  union {. 
19c30 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
19c40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
19c50 43 4f 4c 55 4d 4e 3a 20 54 61 62 6c 65 20 63 6f  COLUMN: Table co
19c60 6e 74 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 2e  ntaining column.
19c70 20 43 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20   Can be NULL.   
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61          ** for a
19ca0 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 69 6e   column of an in
19cb0 64 65 78 20 6f 6e 20 61 6e 20 65 78 70 72 65 73  dex on an expres
19cc0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 57 69 6e 64  sion */.    Wind
19cd0 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20 20  ow *pWin;       
19ce0 20 20 20 2f 2a 20 45 50 5f 57 69 6e 46 75 6e 63     /* EP_WinFunc
19cf0 3a 20 57 69 6e 64 6f 77 2f 46 69 6c 74 65 72 20  : Window/Filter 
19d00 64 65 66 6e 20 66 6f 72 20 61 20 66 75 6e 63 74  defn for a funct
19d10 69 6f 6e 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ion */.    struc
19d20 74 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  t {             
19d30 20 20 2f 2a 20 54 4b 5f 49 4e 2c 20 54 4b 5f 53    /* TK_IN, TK_S
19d40 45 4c 45 43 54 2c 20 61 6e 64 20 54 4b 5f 45 58  ELECT, and TK_EX
19d50 49 53 54 53 20 2a 2f 0a 20 20 20 20 20 20 69 6e  ISTS */.      in
19d60 74 20 69 41 64 64 72 3b 20 20 20 20 20 20 20 20  t iAddr;        
19d70 20 20 20 20 20 2f 2a 20 53 75 62 72 6f 75 74 69       /* Subrouti
19d80 6e 65 20 65 6e 74 72 79 20 61 64 64 72 65 73 73  ne entry address
19d90 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 72 65   */.      int re
19da0 67 52 65 74 75 72 6e 3b 20 20 20 20 20 20 20 20  gReturn;        
19db0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73 65   /* Register use
19dc0 64 20 74 6f 20 68 6f 6c 64 20 72 65 74 75 72 6e  d to hold return
19dd0 20 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20   address */.    
19de0 7d 20 73 75 62 3b 0a 20 20 7d 20 79 3b 0a 7d 3b  } sub;.  } y;.};
19df0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
19e00 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
19e10 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
19e20 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
19e30 20 66 69 65 6c 64 2e 0a 2a 2a 20 56 61 6c 75 65   field..** Value
19e40 20 72 65 73 74 72 69 63 74 69 6f 6e 73 3a 0a 2a   restrictions:.*
19e50 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 45 50  *.**          EP
19e60 5f 41 67 67 20 3d 3d 20 4e 43 5f 48 61 73 41 67  _Agg == NC_HasAg
19e70 67 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a  g == SF_HasAgg.*
19e80 2a 20 20 20 20 20 20 20 20 20 20 45 50 5f 57 69  *          EP_Wi
19e90 6e 20 3d 3d 20 4e 43 5f 48 61 73 57 69 6e 0a 2a  n == NC_HasWin.*
19ea0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
19eb0 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30 30 30 31  mJoin   0x000001
19ec0 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69   /* Originates i
19ed0 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73  n ON/USING claus
19ee0 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20  e of outer join 
19ef0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
19f00 73 74 69 6e 63 74 20 20 20 30 78 30 30 30 30 30  stinct   0x00000
19f10 32 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  2 /* Aggregate f
19f20 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
19f30 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
19f40 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 61 73 46  .#define EP_HasF
19f50 75 6e 63 20 20 20 20 30 78 30 30 30 30 30 34 20  unc    0x000004 
19f60 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
19f70 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e  or more function
19f80 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f  s of any kind */
19f90 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78 65  .#define EP_Fixe
19fa0 64 43 6f 6c 20 20 20 30 78 30 30 30 30 30 38 20  dCol   0x000008 
19fb0 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20 77 69 74  /* TK_Column wit
19fc0 68 20 61 20 6b 6e 6f 77 6e 20 66 69 78 65 64 20  h a known fixed 
19fd0 76 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  value */.#define
19fe0 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 20 30   EP_Agg        0
19ff0 78 30 30 30 30 31 30 20 2f 2a 20 43 6f 6e 74 61  x000010 /* Conta
1a000 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
1a010 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1a020 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ons */.#define E
1a030 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30 78 30  P_VarSelect  0x0
1a040 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74  00020 /* pSelect
1a050 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
1a060 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
1a070 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
1a080 6f 74 65 64 20 20 30 78 30 30 30 30 34 30 20 2f  oted  0x000040 /
1a090 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72  * token.z was or
1a0a0 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e  iginally in "...
1a0b0 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  " */.#define EP_
1a0c0 49 6e 66 69 78 46 75 6e 63 20 20 30 78 30 30 30  InfixFunc  0x000
1a0d0 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
1a0e0 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
1a0f0 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
1a100 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
1a110 5f 43 6f 6c 6c 61 74 65 20 20 20 20 30 78 30 30  _Collate    0x00
1a120 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0100 /* Tree con
1a130 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41  tains a TK_COLLA
1a140 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20  TE operator */. 
1a150 20 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   /*             
1a160 20 20 20 20 20 30 78 30 30 30 32 30 30 20 41 76       0x000200 Av
1a170 61 69 6c 61 62 6c 65 20 66 6f 72 20 72 65 75 73  ailable for reus
1a180 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
1a190 49 6e 74 56 61 6c 75 65 20 20 20 30 78 30 30 30  IntValue   0x000
1a1a0 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
1a1b0 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
1a1c0 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
1a1d0 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
1a1e0 63 74 20 20 30 78 30 30 30 38 30 30 20 2f 2a 20  ct  0x000800 /* 
1a1f0 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
1a200 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e  id (otherwise x.
1a210 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65  pList is) */.#de
1a220 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20  fine EP_Skip    
1a230 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 4f     0x001000 /* O
1a240 70 65 72 61 74 6f 72 20 64 6f 65 73 20 6e 6f 74  perator does not
1a250 20 63 6f 6e 74 72 69 62 75 74 65 20 74 6f 20 61   contribute to a
1a260 66 66 69 6e 69 74 79 20 2a 2f 0a 23 64 65 66 69  ffinity */.#defi
1a270 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20  ne EP_Reduced   
1a280 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70   0x002000 /* Exp
1a290 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45  r struct EXPR_RE
1a2a0 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20  DUCEDSIZE bytes 
1a2b0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1a2c0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78  EP_TokenOnly  0x
1a2d0 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
1a2e0 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
1a2f0 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
1a300 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
1a310 50 5f 57 69 6e 20 20 20 20 20 20 20 20 30 78 30  P_Win        0x0
1a320 30 38 30 30 30 20 2f 2a 20 43 6f 6e 74 61 69 6e  08000 /* Contain
1a330 73 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  s window functio
1a340 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ns */.#define EP
1a350 5f 4d 65 6d 54 6f 6b 65 6e 20 20 20 30 78 30 31  _MemToken   0x01
1a360 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20  0000 /* Need to 
1a370 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
1a380 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23  Expr.zToken */.#
1a390 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75  define EP_NoRedu
1a3a0 63 65 20 20 20 30 78 30 32 30 30 30 30 20 2f 2a  ce   0x020000 /*
1a3b0 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
1a3c0 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
1a3d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
1a3e0 6e 6c 69 6b 65 6c 79 20 20 20 30 78 30 34 30 30  nlikely   0x0400
1a3f0 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29  00 /* unlikely()
1a400 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29   or likelihood()
1a410 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
1a420 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e  fine EP_ConstFun
1a430 63 20 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41  c  0x080000 /* A
1a440 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
1a450 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e  STANT or _SLOCHN
1a460 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  G function */.#d
1a470 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75  efine EP_CanBeNu
1a480 6c 6c 20 20 30 78 31 30 30 30 30 30 20 2f 2a 20  ll  0x100000 /* 
1a490 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70  Can be null desp
1a4a0 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  ite NOT NULL con
1a4b0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
1a4c0 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20  ne EP_Subquery  
1a4d0 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65   0x200000 /* Tre
1a4e0 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
1a4f0 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20  SELECT operator 
1a500 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c  */.#define EP_Al
1a510 69 61 73 20 20 20 20 20 20 30 78 34 30 30 30 30  ias      0x40000
1a520 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73  0 /* Is an alias
1a530 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65   for a result se
1a540 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  t column */.#def
1a550 69 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20  ine EP_Leaf     
1a560 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78    0x800000 /* Ex
1a570 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68  pr.pLeft, .pRigh
1a580 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c  t, .u.pSelect al
1a590 6c 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  l NULL */.#defin
1a5a0 65 20 45 50 5f 57 69 6e 46 75 6e 63 20 20 20 30  e EP_WinFunc   0
1a5b0 78 31 30 30 30 30 30 30 20 2f 2a 20 54 4b 5f 46  x1000000 /* TK_F
1a5c0 55 4e 43 54 49 4f 4e 20 77 69 74 68 20 45 78 70  UNCTION with Exp
1a5d0 72 2e 79 2e 70 57 69 6e 20 73 65 74 20 2a 2f 0a  r.y.pWin set */.
1a5e0 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 72 74  #define EP_Subrt
1a5f0 6e 20 20 20 20 30 78 32 30 30 30 30 30 30 20 2f  n    0x2000000 /
1a600 2a 20 55 73 65 73 20 45 78 70 72 2e 79 2e 73 75  * Uses Expr.y.su
1a610 62 2e 20 54 4b 5f 49 4e 2c 20 5f 53 45 4c 45 43  b. TK_IN, _SELEC
1a620 54 2c 20 6f 72 20 5f 45 58 49 53 54 53 20 2a 2f  T, or _EXISTS */
1a630 0a 23 64 65 66 69 6e 65 20 45 50 5f 51 75 6f 74  .#define EP_Quot
1a640 65 64 20 20 20 20 30 78 34 30 30 30 30 30 30 20  ed    0x4000000 
1a650 2f 2a 20 54 4b 5f 49 44 20 77 61 73 20 6f 72 69  /* TK_ID was ori
1a660 67 69 6e 61 6c 6c 79 20 71 75 6f 74 65 64 20 2a  ginally quoted *
1a670 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61  /.#define EP_Sta
1a680 74 69 63 20 20 20 20 30 78 38 30 30 30 30 30 30  tic    0x8000000
1a690 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
1a6a0 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
1a6b0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
1a6c0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 73 54 72  .#define EP_IsTr
1a6d0 75 65 20 20 20 30 78 31 30 30 30 30 30 30 30 20  ue   0x10000000 
1a6e0 2f 2a 20 41 6c 77 61 79 73 20 68 61 73 20 62 6f  /* Always has bo
1a6f0 6f 6c 65 61 6e 20 76 61 6c 75 65 20 6f 66 20 54  olean value of T
1a700 52 55 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  RUE */.#define E
1a710 50 5f 49 73 46 61 6c 73 65 20 20 30 78 32 30 30  P_IsFalse  0x200
1a720 30 30 30 30 30 20 2f 2a 20 41 6c 77 61 79 73 20  00000 /* Always 
1a730 68 61 73 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  has boolean valu
1a740 65 20 6f 66 20 46 41 4c 53 45 20 2a 2f 0a 23 64  e of FALSE */.#d
1a750 65 66 69 6e 65 20 45 50 5f 49 6e 64 69 72 65 63  efine EP_Indirec
1a760 74 20 30 78 34 30 30 30 30 30 30 30 20 2f 2a 20  t 0x40000000 /* 
1a770 43 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  Contained within
1a780 20 61 20 54 52 49 47 47 45 52 20 6f 72 20 61 20   a TRIGGER or a 
1a790 56 49 45 57 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  VIEW */../*.** T
1a7a0 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  he EP_Propagate 
1a7b0 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20 6f 66  mask is a set of
1a7c0 20 70 72 6f 70 65 72 74 69 65 73 20 74 68 61 74   properties that
1a7d0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70   automatically p
1a7e0 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70 77 61  ropagate.** upwa
1a7f0 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e 74 20  rds into parent 
1a800 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  nodes..*/.#defin
1a810 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28  e EP_Propagate (
1a820 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75  EP_Collate|EP_Su
1a830 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46 75 6e  bquery|EP_HasFun
1a840 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  c)../*.** These 
1a850 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
1a860 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
1a870 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
1a880 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
1a890 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
1a8a0 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
1a8b0 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
1a8c0 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
1a8d0 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
1a8e0 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
1a8f0 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
1a900 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
1a910 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
1a920 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
1a930 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
1a940 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
1a950 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
1a960 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
1a970 0a 23 64 65 66 69 6e 65 20 45 78 70 72 41 6c 77  .#define ExprAlw
1a980 61 79 73 54 72 75 65 28 45 29 20 20 20 28 28 28  aysTrue(E)   (((
1a990 45 29 2d 3e 66 6c 61 67 73 26 28 45 50 5f 46 72  E)->flags&(EP_Fr
1a9a0 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73 54 72 75 65  omJoin|EP_IsTrue
1a9b0 29 29 3d 3d 45 50 5f 49 73 54 72 75 65 29 0a 23  ))==EP_IsTrue).#
1a9c0 64 65 66 69 6e 65 20 45 78 70 72 41 6c 77 61 79  define ExprAlway
1a9d0 73 46 61 6c 73 65 28 45 29 20 20 28 28 28 45 29  sFalse(E)  (((E)
1a9e0 2d 3e 66 6c 61 67 73 26 28 45 50 5f 46 72 6f 6d  ->flags&(EP_From
1a9f0 4a 6f 69 6e 7c 45 50 5f 49 73 46 61 6c 73 65 29  Join|EP_IsFalse)
1aa00 29 3d 3d 45 50 5f 49 73 46 61 6c 73 65 29 0a 0a  )==EP_IsFalse)..
1aa10 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56  /* The ExprSetVV
1aa20 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72  AProperty() macr
1aa30 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65  o is used for Ve
1aa40 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69  rification, Vali
1aa50 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41  dation,.** and A
1aa60 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c  ccreditation onl
1aa70 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b  y.  It works lik
1aa80 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
1aa90 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a  y() during VVA.*
1aaa0 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20  * processes but 
1aab0 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64  is a no-op for d
1aac0 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64  elivery..*/.#ifd
1aad0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1aae0 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
1aaf0 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
1ab00 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
1ab10 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1ab20 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
1ab30 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a  rty(E,P).#endif.
1ab40 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
1ab50 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
1ab60 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
1ab70 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
1ab80 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75  mal Expr.** stru
1ab90 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75  ct, an Expr stru
1aba0 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52  ct with the EP_R
1abb0 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20  educed flag set 
1abc0 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a  in Expr.flags.**
1abd0 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72   and an Expr str
1abe0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
1abf0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73  TokenOnly flag s
1ac00 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  et..*/.#define E
1ac10 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20  XPR_FULLSIZE    
1ac20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78         sizeof(Ex
1ac30 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr)           /*
1ac40 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64   Full size */.#d
1ac50 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43  efine EXPR_REDUC
1ac60 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66  EDSIZE        of
1ac70 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62  fsetof(Expr,iTab
1ac80 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66  le)  /* Common f
1ac90 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69  eatures */.#defi
1aca0 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ne EXPR_TOKENONL
1acb0 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65  YSIZE      offse
1acc0 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20  tof(Expr,pLeft) 
1acd0 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75    /* Fewer featu
1ace0 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c  res */../*.** Fl
1acf0 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  ags passed to th
1ad00 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
1ad10 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65  () function. See
1ad20 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
1ad30 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c  ent.** above sql
1ad40 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f  ite3ExprDup() fo
1ad50 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64  r details..*/.#d
1ad60 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45  efine EXPRDUP_RE
1ad70 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30  DUCE         0x0
1ad80 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64  001  /* Used red
1ad90 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e  uced-size Expr n
1ada0 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  odes */../*.** T
1adb0 72 75 65 20 69 66 20 74 68 65 20 65 78 70 72 65  rue if the expre
1adc0 73 73 69 6f 6e 20 70 61 73 73 65 64 20 61 73 20  ssion passed as 
1add0 61 6e 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  an argument was 
1ade0 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 0a  a function with.
1adf0 2a 2a 20 61 6e 20 4f 56 45 52 28 29 20 63 6c 61  ** an OVER() cla
1ae00 75 73 65 20 28 61 20 77 69 6e 64 6f 77 20 66 75  use (a window fu
1ae10 6e 63 74 69 6f 6e 29 2e 0a 2a 2f 0a 23 64 65 66  nction)..*/.#def
1ae20 69 6e 65 20 49 73 57 69 6e 64 6f 77 46 75 6e 63  ine IsWindowFunc
1ae30 28 70 29 20 28 20 5c 0a 20 20 20 20 45 78 70 72  (p) ( \.    Expr
1ae40 48 61 73 50 72 6f 70 65 72 74 79 28 28 70 29 2c  HasProperty((p),
1ae50 20 45 50 5f 57 69 6e 46 75 6e 63 29 20 26 26 20   EP_WinFunc) && 
1ae60 70 2d 3e 79 2e 70 57 69 6e 2d 3e 65 46 72 6d 54  p->y.pWin->eFrmT
1ae70 79 70 65 21 3d 54 4b 5f 46 49 4c 54 45 52 20 5c  ype!=TK_FILTER \
1ae80 0a 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74  .)../*.** A list
1ae90 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   of expressions.
1aea0 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f    Each expressio
1aeb0 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  n may optionally
1aec0 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e   have a.** name.
1aed0 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63    An expr/name c
1aee0 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62  ombination can b
1aef0 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61  e used in severa
1af00 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20  l ways, such.** 
1af10 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22  as the list of "
1af20 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c  expr AS ID" fiel
1af30 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22  ds following a "
1af40 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68  SELECT" or in th
1af50 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44  e.** list of "ID
1af60 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69   = expr" items i
1af70 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20  n an UPDATE.  A 
1af80 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
1af90 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20  ons can.** also 
1afa0 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
1afb0 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e  rgument to a fun
1afc0 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20  ction, in which 
1afd0 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65  case the a.zName
1afe0 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74  .** field is not
1aff0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20   used..**.** By 
1b000 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72  default the Expr
1b010 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c  .zSpan field hol
1b020 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  ds a human-reada
1b030 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ble description 
1b040 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  of.** the expres
1b050 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65  sion that is use
1b060 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
1b070 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73  ion of error mes
1b080 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c  sages and.** col
1b090 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20  umn labels.  In 
1b0a0 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e  this case, Expr.
1b0b0 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c  zSpan is typical
1b0c0 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ly the text of a
1b0d0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65  .** column expre
1b0e0 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73  ssion as it exis
1b0f0 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ts in a SELECT s
1b100 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76  tatement.  Howev
1b110 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53  er, if.** the bS
1b120 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73  panIsTab flag is
1b130 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e   set, then zSpan
1b140 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74   is overloaded t
1b150 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a  o mean the name.
1b160 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ** of the result
1b170 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66   column in the f
1b180 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41  orm: DATABASE.TA
1b190 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69  BLE.COLUMN.  Thi
1b1a0 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20  s later.** form 
1b1b0 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65  is used for name
1b1c0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68   resolution with
1b1d0 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61   nested FROM cla
1b1e0 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  uses..*/.struct 
1b1f0 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74  ExprList {.  int
1b200 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20   nExpr;         
1b210 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b220 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20   expressions on 
1b230 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74  the list */.  st
1b240 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
1b250 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
1b260 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
1b270 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
1b280 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
1b290 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
1b2a0 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 69  rse tree for thi
1b2b0 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
1b2c0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1b2e0 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
1b2f0 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
1b300 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
1b310 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
1b320 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
1b330 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
1b340 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
1b350 20 73 6f 72 74 46 6c 61 67 73 3b 20 20 20 20 20   sortFlags;     
1b360 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
1b370 20 4b 45 59 49 4e 46 4f 5f 4f 52 44 45 52 5f 2a   KEYINFO_ORDER_*
1b380 20 66 6c 61 67 73 20 2a 2f 0a 20 20 20 20 75 6e   flags */.    un
1b390 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
1b3a0 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
1b3b0 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
1b3c0 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
1b3d0 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
1b3e0 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
1b3f0 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
1b400 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
1b410 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
1b420 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
1b430 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
1b440 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
1b450 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
1b460 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72 52  nsigned bSorterR
1b470 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72 20  ef :1; /* Defer 
1b480 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69 6c  evaluation until
1b490 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20 2a   after sorting *
1b4a0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
1b4b0 4e 75 6c 6c 73 3a 20 31 3b 20 20 20 20 20 2f 2a  Nulls: 1;     /*
1b4c0 20 54 72 75 65 20 69 66 20 65 78 70 6c 69 63 69   True if explici
1b4d0 74 20 22 4e 55 4c 4c 53 20 46 49 52 53 54 2f 4c  t "NULLS FIRST/L
1b4e0 41 53 54 22 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  AST" */.    unio
1b4f0 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74  n {.      struct
1b500 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69   {.        u16 i
1b510 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20  OrderByCol;     
1b520 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59   /* For ORDER BY
1b530 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  , column number 
1b540 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f  in result set */
1b550 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c  .        u16 iAl
1b560 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ias;           /
1b570 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72  * Index into Par
1b580 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20  se.aAlias[] for 
1b590 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d  zName */.      }
1b5a0 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43   x;.      int iC
1b5b0 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20  onstExprReg;    
1b5c0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e    /* Register in
1b5d0 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75   which Expr valu
1b5e0 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20  e is cached */. 
1b5f0 20 20 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d     } u;.  } a[1]
1b600 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b610 20 20 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66     /* One slot f
1b620 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
1b630 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
1b640 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
1b650 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1b660 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
1b670 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
1b680 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
1b690 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
1b6a0 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
1b6b0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1b6c0 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
1b6d0 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1b6e0 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
1b6f0 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
1b700 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
1b710 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
1b720 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
1b730 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
1b740 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
1b750 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
1b760 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
1b770 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
1b780 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
1b790 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
1b7a0 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
1b7b0 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
1b7c0 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
1b7d0 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
1b7e0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
1b7f0 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
1b800 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
1b810 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
1b820 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
1b830 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
1b840 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
1b850 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
1b860 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
1b870 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
1b880 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
1b890 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
1b8a0 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
1b8b0 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
1b8c0 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
1b8d0 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
1b8e0 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
1b8f0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
1b900 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
1b910 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
1b920 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
1b930 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
1b940 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
1b950 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1b960 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
1b970 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
1b980 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
1b990 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
1b9a0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
1b9b0 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
1b9c0 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
1b9d0 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
1b9e0 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
1b9f0 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
1ba00 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
1ba10 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
1ba20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
1ba30 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1ba40 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
1ba50 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
1ba60 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
1ba70 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
1ba80 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
1ba90 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
1baa0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
1bab0 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
1bac0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
1bad0 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
1bae0 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
1baf0 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
1bb00 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
1bb10 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
1bb20 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
1bb30 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
1bb40 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
1bb50 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
1bb60 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
1bb70 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
1bb80 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
1bb90 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
1bba0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
1bbb0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
1bbc0 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
1bbd0 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
1bbe0 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
1bbf0 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
1bc00 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
1bc10 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
1bc20 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
1bc30 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
1bc40 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
1bc50 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
1bc60 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
1bc70 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
1bc80 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
1bc90 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
1bca0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
1bcb0 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
1bcc0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
1bcd0 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
1bce0 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
1bcf0 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
1bd00 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
1bd10 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
1bd20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
1bd30 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
1bd40 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
1bd50 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
1bd60 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
1bd70 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
1bd80 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
1bd90 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
1bda0 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
1bdb0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
1bdc0 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
1bdd0 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
1bde0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
1bdf0 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
1be00 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
1be10 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
1be20 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
1be30 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
1be40 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
1be50 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
1be60 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
1be70 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1be80 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
1be90 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
1bea0 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
1beb0 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
1bec0 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
1bed0 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
1bee0 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
1bef0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
1bf00 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
1bf10 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
1bf20 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
1bf30 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1bf40 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
1bf50 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
1bf60 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
1bf70 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
1bf80 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
1bf90 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
1bfa0 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
1bfb0 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
1bfc0 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
1bfd0 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
1bfe0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
1bff0 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
1c000 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
1c010 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
1c020 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
1c030 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
1c040 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
1c050 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b   */.    struct {
1c060 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  .      u8 jointy
1c070 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
1c080 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
1c090 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20   this table and 
1c0a0 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  the previous */.
1c0b0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e        unsigned n
1c0c0 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20  otIndexed :1;   
1c0d0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
1c0e0 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58  e is a NOT INDEX
1c0f0 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  ED clause */.   
1c100 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e     unsigned isIn
1c110 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a  dexedBy :1;   /*
1c120 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
1c130 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20  s an INDEXED BY 
1c140 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
1c150 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75  unsigned isTabFu
1c160 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72  nc :1;     /* Tr
1c170 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75  ue if table-valu
1c180 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74  ed-function synt
1c190 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ax */.      unsi
1c1a0 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65  gned isCorrelate
1c1b0 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  d :1;  /* True i
1c1c0 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63  f sub-query is c
1c1d0 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20  orrelated */.   
1c1e0 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43     unsigned viaC
1c1f0 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a  oroutine :1;  /*
1c200 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   Implemented as 
1c210 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
1c220 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1c230 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20  sRecursive :1;  
1c240 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63   /* True for rec
1c250 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65  ursive reference
1c260 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20   in WITH */.    
1c270 7d 20 66 67 3b 0a 20 20 20 20 69 6e 74 20 69 43  } fg;.    int iC
1c280 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54  ursor;      /* T
1c290 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  he VDBE cursor n
1c2a0 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63  umber used to ac
1c2b0 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20  cess this table 
1c2c0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e  */.    Expr *pOn
1c2d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1c2e0 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  ON clause of a j
1c2f0 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73  oin */.    IdLis
1c300 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20  t *pUsing;   /* 
1c310 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65  The USING clause
1c320 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
1c330 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65    Bitmask colUse
1c340 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c  d;  /* Bit N (1<
1c350 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d  <N) set if colum
1c360 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75  n N of pTab is u
1c370 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  sed */.    union
1c380 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a   {.      char *z
1c390 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a  IndexedBy;    /*
1c3a0 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
1c3b0 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
1c3c0 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
1c3d0 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20  .      ExprList 
1c3e0 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41  *pFuncArg;  /* A
1c3f0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c  rguments to tabl
1c400 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
1c410 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20  n */.    } u1;. 
1c420 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64     Index *pIBInd
1c430 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ex;  /* Index st
1c440 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
1c450 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64  nding to u1.zInd
1c460 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b  exedBy */.  } a[
1c470 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  1];             
1c480 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
1c490 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72   each identifier
1c4a0 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1c4b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74  };../*.** Permit
1c4c0 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68  ted values of th
1c4d0 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e  e SrcList.a.join
1c4e0 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64  type field.*/.#d
1c4f0 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20  efine JT_INNER  
1c500 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20     0x0001    /* 
1c510 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65  Any kind of inne
1c520 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20  r or cross join 
1c530 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52  */.#define JT_CR
1c540 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20  OSS     0x0002  
1c550 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73    /* Explicit us
1c560 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b  e of the CROSS k
1c570 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
1c580 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30  e JT_NATURAL   0
1c590 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65  x0004    /* True
1c5a0 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22   for a "natural"
1c5b0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1c5c0 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78   JT_LEFT      0x
1c5d0 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20  0008    /* Left 
1c5e0 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
1c5f0 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20  efine JT_RIGHT  
1c600 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20     0x0010    /* 
1c610 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e  Right outer join
1c620 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f   */.#define JT_O
1c630 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20  UTER     0x0020 
1c640 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52     /* The "OUTER
1c650 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65  " keyword is pre
1c660 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sent */.#define 
1c670 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30  JT_ERROR     0x0
1c680 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77  040    /* unknow
1c690 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64  n or unsupported
1c6a0 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a   join type */...
1c6b0 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72  /*.** Flags appr
1c6c0 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20  opriate for the 
1c6d0 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d  wctrlFlags param
1c6e0 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57  eter of sqlite3W
1c6f0 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61  hereBegin().** a
1c700 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f  nd the WhereInfo
1c710 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62  .wctrlFlags memb
1c720 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  er..**.** Value 
1c730 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
1c740 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
1c750 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52  ()):.**     WHER
1c760 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20  E_USE_LIMIT  == 
1c770 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f  SF_FixedLimit.*/
1c780 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1c790 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
1c7a0 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
1c7b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c7c0 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
1c7d0 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
1c7e0 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1c7f0 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
1c800 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1c810 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
1c820 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
1c830 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
1c840 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
1c850 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1c860 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
1c870 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
1c880 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
1c890 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
1c8a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1c8b0 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78  PASS_MULTIROW 0x
1c8c0 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20  0008 /* ONEPASS 
1c8d0 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69  is ok with multi
1c8e0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1c8f0 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
1c900 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31  ATES_OK    0x001
1c910 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  0 /* Ok to retur
1c920 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
1c930 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
1c940 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c  e WHERE_OR_SUBCL
1c950 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30 20  AUSE     0x0020 
1c960 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20  /* Processing a 
1c970 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61 72  sub-WHERE as par
1c980 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20  t of.           
1c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9a0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
1c9b0 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f  e OR optimizatio
1c9c0 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  n  */.#define WH
1c9d0 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
1c9e0 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70       0x0040 /* p
1c9f0 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
1ca00 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
1ca10 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1ca20 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
1ca30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0080 /* pOrderb
1ca40 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
1ca50 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
1ca60 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
1ca70 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
1ca80 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0100 /* All ou
1ca90 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
1caa0 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65   distinct */.#de
1cab0 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42  fine WHERE_SORTB
1cac0 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 32  YGROUP      0x02
1cad0 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71  00 /* Support sq
1cae0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
1caf0 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ed() */.#define 
1cb00 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45  WHERE_SEEK_TABLE
1cb10 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a         0x0400 /*
1cb20 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65   Do not defer se
1cb30 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c  eks on main tabl
1cb40 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1cb50 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54  RE_ORDERBY_LIMIT
1cb60 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52      0x0800 /* OR
1cb70 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74  DERBY+LIMIT on t
1cb80 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f  he inner loop */
1cb90 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1cba0 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20  EEK_UNIQ_TABLE  
1cbb0 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x1000 /* Do not
1cbc0 20 64 65 66 65 72 20 73 65 65 6b 73 20 69 66 20   defer seeks if 
1cbd0 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20  unique */.      
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbf0 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20    /*     0x2000 
1cc00 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79     not currently
1cc10 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1cc20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1cc30 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20 2f          0x4000 /
1cc40 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20  * Use the LIMIT 
1cc50 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65  in cost estimate
1cc60 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  s */.           
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cc80 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f      0x8000    no
1cc90 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1cca0 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
1ccb0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
1ccc0 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
1ccd0 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
1cce0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1ccf0 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
1cd00 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
1cd10 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
1cd20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1cd30 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
1cd40 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
1cd50 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
1cd60 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1cd70 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
1cd80 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
1cd90 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
1cda0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1cdb0 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
1cdc0 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
1cdd0 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
1cde0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
1cdf0 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
1ce00 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
1ce10 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
1ce20 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
1ce30 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
1ce40 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
1ce50 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
1ce60 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
1ce70 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
1ce80 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
1ce90 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
1cea0 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
1ceb0 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
1cec0 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
1ced0 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
1cee0 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
1cef0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
1cf00 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
1cf10 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
1cf20 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
1cf30 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
1cf40 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
1cf50 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
1cf60 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
1cf70 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
1cf80 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
1cf90 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
1cfa0 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
1cfb0 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
1cfc0 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
1cfd0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
1cfe0 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a  he inner-most.**
1cff0 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
1d000 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
1d010 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
1d020 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
1d030 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
1d040 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
1d050 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
1d060 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
1d070 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
1d080 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
1d090 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
1d0a0 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
1d0b0 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
1d0c0 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
1d0d0 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
1d0e0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
1d0f0 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
1d100 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
1d110 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
1d120 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
1d130 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45  emented..**.** E
1d140 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
1d150 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
1d160 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
1d170 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
1d180 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1d190 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
1d1a0 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
1d1b0 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
1d1c0 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
1d1d0 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
1d1e0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
1d1f0 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
1d200 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
1d210 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
1d220 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
1d230 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
1d240 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
1d250 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1d260 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
1d270 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
1d280 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
1d290 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
1d2a0 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
1d2b0 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69  e names */.  uni
1d2c0 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73  on {.    ExprLis
1d2d0 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
1d2e0 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
1d2f0 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  f result-set col
1d300 75 6d 6e 73 20 2a 2f 0a 20 20 20 20 41 67 67 49  umns */.    AggI
1d310 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
1d320 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1d330 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73  about aggregates
1d340 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a   at this level *
1d350 2f 0a 20 20 20 20 55 70 73 65 72 74 20 2a 70 55  /.    Upsert *pU
1d360 70 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e  psert;     /* ON
1d370 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1d380 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
1d390 6d 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20  m an upsert */. 
1d3a0 20 7d 20 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f   } uNC;.  NameCo
1d3b0 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
1d3c0 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
1d3d0 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
1d3e0 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
1d3f0 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
1d400 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1d410 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
1d420 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
1d430 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
1d440 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1d450 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1d460 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
1d470 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
1d480 61 6d 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 63  ames */.  int nc
1d490 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
1d4a0 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
1d4b0 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
1d4c0 64 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c  d below */.  Sel
1d4d0 65 63 74 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b  ect *pWinSelect;
1d4e0 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
1d4f0 65 6d 65 6e 74 20 66 6f 72 20 61 6e 79 20 77 69  ement for any wi
1d500 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a  ndow functions *
1d510 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
1d520 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
1d530 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20  he NameContext, 
1d540 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ncFlags field..*
1d550 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1d560 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63  raints (all chec
1d570 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ked via assert()
1d580 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41  ):.**    NC_HasA
1d590 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41  gg    == SF_HasA
1d5a0 67 67 20 20 20 20 3d 3d 20 45 50 5f 41 67 67 0a  gg    == EP_Agg.
1d5b0 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41  **    NC_MinMaxA
1d5c0 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41  gg == SF_MinMaxA
1d5d0 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e  gg == SQLITE_FUN
1d5e0 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 4e  C_MINMAX.**    N
1d5f0 43 5f 48 61 73 57 69 6e 20 20 20 20 3d 3d 20 45  C_HasWin    == E
1d600 50 5f 57 69 6e 0a 2a 2a 0a 2a 2f 0a 23 64 65 66  P_Win.**.*/.#def
1d610 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
1d620 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72   0x0001  /* Aggr
1d630 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1d640 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
1d650 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50   */.#define NC_P
1d660 61 72 74 49 64 78 20 20 20 30 78 30 30 30 32 20  artIdx   0x0002 
1d670 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1d680 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20  lving a partial 
1d690 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23  index WHERE */.#
1d6a0 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63  define NC_IsChec
1d6b0 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54  k   0x0004  /* T
1d6c0 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
1d6d0 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43   names in a CHEC
1d6e0 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  K constraint */.
1d6f0 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67  #define NC_InAgg
1d700 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20  Func 0x0008  /* 
1d710 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e  True if analyzin
1d720 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61  g arguments to a
1d730 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64  n agg func */.#d
1d740 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20  efine NC_HasAgg 
1d750 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e     0x0010  /* On
1d760 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
1d770 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65  ate functions se
1d780 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
1d790 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30 32  _IdxExpr   0x002
1d7a0 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  0  /* True if re
1d7b0 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  solving columns 
1d7c0 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  of CREATE INDEX 
1d7d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56 61  */.#define NC_Va
1d7e0 72 53 65 6c 65 63 74 20 30 78 30 30 34 30 20 20  rSelect 0x0040  
1d7f0 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65 64 20  /* A correlated 
1d800 73 75 62 71 75 65 72 79 20 68 61 73 20 62 65 65  subquery has bee
1d810 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  n seen */.#defin
1d820 65 20 4e 43 5f 55 45 4c 69 73 74 20 20 20 20 30  e NC_UEList    0
1d830 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20 69  x0080  /* True i
1d840 66 20 75 4e 43 2e 70 45 4c 69 73 74 20 69 73 20  f uNC.pEList is 
1d850 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1d860 4e 43 5f 55 41 67 67 49 6e 66 6f 20 20 30 78 30  NC_UAggInfo  0x0
1d870 31 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  100  /* True if 
1d880 75 4e 43 2e 70 41 67 67 49 6e 66 6f 20 69 73 20  uNC.pAggInfo is 
1d890 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1d8a0 4e 43 5f 55 55 70 73 65 72 74 20 20 20 30 78 30  NC_UUpsert   0x0
1d8b0 32 30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  200  /* True if 
1d8c0 75 4e 43 2e 70 55 70 73 65 72 74 20 69 73 20 75  uNC.pUpsert is u
1d8d0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  sed */.#define N
1d8e0 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30  C_MinMaxAgg 0x10
1d8f0 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61  00  /* min/max a
1d900 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20  ggregates seen. 
1d910 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20   See note above 
1d920 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 43 6f  */.#define NC_Co
1d930 6d 70 6c 65 78 20 20 20 30 78 32 30 30 30 20 20  mplex   0x2000  
1d940 2f 2a 20 54 72 75 65 20 69 66 20 61 20 66 75 6e  /* True if a fun
1d950 63 74 69 6f 6e 20 6f 72 20 73 75 62 71 75 65 72  ction or subquer
1d960 79 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  y seen */.#defin
1d970 65 20 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30  e NC_AllowWin  0
1d980 78 34 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77  x4000  /* Window
1d990 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
1d9a0 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
1d9b0 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 57 69 6e  define NC_HasWin
1d9c0 20 20 20 20 30 78 38 30 30 30 20 20 2f 2a 20 4f      0x8000  /* O
1d9d0 6e 65 20 6f 72 20 6d 6f 72 65 20 77 69 6e 64 6f  ne or more windo
1d9e0 77 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e  w functions seen
1d9f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1da00 73 44 44 4c 20 20 20 20 30 78 31 30 30 30 30 20  sDDL    0x10000 
1da10 20 2f 2a 20 52 65 73 6f 6c 76 69 6e 67 20 6e 61   /* Resolving na
1da20 6d 65 73 20 69 6e 20 61 20 43 52 45 41 54 45 20  mes in a CREATE 
1da30 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 0a 2f 2a  statement */../*
1da40 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1da50 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1da60 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1da70 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20 43 4f  s a single ON CO
1da80 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75 73 65  NFLICT.** clause
1da90 20 69 6e 20 61 6e 20 75 70 73 65 72 74 2e 0a 2a   in an upsert..*
1daa0 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74  *.** The pUpsert
1dab0 54 61 72 67 65 74 20 66 69 65 6c 64 20 69 73 20  Target field is 
1dac0 6f 6e 6c 79 20 73 65 74 20 69 66 20 74 68 65 20  only set if the 
1dad0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1dae0 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a 20 63  se includes.** c
1daf0 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63  onflict-target c
1db00 6c 61 75 73 65 2e 20 20 28 49 6e 20 22 4f 4e 20  lause.  (In "ON 
1db10 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22 20 74  CONFLICT(a,b)" t
1db20 68 65 20 22 28 61 2c 62 29 22 20 69 73 20 74 68  he "(a,b)" is th
1db30 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61  e.** conflict-ta
1db40 72 67 65 74 20 63 6c 61 75 73 65 2e 29 20 20 54  rget clause.)  T
1db50 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74  he pUpsertTarget
1db60 57 68 65 72 65 20 69 73 20 74 68 65 20 6f 70 74  Where is the opt
1db70 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45 20 63  ional.** WHERE c
1db80 6c 61 75 73 65 20 75 73 65 64 20 74 6f 20 69 64  lause used to id
1db90 65 6e 74 69 66 79 20 70 61 72 74 69 61 6c 20 75  entify partial u
1dba0 6e 69 71 75 65 20 69 6e 64 65 78 65 73 2e 0a 2a  nique indexes..*
1dbb0 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53 65 74 20  *.** pUpsertSet 
1dbc0 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63  is the list of c
1dbd0 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72 6d 73  olumn=expr terms
1dbe0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1dbf0 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20 54 68  tatement. .** Th
1dc00 65 20 70 55 70 73 65 72 74 53 65 74 20 66 69 65  e pUpsertSet fie
1dc10 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 61  ld is NULL for a
1dc20 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44 4f 20   ON CONFLICT DO 
1dc30 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a 2a 2a  NOTHING.  The.**
1dc40 20 70 55 70 73 65 72 74 57 68 65 72 65 20 69 73   pUpsertWhere is
1dc50 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
1dc60 65 20 66 6f 72 20 74 68 65 20 55 50 44 41 54 45  e for the UPDATE
1dc70 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69 66 20   and is NULL if 
1dc80 74 68 65 0a 2a 2a 20 57 48 45 52 45 20 63 6c 61  the.** WHERE cla
1dc90 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a  use is omitted..
1dca0 2a 2f 0a 73 74 72 75 63 74 20 55 70 73 65 72 74  */.struct Upsert
1dcb0 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
1dcc0 55 70 73 65 72 74 54 61 72 67 65 74 3b 20 20 2f  UpsertTarget;  /
1dcd0 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73 63 72  * Optional descr
1dce0 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66 6c 69  iption of confli
1dcf0 63 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  cting index */. 
1dd00 20 45 78 70 72 20 2a 70 55 70 73 65 72 74 54 61   Expr *pUpsertTa
1dd10 72 67 65 74 57 68 65 72 65 3b 20 2f 2a 20 57 48  rgetWhere; /* WH
1dd20 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
1dd30 61 72 74 69 61 6c 20 69 6e 64 65 78 20 74 61 72  artial index tar
1dd40 67 65 74 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  gets */.  ExprLi
1dd50 73 74 20 2a 70 55 70 73 65 72 74 53 65 74 3b 20  st *pUpsertSet; 
1dd60 20 20 20 20 2f 2a 20 54 68 65 20 53 45 54 20 63      /* The SET c
1dd70 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e 20 4f 4e  lause from an ON
1dd80 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45   CONFLICT UPDATE
1dd90 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73   */.  Expr *pUps
1dda0 65 72 74 57 68 65 72 65 3b 20 20 20 20 20 20 20  ertWhere;       
1ddb0 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
1ddc0 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  for the ON CONFL
1ddd0 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20  ICT UPDATE */.  
1dde0 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 61 62  /* The fields ab
1ddf0 6f 76 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65  ove comprise the
1de00 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
1de10 74 68 65 20 75 70 73 65 72 74 20 63 6c 61 75 73  the upsert claus
1de20 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69 65 6c  e..  ** The fiel
1de30 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75 73 65  ds below are use
1de40 64 20 74 6f 20 74 72 61 6e 73 66 65 72 20 69 6e  d to transfer in
1de50 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74  formation from t
1de60 68 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a 20 70  he INSERT.  ** p
1de70 72 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e 20 69  rocessing down i
1de80 6e 74 6f 20 74 68 65 20 55 50 44 41 54 45 20 70  nto the UPDATE p
1de90 72 6f 63 65 73 73 69 6e 67 20 77 68 69 6c 65 20  rocessing while 
1dea0 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 64 65 2e  generating code.
1deb0 0a 20 20 2a 2a 20 55 70 73 65 72 74 20 6f 77 6e  .  ** Upsert own
1dec0 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  s the memory all
1ded0 6f 63 61 74 65 64 20 61 62 6f 76 65 2c 20 62 75  ocated above, bu
1dee0 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f 72 79  t not the memory
1def0 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49 6e 64   below. */.  Ind
1df00 65 78 20 2a 70 55 70 73 65 72 74 49 64 78 3b 20  ex *pUpsertIdx; 
1df10 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73 74 72         /* Constr
1df20 61 69 6e 74 20 74 68 61 74 20 70 55 70 73 65 72  aint that pUpser
1df30 74 54 61 72 67 65 74 20 69 64 65 6e 74 69 66 69  tTarget identifi
1df40 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  es */.  SrcList 
1df50 2a 70 55 70 73 65 72 74 53 72 63 3b 20 20 20 20  *pUpsertSrc;    
1df60 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20 62 65    /* Table to be
1df70 20 75 70 64 61 74 65 64 20 2a 2f 0a 20 20 69 6e   updated */.  in
1df80 74 20 72 65 67 44 61 74 61 3b 20 20 20 20 20 20  t regData;      
1df90 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
1dfa0 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1dfb0 67 20 61 72 72 61 79 20 6f 66 20 56 41 4c 55 45  g array of VALUE
1dfc0 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61 74 61  S */.  int iData
1dfd0 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
1dfe0 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1dff0 20 64 61 74 61 20 63 75 72 73 6f 72 20 2a 2f 0a   data cursor */.
1e000 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20    int iIdxCur;  
1e010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1e020 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73  ndex of the firs
1e030 74 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a  t index cursor *
1e040 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
1e050 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1e060 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1e070 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
1e080 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
1e090 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
1e0a0 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
1e0b0 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
1e0c0 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ment..**.** See 
1e0d0 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
1e0e0 6e 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70 75 74  nt on the comput
1e0f0 65 4c 69 6d 69 74 52 65 67 69 73 74 65 72 73 28  eLimitRegisters(
1e100 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 61 0a  ) routine for a.
1e110 2a 2a 20 64 65 74 61 69 6c 65 64 20 64 65 73 63  ** detailed desc
1e120 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  ription of the m
1e130 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 69 4c  eaning of the iL
1e140 69 6d 69 74 20 61 6e 64 20 69 4f 66 66 73 65 74  imit and iOffset
1e150 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 61   fields..**.** a
1e160 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e  ddrOpenEphm[] en
1e170 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68  tries contain th
1e180 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  e address of OP_
1e190 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1e1a0 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20  codes..** These 
1e1b0 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62  addresses must b
1e1c0 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74  e stored so that
1e1d0 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20   we can go back 
1e1e0 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74  and fill in.** t
1e1f0 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e  he P4_KEYINFO an
1e200 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20  d P2 parameters 
1e210 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20  later.  Neither 
1e220 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a  the KeyInfo nor.
1e230 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
1e240 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63   columns in P2 c
1e250 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61  an be computed a
1e260 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a  t the same time.
1e270 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65  ** as the OP_Ope
1e280 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f  nEphm instructio
1e290 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75  n is coded becau
1e2a0 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68  se not.** enough
1e2b0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
1e2c0 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  ut the compound 
1e2d0 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
1e2e0 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a  t that point..**
1e2f0 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
1e300 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d   addrOpenTran[0]
1e310 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e   and [1] contain
1e320 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
1e330 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65  ences.** for the
1e340 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68   result set.  Th
1e350 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
1e360 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f  drOpenEphm[2] co
1e370 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1e380 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f  .** sequences fo
1e390 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
1e3a0 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
1e3b0 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72   Select {.  Expr
1e3c0 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
1e3d0 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
1e3e0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
1e3f0 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
1e400 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1e410 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54  e of: TK_UNION T
1e420 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45  K_ALL TK_INTERSE
1e430 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a  CT TK_EXCEPT */.
1e440 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74    LogEst nSelect
1e450 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
1e460 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
1e470 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20  result rows */. 
1e480 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20   u32 selFlags;  
1e490 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
1e4a0 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a  us SF_* values *
1e4b0 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20  /.  int iLimit, 
1e4c0 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65  iOffset;   /* Me
1e4d0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68  mory registers h
1e4e0 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f  olding LIMIT & O
1e4f0 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a  FFSET counters *
1e500 2f 0a 20 20 75 33 32 20 73 65 6c 49 64 3b 20 20  /.  u32 selId;  
1e510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 6e             /* Un
1e520 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 20  ique identifier 
1e530 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20  number for this 
1e540 53 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e 74 20  SELECT */.  int 
1e550 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
1e560 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
1e570 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
1e580 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1e590 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  t */.  SrcList *
1e5a0 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
1e5b0 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
1e5c0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1e5d0 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
1e5e0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1e5f0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1e600 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
1e610 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
1e620 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1e630 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
1e640 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
1e650 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1e660 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
1e670 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
1e680 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
1e690 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
1e6a0 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
1e6b0 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
1e6c0 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
1e6d0 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
1e6e0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1e6f0 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
1e700 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
1e710 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70  ompound */.  Exp
1e720 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
1e730 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
1e740 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1e750 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1e760 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1e770 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54            /* WIT
1e780 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65  H clause attache
1e790 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1e7a0 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 23 69  . Or NULL. */.#i
1e7b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1e7c0 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 57  T_WINDOWFUNC.  W
1e7d0 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20  indow *pWin;    
1e7e0 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1e7f0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
1e800 73 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 70  s */.  Window *p
1e810 57 69 6e 44 65 66 6e 3b 20 20 20 20 20 20 2f 2a  WinDefn;      /*
1e820 20 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 77   List of named w
1e830 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69 6f 6e  indow definition
1e840 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  s */.#endif.};..
1e850 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1e860 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
1e870 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
1e880 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
1e890 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
1e8a0 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61   Flag"..**.** Va
1e8b0 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1e8c0 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1e8d0 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20   assert()).**   
1e8e0 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20    SF_HasAgg     
1e8f0 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20  == NC_HasAgg.** 
1e900 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67      SF_MinMaxAgg
1e910 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67    == NC_MinMaxAg
1e920 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  g     == SQLITE_
1e930 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20  FUNC_MINMAX.**  
1e940 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74     SF_FixedLimit
1e950 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49   == WHERE_USE_LI
1e960 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT.*/.#define S
1e970 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
1e980 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74   0x00001  /* Out
1e990 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
1e9a0 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
1e9b0 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20  e SF_All        
1e9c0 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20      0x00002  /* 
1e9d0 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c  Includes the ALL
1e9e0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1e9f0 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
1ea00 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f        0x00004  /
1ea10 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
1ea20 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
1ea30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1ea40 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78  ggregate      0x
1ea50 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69  00008  /* Contai
1ea60 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73  ns agg functions
1ea70 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a   or a GROUP BY *
1ea80 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1ea90 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30  Agg         0x00
1eaa0 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  010  /* Contains
1eab0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1eac0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
1ead0 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
1eae0 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73    0x00020  /* Us
1eaf0 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
1eb00 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
1eb10 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
1eb20 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30  ed       0x00040
1eb30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
1eb40 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
1eb50 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
1eb60 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
1eb70 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20  nfo    0x00080  
1eb80 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
1eb90 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
1eba0 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
1ebb0 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
1ebc0 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20      0x00100  /* 
1ebd0 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
1ebe0 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66  nd query */.#def
1ebf0 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
1ec00 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f        0x00200  /
1ec10 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
1ec20 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
1ec30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1ec40 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78  ultiValue     0x
1ec50 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65  00400  /* Single
1ec60 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74   VALUES term wit
1ec70 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1ec80 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
1ec90 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30  stedFrom     0x0
1eca0 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0800  /* Part of
1ecb0 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
1ecc0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1ecd0 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61  #define SF_MinMa
1ece0 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30  xAgg      0x0100
1ecf0 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
1ed00 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29  containing min()
1ed10 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65   or max() */.#de
1ed20 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76  fine SF_Recursiv
1ed30 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20  e      0x02000  
1ed40 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65  /* The recursive
1ed50 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72   part of a recur
1ed60 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66  sive CTE */.#def
1ed70 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69  ine SF_FixedLimi
1ed80 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f  t     0x04000  /
1ed90 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74  * nSelectRow set
1eda0 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c   by a constant L
1edb0 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT */.#define 
1edc0 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
1edd0 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65    0x08000  /* Ne
1ede0 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
1edf0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1ee00 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1ee10 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
1ee20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79    0x10000  /* By
1ee30 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1ee40 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1ee50 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1ee60 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20  _IncludeHidden  
1ee70 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c  0x20000  /* Incl
1ee80 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ude hidden colum
1ee90 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a  ns in output */.
1eea0 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6c  #define SF_Compl
1eeb0 65 78 52 65 73 75 6c 74 20 20 30 78 34 30 30 30  exResult  0x4000
1eec0 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 6e  0  /* Result con
1eed0 74 61 69 6e 73 20 73 75 62 71 75 65 72 79 20 6f  tains subquery o
1eee0 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  r function */.#d
1eef0 65 66 69 6e 65 20 53 46 5f 57 68 65 72 65 42 65  efine SF_WhereBe
1ef00 67 69 6e 20 20 20 20 20 30 78 38 30 30 30 30 20  gin     0x80000 
1ef10 20 2f 2a 20 52 65 61 6c 6c 79 20 61 20 57 68 65   /* Really a Whe
1ef20 72 65 42 65 67 69 6e 28 29 20 63 61 6c 6c 2e 20  reBegin() call. 
1ef30 20 44 65 62 75 67 20 4f 6e 6c 79 20 2a 2f 0a 0a   Debug Only */..
1ef40 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
1ef50 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61  s of a SELECT ca
1ef60 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
1ef70 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1ef80 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  , as defined.** 
1ef90 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  by one of the fo
1efa0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20  llowing macros. 
1efb0 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66 69   The "SRT" prefi
1efc0 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
1efd0 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e  Result.** Type".
1efe0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55  .**.**     SRT_U
1eff0 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65  nion       Store
1f000 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65   results as a ke
1f010 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  y in a temporary
1f020 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20   index.**       
1f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 64                id
1f040 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65 73  entified by pDes
1f050 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1f060 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70 74  *     SRT_Except
1f070 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73        Remove res
1f080 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65  ults from the te
1f090 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44  mporary index pD
1f0a0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1f0b0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73  .**     SRT_Exis
1f0c0 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61 20  ts      Store a 
1f0d0 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 in memory cell
1f0e0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1f0f0 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  if the result.**
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f110 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20       set is not 
1f120 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  empty..**.**    
1f130 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1f140 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c   Throw the resul
1f150 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20 69  ts away.  This i
1f160 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43 54  s used by SELECT
1f170 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f180 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
1f190 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
1f1a0 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75  rs whose only pu
1f1b0 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20  rpose is.**     
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74 73  the side-effects
1f1e0 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a   of functions..*
1f1f0 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20  *.** All of the 
1f200 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20 74  above are free t
1f210 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f  o ignore their O
1f220 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20  RDER BY clause. 
1f230 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f  Those that.** fo
1f240 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20  llow must honor 
1f250 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1f260 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1f270 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47  RT_Output      G
1f280 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66  enerate a row of
1f290 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20 74   output (using t
1f2a0 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a  he OP_ResultRow.
1f2b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f2c0 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66         opcode) f
1f2d0 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
1f2e0 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a  he result set..*
1f2f0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d  *.**     SRT_Mem
1f300 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61           Only va
1f310 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  lid if the resul
1f320 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  t is a single co
1f330 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20  lumn..**        
1f340 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 6f               Sto
1f350 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c  re the first col
1f360 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74  umn of the first
1f370 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20   result row.**  
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f390 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20 70     in register p
1f3a0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68  Dest->iSDParm th
1f3b0 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72  en abandon the r
1f3c0 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  est.**          
1f3d0 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
1f3e0 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20 64  e query.  This d
1f3f0 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69  estination impli
1f400 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a  es "LIMIT 1"..**
1f410 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20  .**     SRT_Set 
1f420 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73 75          The resu
1f430 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e  lt must be a sin
1f440 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f  gle column.  Sto
1f450 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20  re each.**      
1f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f470 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20  ow of result as 
1f480 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65  the key in table
1f490 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1f4a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f4b0 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68          Apply th
1f4c0 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74  e affinity pDest
1f4d0 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65  ->affSdst before
1f4e0 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20   storing.**     
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74  results.  Used t
1f510 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20  o implement "IN 
1f520 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a  (SELECT ...)"..*
1f530 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68  *.**     SRT_Eph
1f540 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20  emTab    Create 
1f550 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  an temporary tab
1f560 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1f570 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20  m and store.**  
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f590 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68     the result th
1f5a0 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20  ere. The cursor 
1f5b0 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74  is left open aft
1f5c0 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  er.**           
1f5d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f5e0 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69  ing.  This is li
1f5f0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63  ke SRT_Table exc
1f600 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20  ept that.**     
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f620 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  this destination
1f630 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68   uses OP_OpenEph
1f640 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65  emeral to create
1f650 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f660 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c          the tabl
1f670 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  e first..**.**  
1f680 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65     SRT_Coroutine
1f690 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f     Generate a co
1f6a0 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65  -routine that re
1f6b0 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20  turns a new row 
1f6c0 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
1f6d0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1f6e0 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69  s each time it i
1f6f0 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20  s invoked.  The 
1f700 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20  entry point.**  
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75     of the co-rou
1f730 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69  tine is stored i
1f740 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1f750 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20  ->iSDParm.**    
1f760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f770 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
1f780 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
1f790 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65   pDest->nDest re
1f7a0 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20  gisters.**      
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f7c0 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65  tarting with pDe
1f7d0 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a  st->iSdst..**.**
1f7e0 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20       SRT_Table  
1f7f0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1f800 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ts in temporary 
1f810 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f820 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54  Parm..**     SRT
1f830 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69  _Fifo        Thi
1f840 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70  s is like SRT_Ep
1f850 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68  hemTab except th
1f860 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  at the table.** 
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74      is assumed t
1f890 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65  o already be ope
1f8a0 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73  n.  SRT_Fifo has
1f8b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f8c0 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69          the addi
1f8d0 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20  tional property 
1f8e0 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  of being able to
1f8f0 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20   ignore.**      
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f910 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1f920 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  se..**.**     SR
1f930 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74  T_DistFifo    St
1f940 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61  ore results in a
1f950 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1f960 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1f970 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f980 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f          But also
1f990 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74   use temporary t
1f9a0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1f9b0 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20  arm+1 as.**     
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9d0 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20  a record of all 
1f9e0 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e  prior results an
1f9f0 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70  d ignore any dup
1fa00 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  licate.**       
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1fa20 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a  ws.  Name means:
1fa30 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f    "Distinct Fifo
1fa40 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1fa50 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f  _Queue       Sto
1fa60 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1fa70 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1fa80 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61  st->iSDParm (rea
1fa90 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  lly.**          
1faa0 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e             an in
1fab0 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20  dex).  Append a 
1fac0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1fad0 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72  so that all entr
1fae0 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ies.**          
1faf0 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64             are d
1fb00 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20  istinct..**.**  
1fb10 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65     SRT_DistQueue
1fb20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1fb30 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1fb40 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1fb50 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20  m only if.**    
1fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb70 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64   the same record
1fb80 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
1fb90 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20  stored before.  
1fba0 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  The.**          
1fbb0 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
1fbc0 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61   at pDest->iSDPa
1fbd0 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72  rm+1 hold all pr
1fbe0 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23  ior stores..*/.#
1fbf0 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
1fc00 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
1fc10 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
1fc20 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1fc30 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
1fc40 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
1fc50 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
1fc60 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
1fc70 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1fc80 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
1fc90 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
1fca0 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
1fcb0 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
1fcc0 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
1fcd0 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
1fce0 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
1fcf0 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65   anywhere */.#de
1fd00 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20  fine SRT_Fifo   
1fd10 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72        5  /* Stor
1fd20 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
1fd30 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
1fd40 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
1fd50 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f  ine SRT_DistFifo
1fd60 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20       6  /* Like 
1fd70 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e  SRT_Fifo, but un
1fd80 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1fd90 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1fda0 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20  _Queue        7 
1fdb0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1fdc0 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a   in an queue */.
1fdd0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1fde0 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c  Queue    8  /* L
1fdf0 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62  ike SRT_Queue, b
1fe00 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1fe10 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68  s only */../* Th
1fe20 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1fe30 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
1fe40 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
1fe50 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
1fe60 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
1fe70 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
1fe80 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64  T_DistQueue)..#d
1fe90 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74  efine SRT_Output
1fea0 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74         9  /* Out
1feb0 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  put each row of 
1fec0 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1fed0 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20  e SRT_Mem       
1fee0 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72    10  /* Store r
1fef0 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72  esult in a memor
1ff00 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e  y cell */.#defin
1ff10 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20  e SRT_Set       
1ff20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72    11  /* Store r
1ff30 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69  esults as keys i
1ff40 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1ff50 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
1ff60 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65  ab    12  /* Cre
1ff70 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
1ff80 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
1ff90 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
1ffa0 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
1ffb0 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e  ine   13  /* Gen
1ffc0 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
1ffd0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1ffe0 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c  #define SRT_Tabl
1fff0 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53  e       14  /* S
20000 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
20010 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
20020 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a  matic rowid */..
20030 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
20040 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  e of this object
20050 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65   describes where
20060 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72   to put of the r
20070 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53  esults of.** a S
20080 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
20090 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
200a0 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65  tDest {.  u8 eDe
200b0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
200c0 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
200d0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
200e0 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
200f0 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ove. */.  int iS
20100 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f  DParm;         /
20110 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
20120 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
20130 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
20140 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
20150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
20160 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
20170 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
20180 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
20190 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
201a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
201b0 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
201c0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 53  */.  char *zAffS
201d0 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  dst;      /* Aff
201e0 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
201f0 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
20200 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
20210 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20  rderBy;  /* Key 
20220 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f  columns for SRT_
20230 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69  Queue and SRT_Di
20240 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f  stQueue */.};../
20250 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
20260 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
20270 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
20280 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
20290 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20  UTOINCREMENT.** 
202a0 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
202b0 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
202c0 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
202d0 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
202e0 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
202f0 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
20300 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
20310 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
20320 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
20330 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
20340 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
20350 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
20360 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
20370 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
20380 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
20390 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65  inserts are done
203a0 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
203b0 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
203c0 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
203d0 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
203e0 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
203f0 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
20400 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
20410 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
20420 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
20430 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
20440 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
20450 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
20460 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
20470 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
20480 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
20490 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
204a0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
204b0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
204c0 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
204d0 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
204e0 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
204f0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
20500 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
20510 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
20520 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
20530 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
20540 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
20550 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
20560 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
20570 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65  .};../*.** At le
20580 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65  ast one instance
20590 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
205a0 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63  g structure is c
205b0 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a  reated for each.
205c0 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
205d0 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
205e0 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
205f0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
20600 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
20610 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
20620 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
20630 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
20640 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
20650 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
20660 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
20670 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
20680 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
20690 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
206a0 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
206b0 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
206c0 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
206d0 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
206e0 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
206f0 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
20700 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
20710 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
20720 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
20730 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
20740 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
20750 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
20760 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
20770 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
20780 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
20790 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
207a0 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
207b0 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
207c0 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
207d0 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
207e0 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
207f0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
20800 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
20810 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
20820 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
20830 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
20840 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
20850 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
20860 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
20870 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e  .** statements).
20880 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20   Similarly, the 
20890 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
208a0 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20  ask[1] variable 
208b0 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d  is set to.** a m
208c0 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
208d0 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65  umns used by the
208e0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72   program..*/.str
208f0 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b  uct TriggerPrg {
20900 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
20910 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72  gger;      /* Tr
20920 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72  igger this progr
20930 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f  am was coded fro
20940 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  m */.  TriggerPr
20950 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  g *pNext;      /
20960 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20  * Next entry in 
20970 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
20980 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50  g list */.  SubP
20990 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
209a0 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69  ;   /* Program i
209b0 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69  mplementing pTri
209c0 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20  gger/orconf */. 
209d0 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20   int orconf;    
209e0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
209f0 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
20a00 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20  policy */.  u32 
20a10 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20  aColmask[2];    
20a20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20      /* Masks of 
20a30 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c  old.*, new.* col
20a40 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f  umns accessed */
20a50 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79  .};../*.** The y
20a60 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20  DbMask datatype 
20a70 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20  for the bitmask 
20a80 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
20a90 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69  databases..*/.#i
20aa0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
20ab0 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64  ACHED>30.  typed
20ac0 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  ef unsigned char
20ad0 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45   yDbMask[(SQLITE
20ae0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29  _MAX_ATTACHED+9)
20af0 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  /8];.# define Db
20b00 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
20b10 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31   (((M)[(I)/8]&(1
20b20 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a  <<((I)&7)))!=0).
20b30 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
20b40 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73  ero(M)      mems
20b50 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28  et((M),0,sizeof(
20b60 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  M)).# define DbM
20b70 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
20b80 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c  (M)[(I)/8]|=(1<<
20b90 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e  ((I)&7)).# defin
20ba0 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
20bb0 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  M)   sqlite3DbMa
20bc0 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64  skAllZero(M).# d
20bd0 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
20be0 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65  ero(M)   (sqlite
20bf0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
20c00 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79  )==0).#else.  ty
20c10 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69  pedef unsigned i
20c20 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65  nt yDbMask;.# de
20c30 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
20c40 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28  M,I)    (((M)&((
20c50 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
20c60 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
20c70 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
20c80 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e     (M)=0.# defin
20c90 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
20ca0 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62       (M)|=(((yDb
20cb0 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20  Mask)1)<<(I)).# 
20cc0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
20cd0 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30  Zero(M)   (M)==0
20ce0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20cf0 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  NonZero(M)   (M)
20d00 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  !=0.#endif../*.*
20d10 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20  * An SQL parser 
20d20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79  context.  A copy
20d30 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
20d40 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72  re is passed thr
20d50 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  ough.** the pars
20d60 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f  er and down into
20d70 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20   all the parser 
20d80 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69  action routine i
20d90 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61  n order to.** ca
20da0 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72  rry around infor
20db0 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67  mation that is g
20dc0 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74  lobal to the ent
20dd0 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a  ire parse..**.**
20de0 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69   The structure i
20df0 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74  s divided into t
20e00 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20  wo parts.  When 
20e10 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63  the parser and c
20e20 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20  ode.** generate 
20e30 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20  call themselves 
20e40 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65  recursively, the
20e50 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74   first part of t
20e60 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  he structure.** 
20e70 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20  is constant but 
20e80 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20  the second part 
20e90 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20  is reset at the 
20ea0 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e  beginning and en
20eb0 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63  d of.** each rec
20ec0 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ursion..**.** Th
20ed0 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64  e nTableLock and
20ee0 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69   aTableLock vari
20ef0 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75  ables are only u
20f00 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65  sed if the share
20f10 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75  d-cache.** featu
20f20 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
20f30 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
20f40 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
20f50 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
20f60 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
20f70 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
20f80 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
20f90 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
20fa0 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
20fb0 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
20fc0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
20fd0 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
20fe0 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
20ff0 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
21000 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
21010 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
21020 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
21030 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
21040 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
21050 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
21060 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
21070 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
21080 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
21090 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
210a0 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
210b0 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
210c0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
210d0 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
210e0 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
210f0 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
21100 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
21110 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
21120 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
21130 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
21140 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
21150 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
21160 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
21170 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
21180 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
21190 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
211a0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
211b0 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
211c0 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
211d0 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
211e0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
211f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
21200 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
21210 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
21220 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
21230 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
21240 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
21250 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
21260 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
21270 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
21280 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
21290 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
212a0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
212b0 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
212c0 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
212d0 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
212e0 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
212f0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
21300 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
21310 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
21320 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
21330 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
21340 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f  /.  u8 disableLo
21350 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62  okaside; /* Numb
21360 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b  er of times look
21370 61 73 69 64 65 20 68 61 73 20 62 65 65 6e 20 64  aside has been d
21380 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20  isabled */.  u8 
21390 64 69 73 61 62 6c 65 56 74 61 62 3b 20 20 20 20  disableVtab;    
213a0 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 61 6c 6c    /* Disable all
213b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
213c0 66 6f 72 20 74 68 69 73 20 70 61 72 73 65 20 2a  for this parse *
213d0 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
213e0 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
213f0 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
21400 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
21410 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
21420 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
21430 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
21440 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
21450 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
21460 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
21470 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21480 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
21490 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
214a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
214b0 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
214c0 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
214d0 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
214e0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
214f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
21500 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
21510 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 73 7a   far */.  int sz
21520 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f  OpAlloc;       /
21530 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72  * Bytes of memor
21540 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  y space allocate
21550 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
21560 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54   */.  int iSelfT
21570 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ab;        /* Ta
21580 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ble associated w
21590 69 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  ith an index on 
215a0 65 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76  expr, or negativ
215b0 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
215c0 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74           ** of t
215d0 68 65 20 62 61 73 65 20 72 65 67 69 73 74 65 72  he base register
215e0 20 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f   during check-co
215f0 6e 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f  nstraint eval */
21600 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
21610 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 2a          /* The *
21620 6e 65 67 61 74 69 76 65 2a 20 6f 66 20 74 68 65  negative* of the
21630 20 6e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c   number of label
21640 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20  s used */.  int 
21650 6e 4c 61 62 65 6c 41 6c 6c 6f 63 3b 20 20 20 20  nLabelAlloc;    
21660 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
21670 6f 74 73 20 69 6e 20 61 4c 61 62 65 6c 20 2a 2f  ots in aLabel */
21680 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
21690 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
216a0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
216b0 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  els */.  ExprLis
216c0 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
216d0 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
216e0 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
216f0 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
21700 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
21710 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
21720 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
21730 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
21740 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
21750 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
21760 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
21770 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
21780 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
21790 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
217a0 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
217b0 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
217c0 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
217d0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
217e0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
217f0 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
21800 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
21810 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
21820 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
21830 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
21840 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
21850 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
21860 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
21870 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
21880 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
21890 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
218a0 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c  am */.  int nSel
218b0 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
218c0 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
218d0 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72 20   stmts. Counter 
218e0 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49 64  for Select.selId
218f0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
21900 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
21910 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c  ACHE.  int nTabl
21920 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  eLock;        /*
21930 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73   Number of locks
21940 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a   in aTableLock *
21950 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61  /.  TableLock *a
21960 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65  TableLock; /* Re
21970 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63  quired table loc
21980 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  ks for shared-ca
21990 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64  che mode */.#end
219a0 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f  if.  AutoincInfo
219b0 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66   *pAinc;  /* Inf
219c0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41  ormation about A
219d0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75  UTOINCREMENT cou
219e0 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65  nters */.  Parse
219f0 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20   *pToplevel;    
21a00 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75  /* Parse structu
21a10 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67  re for main prog
21a20 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f  ram (or NULL) */
21a30 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67  .  Table *pTrigg
21a40 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65  erTab;  /* Table
21a50 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65   triggers are be
21a60 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f  ing coded for */
21a70 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 65 6e  .  Parse *pParen
21a80 74 50 61 72 73 65 3b 20 2f 2a 20 50 61 72 65 6e  tParse; /* Paren
21a90 74 20 70 61 72 73 65 72 20 69 66 20 74 68 69 73  t parser if this
21aa0 20 70 61 72 73 65 72 20 69 73 20 6e 65 73 74 65   parser is neste
21ab0 64 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  d */.  int addrC
21ac0 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41  rTab;       /* A
21ad0 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65  ddress of OP_Cre
21ae0 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20  ateBtree opcode 
21af0 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  on CREATE TABLE 
21b00 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c  */.  u32 nQueryL
21b10 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74  oop;      /* Est
21b20 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61   number of itera
21b30 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79  tions of a query
21b40 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f   (10*log2(N)) */
21b50 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20  .  u32 oldmask; 
21b60 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
21b70 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
21b80 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
21b90 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20   u32 newmask;   
21ba0 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
21bb0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   new.* columns r
21bc0 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
21bd0 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20  8 eTriggerOp;   
21be0 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45      /* TK_UPDATE
21bf0 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54  , TK_INSERT or T
21c00 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38  K_DELETE */.  u8
21c10 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20   eOrconf;       
21c20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
21c30 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
21c40 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65   for trigger ste
21c50 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ps */.  u8 disab
21c60 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20  leTriggers;  /* 
21c70 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20  True to disable 
21c80 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f  triggers */..  /
21c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21cc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21cd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
21ce0 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73  Fields above mus
21cf0 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
21d00 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66   to zero.  The f
21d10 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f  ields that follo
21d20 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20  w,.  ** down to 
21d30 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
21d40 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73   the recursive s
21d50 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e  ection, do not n
21d60 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69  eed to be.  ** i
21d70 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68  nitialized as th
21d80 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62  ey will be set b
21d90 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64  efore being used
21da0 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
21db0 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e  is.  ** determin
21dc0 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50  ed by offsetof(P
21dd0 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29 2e 0a  arse,aTempReg)..
21de0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
21df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21e10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
21e30 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d   int aTempReg[8]
21e40 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64  ;        /* Hold
21e50 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
21e60 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
21e70 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d   */.  Token sNam
21e80 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  eToken;       /*
21e90 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
21ea0 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
21eb0 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20  bject name */.. 
21ec0 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
21ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21ef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21f00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
21f10 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e  Above is constan
21f20 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73  t between recurs
21f30 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20  ions.  Below is 
21f40 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64  reset before and
21f50 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68   after.  ** each
21f60 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65   recursion.  The
21f70 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65   boundary betwee
21f80 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69  n these two regi
21f90 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ons is determine
21fa0 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66  d.  ** using off
21fb0 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73  setof(Parse,sLas
21fc0 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20 73  tToken) so the s
21fd0 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20  LastToken field 
21fe0 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a 2a  must be the.  **
21ff0 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20   first field in 
22000 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65  the recursive re
22010 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  gion..  ********
22020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22060 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  /..  Token sLast
22070 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20  Token;       /* 
22080 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70  The last token p
22090 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72  arsed */.  ynVar
220a0 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20   nVar;          
220b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
220c0 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
220d0 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
220e0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 69  so far */.  u8 i
220f0 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  PkSortOrder;    
22100 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20        /* ASC or 
22110 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52  DESC for INTEGER
22120 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
22130 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20    u8 explain;   
22140 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22150 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41  rue if the EXPLA
22160 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64  IN flag is found
22170 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f   on the query */
22180 0a 23 69 66 20 21 28 64 65 66 69 6e 65 64 28 53  .#if !(defined(S
22190 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
221a0 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69  ALTABLE) && defi
221b0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
221c0 41 4c 54 45 52 54 41 42 4c 45 29 29 0a 20 20 75  ALTERTABLE)).  u
221d0 38 20 65 50 61 72 73 65 4d 6f 64 65 3b 20 20 20  8 eParseMode;   
221e0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 41 52 53           /* PARS
221f0 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74  E_MODE_XXX const
22200 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ant */.#endif.#i
22210 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
22220 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
22230 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20   int nVtabLock; 
22240 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
22250 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
22260 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a  tables to lock *
22270 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e  /.#endif.  int n
22280 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
22290 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
222a0 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
222b0 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
222c0 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
222d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
222e0 41 49 4e 0a 20 20 69 6e 74 20 61 64 64 72 45 78  AIN.  int addrEx
222f0 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20  plain;          
22300 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 63 75  /* Address of cu
22310 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e  rrent OP_Explain
22320 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
22330 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73  f.  VList *pVLis
22340 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
22350 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e   Mapping between
22360 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20   variable names 
22370 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20  and numbers */. 
22380 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
22390 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
223a0 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
223b0 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
223c0 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
223d0 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
223e0 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
223f0 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
22400 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
22410 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
22420 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
22430 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
22440 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
22450 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
22460 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
22470 77 49 6e 64 65 78 3b 20 20 20 20 20 20 20 20 20  wIndex;         
22480 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62 65 69 6e  /* An index bein
22490 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
224a0 20 43 52 45 41 54 45 20 49 4e 44 45 58 2e 0a 20   CREATE INDEX.. 
224b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224c0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 6c             ** Al
224d0 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  so used to hold 
224e0 72 65 64 75 6e 64 61 6e 74 20 55 4e 49 51 55 45  redundant UNIQUE
224f0 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20 20   constraints.   
22500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22510 20 20 20 20 20 20 20 20 20 2a 2a 20 64 75 72 69           ** duri
22520 6e 67 20 61 20 52 45 4e 41 4d 45 20 43 4f 4c 55  ng a RENAME COLU
22530 4d 4e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  MN */.  Trigger 
22540 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
22550 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
22560 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
22570 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
22580 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
22590 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
225a0 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
225b0 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
225c0 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23  h callbacks */.#
225d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
225e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
225f0 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
22600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
22610 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
22620 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
22630 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
22640 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
22650 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
22660 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
22670 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
22680 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
22690 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
226a0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
226b0 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
226c0 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
226d0 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
226e0 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
226f0 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
22700 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
22710 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
22720 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
22730 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
22740 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
22750 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a  NULL */.  With *
22760 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20  pWithToFree;    
22770 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73      /* Free this
22780 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20   WITH object at 
22790 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
227a0 61 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20  arse */.#ifndef 
227b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
227c0 52 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65 54  RTABLE.  RenameT
227d0 6f 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20 20  oken *pRename;  
227e0 20 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75 62     /* Tokens sub
227f0 6a 65 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e 67  ject to renaming
22800 20 62 79 20 41 4c 54 45 52 20 54 41 42 4c 45 20   by ALTER TABLE 
22810 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64  */.#endif.};..#d
22820 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
22830 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 30  _NORMAL        0
22840 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d  .#define PARSE_M
22850 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41 42  ODE_DECLARE_VTAB
22860 20 20 31 0a 23 64 65 66 69 6e 65 20 50 41 52 53    1.#define PARS
22870 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f  E_MODE_RENAME_CO
22880 4c 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20 50  LUMN 2.#define P
22890 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45  ARSE_MODE_RENAME
228a0 5f 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a  _TABLE  3../*.**
228b0 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74   Sizes and point
228c0 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70  ers of various p
228d0 61 72 74 73 20 6f 66 20 74 68 65 20 50 61 72 73  arts of the Pars
228e0 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65  e object..*/.#de
228f0 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53  fine PARSE_HDR_S
22900 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  Z offsetof(Parse
22910 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a 20 52 65  ,aTempReg) /* Re
22920 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f  cursive part w/o
22930 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65   aColCache*/.#de
22940 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52  fine PARSE_RECUR
22950 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50  SE_SZ offsetof(P
22960 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29  arse,sLastToken)
22970 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65      /* Recursive
22980 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
22990 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28   PARSE_TAIL_SZ (
229a0 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41  sizeof(Parse)-PA
229b0 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
229c0 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65  /* Non-recursive
229d0 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
229e0 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28   PARSE_TAIL(X) (
229f0 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52  ((char*)(X))+PAR
22a00 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20  SE_RECURSE_SZ)  
22a10 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61  /* Pointer to ta
22a20 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  il */../*.** Ret
22a30 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
22a40 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
22a50 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
22a60 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
22a70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
22a80 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
22a90 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
22aa0 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
22ab0 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
22ac0 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
22ad0 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 3d  rse->eParseMode=
22ae0 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43 4c  =PARSE_MODE_DECL
22af0 41 52 45 5f 56 54 41 42 29 0a 23 65 6e 64 69 66  ARE_VTAB).#endif
22b00 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
22b10 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
22b20 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20  ABLE).  #define 
22b30 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54  IN_RENAME_OBJECT
22b40 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
22b50 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a  ne IN_RENAME_OBJ
22b60 45 43 54 20 28 70 50 61 72 73 65 2d 3e 65 50 61  ECT (pParse->ePa
22b70 72 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f 4d  rseMode>=PARSE_M
22b80 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d  ODE_RENAME_COLUM
22b90 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  N).#endif..#if d
22ba0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22bb0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
22bc0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
22bd0 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
22be0 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  LE).  #define IN
22bf0 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20 30  _SPECIAL_PARSE 0
22c00 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
22c10 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53   IN_SPECIAL_PARS
22c20 45 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73  E (pParse->ePars
22c30 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f 44  eMode!=PARSE_MOD
22c40 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69 66  E_NORMAL).#endif
22c50 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
22c60 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
22c70 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
22c80 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
22c90 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
22ca0 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
22cb0 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
22cc0 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
22cd0 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
22ce0 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
22cf0 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
22d00 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
22d10 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
22d20 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
22d30 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
22d40 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
22d50 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
22d60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
22d70 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
22d80 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
22d90 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
22da0 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
22db0 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a  ous opcodes..**.
22dc0 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
22dd0 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
22de0 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
22df0 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54      OPFLAG_LENGT
22e00 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  HARG    == SQLIT
22e10 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a  E_FUNC_LENGTH.**
22e20 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f      OPFLAG_TYPEO
22e30 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  FARG    == SQLIT
22e40 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a  E_FUNC_TYPEOF.**
22e50 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43      OPFLAG_BULKC
22e60 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45  SR      == BTREE
22e70 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20  _BULKLOAD.**    
22e80 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
22e90 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45      == BTREE_SEE
22ea0 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  K_EQ.**    OPFLA
22eb0 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d  G_FORDELETE    =
22ec0 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  = BTREE_FORDELET
22ed0 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  E.**    OPFLAG_S
22ee0 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42  AVEPOSITION == B
22ef0 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f  TREE_SAVEPOSITIO
22f00 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41  N.**    OPFLAG_A
22f10 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  UXDELETE    == B
22f20 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a  TREE_AUXDELETE.*
22f30 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22f40 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
22f50 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73  x01    /* OP_Ins
22f60 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61  ert: Set to upda
22f70 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
22f80 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
22f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fa0 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75         /* Also u
22fb0 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50  sed in P2 (not P
22fc0 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20  5) of OP_Delete 
22fd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22fe0 47 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20 20 20  G_NOCHNG        
22ff0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56 43  0x01    /* OP_VC
23000 6f 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20 66  olumn nochange f
23010 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
23020 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45  fine OPFLAG_EPHE
23030 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20  M         0x01  
23040 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20    /* OP_Column: 
23050 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74  Ephemeral output
23060 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e   is ok */.#defin
23070 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
23080 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20 2f  ID     0x20    /
23090 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
230a0 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f  db->lastRowid */
230b0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
230c0 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78  ISUPDATE      0x
230d0 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50  04    /* This OP
230e0 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71  _Insert is an sq
230f0 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  l UPDATE */.#def
23100 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  ine OPFLAG_APPEN
23110 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20  D        0x08   
23120 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65   /* This is like
23130 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
23140 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  nd */.#define OP
23150 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
23160 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72  LT 0x10    /* Tr
23170 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65  y to avoid a see
23180 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74  k in BtreeInsert
23190 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
231a0 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20  FLAG_ISNOOP     
231b0 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
231c0 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65  _Delete does pre
231d0 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c  -update-hook onl
231e0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
231f0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
23200 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
23210 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
23220 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
23230 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
23240 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
23250 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
23260 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
23270 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
23280 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
23290 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
232a0 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
232b0 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
232c0 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
232d0 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  ne OPFLAG_SEEKEQ
232e0 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20          0x02    
232f0 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72  /* OP_Open** cur
23300 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b  sor uses EQ seek
23310 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
23320 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
23330 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a  E     0x08    /*
23340 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20   OP_Open should 
23350 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c  use BTREE_FORDEL
23360 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE */.#define O
23370 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20  PFLAG_P2ISREG   
23380 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50      0x10    /* P
23390 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69  2 to OP_Open** i
233a0 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d  s a register num
233b0 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ber */.#define O
233c0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20  PFLAG_PERMUTE   
233d0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
233e0 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74  P_Compare: use t
233f0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
23400 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
23410 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30  _SAVEPOSITION  0
23420 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x02    /* OP_Del
23430 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65  ete/Insert: save
23440 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23   cursor pos */.#
23450 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55  define OPFLAG_AU
23460 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34  XDELETE     0x04
23470 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
23480 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c  : index in a DEL
23490 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69 6e  ETE op */.#defin
234a0 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f  e OPFLAG_NOCHNG_
234b0 4d 41 47 49 43 20 20 30 78 36 64 20 20 20 20 2f  MAGIC  0x6d    /
234c0 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a  * OP_MakeRecord:
234d0 20 73 65 72 69 61 6c 74 79 70 65 20 31 30 20 69   serialtype 10 i
234e0 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  s ok */../*. * E
234f0 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
23500 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
23510 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
23520 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
23530 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
23540 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20   Trigger.. *. * 
23550 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
23560 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
23570 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
23580 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
23590 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
235a0 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
235b0 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
235c0 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
235d0 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20  presents the. * 
235e0 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
235f0 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
23600 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
23610 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
23620 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
23630 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
23640 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
23650 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
23660 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
23670 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
23680 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
23690 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
236a0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
236b0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
236c0 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
236d0 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
236e0 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
236f0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
23700 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
23710 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
23720 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
23730 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
23740 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
23750 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
23760 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
23770 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
23780 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
23790 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
237a0 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
237b0 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
237c0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
237d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
237e0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
237f0 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
23800 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
23810 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
23820 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
23830 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
23840 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
23850 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
23860 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
23870 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
23880 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
23890 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
238a0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
238b0 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
238c0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
238d0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
238e0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
238f0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
23900 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
23910 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
23920 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
23930 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
23940 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
23950 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
23960 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
23970 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
23980 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239a0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
239b0 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
239c0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
239d0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
239e0 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
239f0 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
23a00 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
23a10 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
23a20 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
23a30 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
23a40 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
23a50 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
23a60 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
23a70 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
23a80 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
23a90 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
23aa0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
23ab0 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
23ac0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
23ad0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
23ae0 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
23af0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
23b00 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
23b10 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
23b20 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
23b30 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
23b40 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  which..**.** If 
23b50 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
23b60 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
23b70 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
23b80 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
23b90 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
23ba0 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
23bb0 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
23bc0 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
23bd0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
23be0 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
23bf0 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
23c00 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
23c10 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
23c20 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
23c30 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
23c40 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
23c50 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
23c60 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
23c70 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
23c80 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65  .. *. * Instance
23c90 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
23ca0 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
23cb0 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
23cc0 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
23cd0 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
23ce0 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
23cf0 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
23d00 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
23d10 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61  mber of the. * a
23d20 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
23d30 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
23d40 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
23d50 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
23d60 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
23d70 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
23d80 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
23d90 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ram.. *. * The "
23da0 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63  op" member indic
23db0 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69  ates whether thi
23dc0 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c  s is a "DELETE",
23dd0 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41   "INSERT", "UPDA
23de0 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43  TE" or. * "SELEC
23df0 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  T" statement. Th
23e00 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
23e10 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20  e other members 
23e20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
23e30 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66   the. * value of
23e40 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
23e50 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
23e60 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
23e70 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
23e80 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
23e90 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
23ea0 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
23eb0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
23ec0 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
23ed0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
23ee0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
23ef0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
23f00 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
23f10 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
23f20 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
23f30 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  L.. * zTarget   
23f40 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
23f50 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
23f60 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
23f70 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
23f80 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
23f90 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
23fa0 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
23fb0 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
23fc0 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
23fd0 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
23fe0 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
23ff0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
24000 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
24010 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
24020 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
24030 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
24040 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .... *          
24050 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
24060 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
24070 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
24080 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
24090 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
240a0 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
240b0 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
240c0 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
240d0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
240e0 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
240f0 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
24100 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
24110 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
24120 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
24130 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
24140 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
24150 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
24160 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70   NULL.. *. * (op
24170 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20   == TK_UPDATE). 
24180 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
24190 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
241a0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
241b0 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  ate.. * pWhere  
241c0 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
241d0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44  lause of the UPD
241e0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ATE statement if
241f0 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
24200 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
24210 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
24220 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  L.. * pExprList 
24230 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65  -> A list of the
24240 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61   columns to upda
24250 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65  te and the expre
24260 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65  ssions to update
24270 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
24280 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71   them to. See sq
24290 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f  lite3Update() do
242a0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22  cumentation of "
242b0 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20  pChanges". *    
242c0 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
242d0 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63  nt.. *. */.struc
242e0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
242f0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
24300 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
24310 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
24320 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
24330 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
24340 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
24350 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
24360 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
24370 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
24380 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
24390 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
243a0 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
243b0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
243c0 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
243d0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  CT statement or 
243e0 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
243f0 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  TO SELECT ... */
24400 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74  .  char *zTarget
24410 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65  ;       /* Targe
24420 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
24430 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
24440 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
24450 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
24460 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
24470 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
24480 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
24490 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
244a0 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
244b0 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 20 2a  use for UPDATE *
244c0 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
244d0 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
244e0 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
244f0 45 52 54 20 2a 2f 0a 20 20 55 70 73 65 72 74 20  ERT */.  Upsert 
24500 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f 2a  *pUpsert;     /*
24510 20 55 70 73 65 72 74 20 63 6c 61 75 73 65 73 20   Upsert clauses 
24520 6f 6e 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f 0a  on an INSERT */.
24530 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
24540 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e         /* Origin
24550 61 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20 74  al SQL text of t
24560 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
24570 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e   TriggerStep *pN
24580 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e  ext;  /* Next in
24590 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a   the link-list *
245a0 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
245b0 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74  *pLast;  /* Last
245c0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b   element in link
245d0 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72  -list. Valid for
245e0 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a   1st elem only *
245f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
24600 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
24610 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
24620 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
24630 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
24640 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
24650 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
24660 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
24670 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
24680 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
24690 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  t..*/.typedef st
246a0 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46  ruct DbFixer DbF
246b0 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46  ixer;.struct DbF
246c0 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  ixer {.  Parse *
246d0 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20  pParse;      /* 
246e0 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74  The parsing cont
246f0 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73  ext.  Error mess
24700 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72  ages written her
24710 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
24720 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69  Schema;    /* Fi
24730 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20  x items to this 
24740 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
24750 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20  bVarOnly;       
24760 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72  /* Check for var
24770 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  iable references
24780 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74   only */.  const
24790 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
247a0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
247b0 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
247c0 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
247d0 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
247e0 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
247f0 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
24800 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
24810 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
24820 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
24830 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
24840 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
24850 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
24860 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
24870 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
24880 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
24890 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
248a0 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
248b0 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
248c0 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
248d0 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
248e0 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
248f0 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
24900 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74 72  ruct sqlite3_str
24910 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
24920 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74  ;         /* Opt
24930 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ional database f
24940 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43  or lookaside.  C
24950 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  an be NULL */.  
24960 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
24970 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
24980 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
24990 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41  far */.  u32  nA
249a0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  lloc;         /*
249b0 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65   Amount of space
249c0 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54   allocated in zT
249d0 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78  ext */.  u32  mx
249e0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
249f0 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64   Maximum allowed
24a00 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20   allocation.  0 
24a10 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73  for no malloc us
24a20 61 67 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43  age */.  u32  nC
24a30 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
24a40 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
24a50 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
24a60 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b    u8   accError;
24a70 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
24a80 5f 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54 45  _NOMEM or SQLITE
24a90 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20  _TOOBIG */.  u8 
24aa0 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20    printfFlags;  
24ab0 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e    /* SQLITE_PRIN
24ac0 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a  TF flags below *
24ad0 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  /.};.#define SQL
24ae0 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52  ITE_PRINTF_INTER
24af0 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74  NAL 0x01  /* Int
24b00 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63  ernal-use-only c
24b10 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65  onverters allowe
24b20 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
24b30 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55  ITE_PRINTF_SQLFU
24b40 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c  NC  0x02  /* SQL
24b50 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
24b60 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20  nts to VXPrintf 
24b70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
24b80 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
24b90 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20  D 0x04  /* True 
24ba0 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f  if xText is allo
24bb0 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a  cated space */..
24bc0 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63  #define isMalloc
24bd0 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72  ed(X)  (((X)->pr
24be0 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49  intfFlags & SQLI
24bf0 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
24c00 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20  ED)!=0).../*.** 
24c10 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
24c20 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
24c30 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
24c40 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
24c50 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
24c60 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
24c70 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
24c80 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
24c90 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
24ca0 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
24cb0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
24cc0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
24cd0 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
24ce0 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
24cf0 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
24d00 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
24d10 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
24d20 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
24d30 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
24d40 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
24d50 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
24d60 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
24d70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
24d80 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
24d90 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 33  red here */.  u3
24da0 32 20 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20 20  2 mInitFlags;   
24db0 20 20 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74 72    /* Flags contr
24dc0 6f 6c 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65 73  olling error mes
24dd0 73 61 67 65 73 20 2a 2f 0a 20 20 75 33 32 20 6e  sages */.  u32 n
24de0 49 6e 69 74 52 6f 77 3b 20 20 20 20 20 20 20 2f  InitRow;       /
24df0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  * Number of rows
24e00 20 70 72 6f 63 65 73 73 65 64 20 2a 2f 0a 7d 20   processed */.} 
24e10 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
24e20 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
24e30 66 6f 72 20 6d 49 6e 69 74 46 6c 61 67 73 0a 2a  for mInitFlags.*
24e40 2f 0a 23 64 65 66 69 6e 65 20 49 4e 49 54 46 4c  /.#define INITFL
24e50 41 47 5f 41 6c 74 65 72 54 61 62 6c 65 20 20 20  AG_AlterTable   
24e60 30 78 30 30 30 31 20 20 2f 2a 20 54 68 69 73 20  0x0001  /* This 
24e70 69 73 20 61 20 72 65 70 61 72 73 65 20 61 66 74  is a reparse aft
24e80 65 72 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2a  er ALTER TABLE *
24e90 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  /../*.** Structu
24ea0 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
24eb0 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
24ec0 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
24ed0 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
24ee0 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
24ef0 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
24f00 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
24f10 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
24f20 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
24f30 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
24f40 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
24f50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
24f60 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
24f70 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 75 38  y status */.  u8
24f80 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20   bCoreMutex;    
24f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fa0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
24fb0 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
24fc0 2a 2f 0a 20 20 75 38 20 62 46 75 6c 6c 4d 75 74  */.  u8 bFullMut
24fd0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
24fe0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
24ff0 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
25000 74 65 78 69 6e 67 20 2a 2f 0a 20 20 75 38 20 62  texing */.  u8 b
25010 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20  OpenUri;        
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25030 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72   True to interpr
25040 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20  et filenames as 
25050 55 52 49 73 20 2a 2f 0a 20 20 75 38 20 62 55 73  URIs */.  u8 bUs
25060 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20  eCis;           
25070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
25080 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69  se covering indi
25090 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61  ces for full-sca
250a0 6e 73 20 2a 2f 0a 20 20 75 38 20 62 53 6d 61 6c  ns */.  u8 bSmal
250b0 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  lMalloc;        
250c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 6f            /* Avo
250d0 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20  id large memory 
250e0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20 74  allocations if t
250f0 72 75 65 20 2a 2f 0a 20 20 75 38 20 62 45 78 74  rue */.  u8 bExt
25100 72 61 53 63 68 65 6d 61 43 68 65 63 6b 73 3b 20  raSchemaChecks; 
25110 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 65             /* Ve
25120 72 69 66 79 20 74 79 70 65 2c 6e 61 6d 65 2c 74  rify type,name,t
25130 62 6c 5f 6e 61 6d 65 20 69 6e 20 73 63 68 65 6d  bl_name in schem
25140 61 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72  a */.  int mxStr
25150 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
25160 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
25170 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  mum string lengt
25180 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72  h */.  int never
25190 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20  Corrupt;        
251a0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
251b0 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77  base is always w
251c0 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20  ell-formed */.  
251d0 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
25200 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
25210 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
25220 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
25230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
25240 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
25250 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
25260 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b   int nStmtSpill;
25270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25280 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e     /* Stmt-journ
25290 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b  al spill-to-disk
252a0 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20   threshold */.  
252b0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
252c0 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
252d0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
252e0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
252f0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
25300 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
25310 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
25320 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
25330 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
25340 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
25350 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
25360 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
25370 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
25380 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
25390 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
253a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
253b0 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
253c0 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
253d0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
253e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
253f0 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
25400 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
25410 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
25420 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
25430 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
25440 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71  ts sizes */.  sq
25450 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d  lite3_int64 szMm
25460 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
25470 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20  /* mmap() space 
25480 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f  per open file */
25490 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
254a0 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   mxMmap;        
254b0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
254c0 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70  value for szMmap
254d0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67   */.  void *pPag
254e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
254f0 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
25500 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cache memory */.
25510 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20    int szPage;   
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25530 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
25540 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67  ach page in pPag
25550 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61  e[] */.  int nPa
25560 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
25570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
25580 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
25590 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
255a0 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b  t mxParserStack;
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255c0 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  /* maximum depth
255d0 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73   of the parser s
255e0 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68  tack */.  int sh
255f0 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64  aredCacheEnabled
25600 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  ;           /* t
25610 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61  rue if shared-ca
25620 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64  che mode enabled
25630 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b   */.  u32 szPma;
25640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25650 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
25660 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69  um Sorter PMA si
25670 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61  ze */.  /* The a
25680 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e  bove might be in
25690 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e  itialized to non
256a0 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c  -zero.  The foll
256b0 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c  owing need to al
256c0 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61  ways.  ** initia
256d0 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77  lly be zero, how
256e0 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  ever. */.  int i
256f0 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  sInit;          
25700 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25710 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69  True after initi
25720 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69  alization has fi
25730 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nished */.  int 
25740 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  inProgress;     
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25760 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74   True while init
25770 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72  ialization in pr
25780 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20  ogress */.  int 
25790 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20  isMutexInit;    
257a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
257b0 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65   True after mute
257c0 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  xes are initiali
257d0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  zed */.  int isM
257e0 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20  allocInit;      
257f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
25800 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
25810 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
25820 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65  /.  int isPCache
25830 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
25840 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
25850 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
25860 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
25870 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78  nt nRefInitMutex
25880 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25890 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
258a0 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65  ers of pInitMute
258b0 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  x */.  sqlite3_m
258c0 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78  utex *pInitMutex
258d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65  ;        /* Mute
258e0 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  x used by sqlite
258f0 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a  3_initialize() *
25900 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29  /.  void (*xLog)
25910 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
25920 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63   char*); /* Func
25930 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67  tion for logging
25940 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67   */.  void *pLog
25950 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
25960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
25970 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
25980 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66  xLog() */.#ifdef
25990 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
259a0 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
259b0 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
259c0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
259d0 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
259e0 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
259f0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
25a00 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a  E_VDBE_COVERAGE.
25a10 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
25a20 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  ng callback (if 
25a30 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76  not NULL) is inv
25a40 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44  oked on every VD
25a50 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f  BE branch.  ** o
25a60 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74  peration.  Set t
25a70 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e  he callback usin
25a80 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  g SQLITE_TESTCTR
25a90 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e  L_VDBE_COVERAGE.
25aa0 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  .  */.  void (*x
25ab0 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64  VdbeBranch)(void
25ac0 2a 2c 75 6e 73 69 67 6e 65 64 20 69 53 72 63 4c  *,unsigned iSrcL
25ad0 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20  ine,u8 eThis,u8 
25ae0 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  eMx);  /* Callba
25af0 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56  ck */.  void *pV
25b00 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20  dbeBranchArg;   
25b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b30 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e    /* 1st argumen
25b40 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64  t */.#endif.#ifd
25b50 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25b60 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 20 20 73  _DESERIALIZE.  s
25b70 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
25b80 65 6d 64 62 53 69 7a 65 3b 20 20 20 20 20 20 20  emdbSize;       
25b90 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 20   /* Default max 
25ba0 6d 65 6d 64 62 20 73 69 7a 65 20 2a 2f 0a 23 65  memdb size */.#e
25bb0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
25bc0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
25bd0 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
25be0 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
25bf0 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
25c00 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
25c10 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
25c20 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
25c30 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
25c40 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
25c50 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
25c60 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 62 49 6e 74  ls */.  int bInt
25c70 65 72 6e 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 20  ernalFunctions; 
25c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74            /* Int
25c90 65 72 6e 61 6c 20 53 51 4c 20 66 75 6e 63 74 69  ernal SQL functi
25ca0 6f 6e 73 20 61 72 65 20 76 69 73 69 62 6c 65 20  ons are visible 
25cb0 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65  */.  int iOnceRe
25cc0 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20  setThreshold;   
25cd0 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74         /* When t
25ce0 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20  o reset OP_Once 
25cf0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33  counters */.  u3
25d00 32 20 73 7a 53 6f 72 74 65 72 52 65 66 3b 20 20  2 szSorterRef;  
25d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69 6e 20 62  /* Min size in b
25d30 79 74 65 73 20 74 6f 20 75 73 65 20 73 6f 72 74  ytes to use sort
25d40 65 72 2d 72 65 66 73 20 2a 2f 0a 20 20 75 6e 73  er-refs */.  uns
25d50 69 67 6e 65 64 20 69 6e 74 20 69 50 72 6e 67 53  igned int iPrngS
25d60 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  eed;           /
25d70 2a 20 41 6c 74 65 72 6e 61 74 69 76 65 20 66 69  * Alternative fi
25d80 78 65 64 20 73 65 65 64 20 66 6f 72 20 74 68 65  xed seed for the
25d90 20 50 52 4e 47 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   PRNG */.};../*.
25da0 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  ** This macro is
25db0 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
25dc0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
25dd0 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20  nts to indicate 
25de0 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65  that.** the asse
25df0 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  rt is only valid
25e00 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65   on a well-forme
25e10 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73  d database.  Ins
25e20 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20  tead of:.**.**  
25e30 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a     assert( X );.
25e40 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73  **.** One writes
25e50 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
25e60 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54  rt( X || CORRUPT
25e70 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52  _DB );.**.** COR
25e80 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20  RUPT_DB is true 
25e90 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70  during normal op
25ea0 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50  eration.  CORRUP
25eb0 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e  T_DB does not in
25ec0 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74  dicate.** that t
25ed0 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64  he database is d
25ee0 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70  efinitely corrup
25ef0 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20  t, only that it 
25f00 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74  might be corrupt
25f10 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65  ..** For most te
25f20 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50  st cases, CORRUP
25f30 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66  T_DB is set to f
25f40 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65  alse using a spe
25f50 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  cial.** sqlite3_
25f60 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20  test_control(). 
25f70 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73   This enables as
25f80 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
25f90 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68  s to prove.** th
25fa0 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c  ings that are al
25fb0 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65  ways true for we
25fc0 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
25fd0 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ses..*/.#define 
25fe0 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c  CORRUPT_DB  (sql
25ff0 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72  ite3Config.never
26000 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a  Corrupt==0)../*.
26010 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
26020 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
26030 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
26040 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
26050 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65  Walker {.  Parse
26060 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
26070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26080 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
26090 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
260a0 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63  t (*xExprCallbac
260b0 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  k)(Walker*, Expr
260c0 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  *);     /* Callb
260d0 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69  ack for expressi
260e0 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  ons */.  int (*x
260f0 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28  SelectCallback)(
26100 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
26110 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66  ;  /* Callback f
26120 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
26130 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61  void (*xSelectCa
26140 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a  llback2)(Walker*
26150 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63  ,Select*);/* Sec
26160 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  ond callback for
26170 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e   SELECTs */.  in
26180 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
261b0 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
261c0 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20  */.  u8 eCode;  
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
261f0 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73  * A small proces
26200 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75  sing code */.  u
26210 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20  nion {          
26220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26230 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72           /* Extr
26240 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62  a data for callb
26250 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43  ack */.    NameC
26260 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20  ontext *pNC;    
26270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26280 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
26290 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
262a0 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75          /* A cou
262d0 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nter */.    int 
262e0 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  iCur;           
262f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26300 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f        /* A curso
26310 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
26320 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
26330 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
26340 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
26350 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
26360 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
26370 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
26380 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
26390 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66  nting column ref
263a0 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73  erences */.    s
263b0 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a  truct CCurHint *
263c0 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20  pCCurHint;      
263d0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
263e0 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69   by codeCursorHi
263f0 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nt() */.    int 
26400 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  *aiCol;         
26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26420 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f        /* array o
26430 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73  f column indexes
26440 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49   */.    struct I
26450 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76  dxCover *pIdxCov
26460 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
26470 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 69    /* Check for i
26480 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a 2f  ndex coverage */
26490 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78 45  .    struct IdxE
264a0 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78 54 72  xprTrans *pIdxTr
264b0 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ans;           /
264c0 2a 20 43 6f 6e 76 65 72 74 20 69 64 78 65 64 20  * Convert idxed 
264d0 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a  expr to column *
264e0 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
264f0 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 20 20  pGroupBy;       
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26510 2f 2a 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  /* GROUP BY clau
26520 73 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  se */.    Select
26530 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
26540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26550 20 20 20 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f      /* HAVING to
26560 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 74   WHERE clause ct
26570 78 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  x */.    struct 
26580 57 69 6e 64 6f 77 52 65 77 72 69 74 65 20 2a 70  WindowRewrite *p
26590 52 65 77 72 69 74 65 3b 20 20 20 20 20 20 20 20  Rewrite;        
265a0 20 20 20 2f 2a 20 57 69 6e 64 6f 77 20 72 65 77     /* Window rew
265b0 72 69 74 65 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  rite context */.
265c0 20 20 20 20 73 74 72 75 63 74 20 57 68 65 72 65      struct Where
265d0 43 6f 6e 73 74 20 2a 70 43 6f 6e 73 74 3b 20 20  Const *pConst;  
265e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
265f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f   WHERE clause co
26600 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 20 20 73  nstants */.    s
26610 74 72 75 63 74 20 52 65 6e 61 6d 65 43 74 78 20  truct RenameCtx 
26620 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  *pRename;       
26630 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45 4e 41           /* RENA
26640 4d 45 20 43 4f 4c 55 4d 4e 20 63 6f 6e 74 65 78  ME COLUMN contex
26650 74 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  t */.  } u;.};..
26660 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
26670 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
26680 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
26690 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
266a0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
266b0 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
266c0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
266d0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
266e0 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
266f0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
26700 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
26710 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
26720 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
26730 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
26740 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
26750 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57  int sqlite3ExprW
26760 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
26770 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
26780 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f  ite3SelectWalkNo
26790 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  op(Walker*, Sele
267a0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
267b0 33 53 65 6c 65 63 74 57 61 6c 6b 46 61 69 6c 28  3SelectWalkFail(
267c0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
267d0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
267e0 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c 69  _DEBUG.void sqli
267f0 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41 73 73  te3SelectWalkAss
26800 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53 65  ert2(Walker*, Se
26810 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  lect*);.#endif..
26820 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
26830 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
26840 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
26850 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
26860 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
26870 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
26880 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
26890 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
268a0 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
268b0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
268c0 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
268d0 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
268e0 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
268f0 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
26900 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
26910 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
26920 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
26930 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
26940 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
26950 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70  is structure rep
26960 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66  resents a set of
26970 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45   one or more CTE
26980 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62  s.** (common tab
26990 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20  le expressions) 
269a0 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e  created by a sin
269b0 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  gle WITH clause.
269c0 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20  .*/.struct With 
269d0 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20  {.  int nCte;   
269e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
26a00 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54   CTEs in the WIT
26a10 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69  H clause */.  Wi
26a20 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20  th *pOuter;     
26a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26a40 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48   Containing WITH
26a50 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
26a60 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65   */.  struct Cte
26a70 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
26a80 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63        /* For eac
26a90 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54  h CTE in the WIT
26aa0 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a  H clause.... */.
26ab0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ad0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
26ae0 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45  his CTE */.    E
26af0 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20  xprList *pCols; 
26b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26b10 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63  * List of explic
26b20 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c  it column names,
26b30 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   or NULL */.    
26b40 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
26b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b60 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f  /* The definitio
26b70 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  n of this CTE */
26b80 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
26b90 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20  *zCteErr;       
26ba0 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65       /* Error me
26bb0 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c  ssage for circul
26bc0 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  ar references */
26bd0 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23  .  } a[1];.};..#
26be0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
26bf0 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  UG./*.** An inst
26c00 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65  ance of the Tree
26c10 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75  View object is u
26c20 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67  sed for printing
26c30 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
26c40 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72  ** data structur
26c50 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62  es on sqlite3Deb
26c60 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67  ugPrintf() using
26c70 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65   a tree-like vie
26c80 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65  w..*/.struct Tre
26c90 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c  eView {.  int iL
26ca0 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
26cb0 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c    /* Which level
26cc0 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20   of the tree we 
26cd0 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20  are on */.  u8  
26ce0 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20  bLine[100];     
26cf0 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74      /* Draw vert
26d00 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69  ical in column i
26d10 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20   if bLine[i] is 
26d20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69  true */.};.#endi
26d30 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
26d40 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  G */../*.** This
26d50 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20   object is used 
26d60 69 6e 20 76 61 72 69 6f 75 73 20 77 61 79 73 2c  in various ways,
26d70 20 6d 6f 73 74 20 28 62 75 74 20 6e 6f 74 20 61   most (but not a
26d80 6c 6c 29 20 72 65 6c 61 74 65 64 20 74 6f 20 77  ll) related to w
26d90 69 6e 64 6f 77 0a 2a 2a 20 66 75 6e 63 74 69 6f  indow.** functio
26da0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 31 29 20  ns..**.**   (1) 
26db0 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63  A single instanc
26dc0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
26dd0 75 72 65 20 69 73 20 61 74 74 61 63 68 65 64 20  ure is attached 
26de0 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20 20 20  to the.**       
26df0 74 68 65 20 45 78 70 72 2e 79 2e 70 57 69 6e 20  the Expr.y.pWin 
26e00 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77  field for each w
26e10 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69  indow function i
26e20 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  n an expression 
26e30 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54  tree..**       T
26e40 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
26e50 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   the information
26e60 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
26e70 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a  e OVER clause,.*
26e80 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61 64 64  *       plus add
26e90 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75  itional fields u
26ea0 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20  sed during code 
26eb0 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  generation..**.*
26ec0 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64  *   (2) All wind
26ed0 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  ow functions in 
26ee0 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
26ef0 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  form a linked-li
26f00 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61  st.**       atta
26f10 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70  ched to Select.p
26f20 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77  Win.  The Window
26f30 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f  .pFunc and Windo
26f40 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20  w.pExpr.**      
26f50 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61   fields point ba
26f60 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65 73  ck to the expres
26f70 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  sion that is the
26f80 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
26f90 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68  ..**.**   (3) Th
26fa0 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57  e terms of the W
26fb0 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20  INDOW clause of 
26fc0 61 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73  a SELECT are ins
26fd0 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a  tances of this.*
26fe0 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f  *       object o
26ff0 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
27000 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65  attached to Sele
27010 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a  ct.pWinDefn..**.
27020 2a 2a 20 20 20 28 34 29 20 46 6f 72 20 61 6e 20  **   (4) For an 
27030 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
27040 6f 6e 20 77 69 74 68 20 61 20 46 49 4c 54 45 52  on with a FILTER
27050 20 63 6c 61 75 73 65 2c 20 61 6e 20 69 6e 73 74   clause, an inst
27060 61 6e 63 65 0a 2a 2a 20 20 20 20 20 20 20 6f 66  ance.**       of
27070 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   this object is 
27080 73 74 6f 72 65 64 20 69 6e 20 45 78 70 72 2e 79  stored in Expr.y
27090 2e 70 57 69 6e 20 77 69 74 68 20 65 46 72 6d 54  .pWin with eFrmT
270a0 79 70 65 20 73 65 74 20 74 6f 0a 2a 2a 20 20 20  ype set to.**   
270b0 20 20 20 20 54 4b 5f 46 49 4c 54 45 52 2e 20 49      TK_FILTER. I
270c0 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
270d0 6f 6e 6c 79 20 66 69 65 6c 64 20 75 73 65 64 20  only field used 
270e0 69 73 20 57 69 6e 64 6f 77 2e 70 46 69 6c 74 65  is Window.pFilte
270f0 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73 65  r..**.** The use
27100 73 20 28 31 29 20 61 6e 64 20 28 32 29 20 61 72  s (1) and (2) ar
27110 65 20 72 65 61 6c 6c 79 20 74 68 65 20 73 61 6d  e really the sam
27120 65 20 57 69 6e 64 6f 77 20 6f 62 6a 65 63 74 20  e Window object 
27130 74 68 61 74 20 6a 75 73 74 20 68 61 70 70 65 6e  that just happen
27140 73 0a 2a 2a 20 74 6f 20 62 65 20 61 63 63 65 73  s.** to be acces
27150 73 69 62 6c 65 20 69 6e 20 74 77 6f 20 64 69 66  sible in two dif
27160 66 65 72 65 6e 74 20 77 61 79 73 2e 20 20 55 73  ferent ways.  Us
27170 65 20 63 61 73 65 20 28 33 29 20 61 72 65 20 73  e case (3) are s
27180 65 70 61 72 61 74 65 20 6f 62 6a 65 63 74 73 2e  eparate objects.
27190 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 6e 64 6f  .*/.struct Windo
271a0 77 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  w {.  char *zNam
271b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
271c0 20 4e 61 6d 65 20 6f 66 20 77 69 6e 64 6f 77 20   Name of window 
271d0 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
271e0 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20  .  char *zBase; 
271f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
27200 6d 65 20 6f 66 20 62 61 73 65 20 77 69 6e 64 6f  me of base windo
27210 77 20 66 6f 72 20 63 68 61 69 6e 69 6e 67 20 28  w for chaining (
27220 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
27230 20 20 45 78 70 72 4c 69 73 74 20 2a 70 50 61 72    ExprList *pPar
27240 74 69 74 69 6f 6e 3b 20 20 20 2f 2a 20 50 41 52  tition;   /* PAR
27250 54 49 54 49 4f 4e 20 42 59 20 63 6c 61 75 73 65  TITION BY clause
27260 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
27270 70 4f 72 64 65 72 42 79 3b 20 20 20 20 20 2f 2a  pOrderBy;     /*
27280 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
27290 20 2a 2f 0a 20 20 75 38 20 65 46 72 6d 54 79 70   */.  u8 eFrmTyp
272a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
272b0 20 54 4b 5f 52 41 4e 47 45 2c 20 54 4b 5f 47 52   TK_RANGE, TK_GR
272c0 4f 55 50 53 2c 20 54 4b 5f 52 4f 57 53 2c 20 6f  OUPS, TK_ROWS, o
272d0 72 20 30 20 2a 2f 0a 20 20 75 38 20 65 53 74 61  r 0 */.  u8 eSta
272e0 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
272f0 20 2f 2a 20 55 4e 42 4f 55 4e 44 45 44 2c 20 43   /* UNBOUNDED, C
27300 55 52 52 45 4e 54 2c 20 50 52 45 43 45 44 49 4e  URRENT, PRECEDIN
27310 47 20 6f 72 20 46 4f 4c 4c 4f 57 49 4e 47 20 2a  G or FOLLOWING *
27320 2f 0a 20 20 75 38 20 65 45 6e 64 3b 20 20 20 20  /.  u8 eEnd;    
27330 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
27340 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e  NBOUNDED, CURREN
27350 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20  T, PRECEDING or 
27360 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75  FOLLOWING */.  u
27370 38 20 62 49 6d 70 6c 69 63 69 74 46 72 61 6d 65  8 bImplicitFrame
27380 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ;      /* True i
27390 66 20 66 72 61 6d 65 20 77 61 73 20 69 6d 70 6c  f frame was impl
273a0 69 63 69 74 6c 79 20 73 70 65 63 69 66 69 65 64  icitly specified
273b0 20 2a 2f 0a 20 20 75 38 20 65 45 78 63 6c 75 64   */.  u8 eExclud
273c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
273d0 20 54 4b 5f 4e 4f 2c 20 54 4b 5f 43 55 52 52 45   TK_NO, TK_CURRE
273e0 4e 54 2c 20 54 4b 5f 54 49 45 53 2c 20 54 4b 5f  NT, TK_TIES, TK_
273f0 47 52 4f 55 50 2c 20 6f 72 20 30 20 2a 2f 0a 20  GROUP, or 0 */. 
27400 20 45 78 70 72 20 2a 70 53 74 61 72 74 3b 20 20   Expr *pStart;  
27410 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
27420 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65 78 70  ession for "<exp
27430 72 3e 20 50 52 45 43 45 44 49 4e 47 22 20 2a 2f  r> PRECEDING" */
27440 0a 20 20 45 78 70 72 20 2a 70 45 6e 64 3b 20 20  .  Expr *pEnd;  
27450 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
27460 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 22 3c 65  pression for "<e
27470 78 70 72 3e 20 46 4f 4c 4c 4f 57 49 4e 47 22 20  xpr> FOLLOWING" 
27480 2a 2f 0a 20 20 57 69 6e 64 6f 77 20 2a 2a 70 70  */.  Window **pp
27490 54 68 69 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  This;        /* 
274a0 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  Pointer to this 
274b0 6f 62 6a 65 63 74 20 69 6e 20 53 65 6c 65 63 74  object in Select
274c0 2e 70 57 69 6e 20 6c 69 73 74 20 2a 2f 0a 20 20  .pWin list */.  
274d0 57 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e  Window *pNextWin
274e0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  ;       /* Next 
274f0 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20  window function 
27500 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69  belonging to thi
27510 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78  s SELECT */.  Ex
27520 70 72 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20  pr *pFilter;    
27530 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c        /* The FIL
27540 54 45 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  TER expression *
27550 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75  /.  FuncDef *pFu
27560 6e 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  nc;         /* T
27570 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
27580 20 69 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20   int iEphCsr;   
27590 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74           /* Part
275a0 69 74 69 6f 6e 20 62 75 66 66 65 72 20 6f 72 20  ition buffer or 
275b0 50 65 65 72 20 62 75 66 66 65 72 20 2a 2f 0a 20  Peer buffer */. 
275c0 20 69 6e 74 20 72 65 67 41 63 63 75 6d 3b 20 20   int regAccum;  
275d0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 75           /* Accu
275e0 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 69 6e 74  mulator */.  int
275f0 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20   regResult;     
27600 20 20 20 20 20 2f 2a 20 49 6e 74 65 72 69 6d 20       /* Interim 
27610 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20  result */.  int 
27620 63 73 72 41 70 70 3b 20 20 20 20 20 20 20 20 20  csrApp;         
27630 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
27640 63 75 72 73 6f 72 20 28 75 73 65 64 20 62 79 20  cursor (used by 
27650 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e  min/max) */.  in
27660 74 20 72 65 67 41 70 70 3b 20 20 20 20 20 20 20  t regApp;       
27670 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f        /* Functio
27680 6e 20 72 65 67 69 73 74 65 72 20 28 61 6c 73 6f  n register (also
27690 20 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61 78   used by min/max
276a0 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 50 61  ) */.  int regPa
276b0 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rt;            /
276c0 2a 20 41 72 72 61 79 20 6f 66 20 72 65 67 69 73  * Array of regis
276d0 74 65 72 73 20 66 6f 72 20 50 41 52 54 49 54 49  ters for PARTITI
276e0 4f 4e 20 42 59 20 76 61 6c 75 65 73 20 2a 2f 0a  ON BY values */.
276f0 20 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 3b 20    Expr *pOwner; 
27700 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
27710 72 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 20 74  ression object t
27720 68 69 73 20 77 69 6e 64 6f 77 20 69 73 20 61 74  his window is at
27730 74 61 63 68 65 64 20 74 6f 20 2a 2f 0a 20 20 69  tached to */.  i
27740 6e 74 20 6e 42 75 66 66 65 72 43 6f 6c 3b 20 20  nt nBufferCol;  
27750 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
27760 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 62   of columns in b
27770 75 66 66 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20  uffer table */. 
27780 20 69 6e 74 20 69 41 72 67 43 6f 6c 3b 20 20 20   int iArgCol;   
27790 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73           /* Offs
277a0 65 74 20 6f 66 20 66 69 72 73 74 20 61 72 67 75  et of first argu
277b0 6d 65 6e 74 20 66 6f 72 20 74 68 69 73 20 66 75  ment for this fu
277c0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  nction */.  int 
277d0 72 65 67 4f 6e 65 3b 20 20 20 20 20 20 20 20 20  regOne;         
277e0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
277f0 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6e 73 74  containing const
27800 61 6e 74 20 76 61 6c 75 65 20 31 20 2a 2f 0a 20  ant value 1 */. 
27810 20 69 6e 74 20 72 65 67 53 74 61 72 74 52 6f 77   int regStartRow
27820 69 64 3b 0a 20 20 69 6e 74 20 72 65 67 45 6e 64  id;.  int regEnd
27830 52 6f 77 69 64 3b 0a 20 20 75 38 20 62 45 78 70  Rowid;.  u8 bExp
27840 72 41 72 67 73 3b 20 20 20 20 20 20 20 20 20 20  rArgs;          
27850 20 2f 2a 20 44 65 66 65 72 20 65 76 61 6c 75 61   /* Defer evalua
27860 74 69 6f 6e 20 6f 66 20 77 69 6e 64 6f 77 20 66  tion of window f
27870 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
27880 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s.              
27890 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 64              ** d
278a0 75 65 20 74 6f 20 74 68 65 20 53 51 4c 49 54 45  ue to the SQLITE
278b0 5f 53 55 42 54 59 50 45 20 66 6c 61 67 20 2a 2f  _SUBTYPE flag */
278c0 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .};..#ifndef SQL
278d0 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46  ITE_OMIT_WINDOWF
278e0 55 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  UNC.void sqlite3
278f0 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 73 71 6c  WindowDelete(sql
27900 69 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  ite3*, Window*);
27910 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
27920 64 6f 77 55 6e 6c 69 6e 6b 46 72 6f 6d 53 65 6c  dowUnlinkFromSel
27930 65 63 74 28 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  ect(Window*);.vo
27940 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
27950 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
27960 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a  e3 *db, Window *
27970 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69  p);.Window *sqli
27980 74 65 33 57 69 6e 64 6f 77 41 6c 6c 6f 63 28 50  te3WindowAlloc(P
27990 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
279a0 20 45 78 70 72 2a 2c 20 69 6e 74 20 2c 20 45 78   Expr*, int , Ex
279b0 70 72 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  pr*, u8);.void s
279c0 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
279d0 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
279e0 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64  , Window*);.void
279f0 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69   sqlite3WindowLi
27a00 6e 6b 28 53 65 6c 65 63 74 20 2a 70 53 65 6c 2c  nk(Select *pSel,
27a10 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 29 3b 0a   Window *pWin);.
27a20 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  int sqlite3Windo
27a30 77 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c  wCompare(Parse*,
27a40 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77   Window*, Window
27a50 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
27a60 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64 65 49  lite3WindowCodeI
27a70 6e 69 74 28 50 61 72 73 65 2a 2c 20 57 69 6e 64  nit(Parse*, Wind
27a80 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ow*);.void sqlit
27a90 65 33 57 69 6e 64 6f 77 43 6f 64 65 53 74 65 70  e3WindowCodeStep
27aa0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
27ab0 2c 20 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  , WhereInfo*, in
27ac0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
27ad0 69 74 65 33 57 69 6e 64 6f 77 52 65 77 72 69 74  ite3WindowRewrit
27ae0 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  e(Parse*, Select
27af0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
27b00 78 70 61 6e 64 53 75 62 71 75 65 72 79 28 50 61  xpandSubquery(Pa
27b10 72 73 65 2a 2c 20 73 74 72 75 63 74 20 53 72 63  rse*, struct Src
27b20 4c 69 73 74 5f 69 74 65 6d 2a 29 3b 0a 76 6f 69  List_item*);.voi
27b30 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 55  d sqlite3WindowU
27b40 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 57 69  pdate(Parse*, Wi
27b50 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20  ndow*, Window*, 
27b60 46 75 6e 63 44 65 66 2a 29 3b 0a 57 69 6e 64 6f  FuncDef*);.Windo
27b70 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  w *sqlite3Window
27b80 44 75 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  Dup(sqlite3 *db,
27b90 20 45 78 70 72 20 2a 70 4f 77 6e 65 72 2c 20 57   Expr *pOwner, W
27ba0 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f  indow *p);.Windo
27bb0 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  w *sqlite3Window
27bc0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 20  ListDup(sqlite3 
27bd0 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b  *db, Window *p);
27be0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
27bf0 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  dowFunctions(voi
27c00 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
27c10 57 69 6e 64 6f 77 43 68 61 69 6e 28 50 61 72 73  WindowChain(Pars
27c20 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e  e*, Window*, Win
27c30 64 6f 77 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a 73  dow*);.Window *s
27c40 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 73 73 65  qlite3WindowAsse
27c50 6d 62 6c 65 28 50 61 72 73 65 2a 2c 20 57 69 6e  mble(Parse*, Win
27c60 64 6f 77 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  dow*, ExprList*,
27c70 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
27c80 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  n*);.#else.# def
27c90 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  ine sqlite3Windo
27ca0 77 44 65 6c 65 74 65 28 61 2c 62 29 0a 23 20 64  wDelete(a,b).# d
27cb0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 6e  efine sqlite3Win
27cc0 64 6f 77 46 75 6e 63 74 69 6f 6e 73 28 29 0a 23  dowFunctions().#
27cd0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57   define sqlite3W
27ce0 69 6e 64 6f 77 41 74 74 61 63 68 28 61 2c 62 2c  indowAttach(a,b,
27cf0 63 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  c).#endif../*.**
27d00 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
27d10 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
27d20 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
27d30 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
27d40 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
27d50 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
27d60 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
27d70 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
27d80 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
27d90 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
27da0 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
27dc0 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
27dd0 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
27de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27df0 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
27e00 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
27e10 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
27e20 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
27e30 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
27e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e60 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
27e70 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
27e80 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
27e90 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
27ea0 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
27eb0 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
27ec0 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
27ed0 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
27ee0 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
27ef0 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
27f00 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
27f10 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
27f20 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
27f30 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
27f40 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
27f50 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
27f60 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
27f70 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
27f80 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
27f90 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
27fa0 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
27fb0 6c 69 74 65 33 52 65 70 6f 72 74 45 72 72 6f 72  lite3ReportError
27fc0 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20 6c  (int iErr, int l
27fd0 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61  ineno, const cha
27fe0 72 20 2a 7a 54 79 70 65 29 3b 0a 69 6e 74 20 73  r *zType);.int s
27ff0 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
28000 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
28010 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
28020 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28030 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69  3CantopenError(i
28040 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  nt);.#define SQL
28050 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
28060 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
28070 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
28080 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49  define SQLITE_MI
28090 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65  SUSE_BKPT sqlite
280a0 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c  3MisuseError(__L
280b0 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
280c0 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42  QLITE_CANTOPEN_B
280d0 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  KPT sqlite3Canto
280e0 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  penError(__LINE_
280f0 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  _).#ifdef SQLITE
28100 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c  _DEBUG.  int sql
28110 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69  ite3NomemError(i
28120 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
28130 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f  e3IoerrnomemErro
28140 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  r(int);.  int sq
28150 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f  lite3CorruptPgno
28160 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b  Error(int,Pgno);
28170 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
28180 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69  _NOMEM_BKPT sqli
28190 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f  te3NomemError(__
281a0 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65  LINE__).# define
281b0 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
281c0 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  MEM_BKPT sqlite3
281d0 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28  IoerrnomemError(
281e0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69  __LINE__).# defi
281f0 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
28200 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65  T_PGNO(P) sqlite
28210 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f  3CorruptPgnoErro
28220 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a  r(__LINE__,(P)).
28230 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
28240 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
28250 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20   SQLITE_NOMEM.# 
28260 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
28270 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53  ERR_NOMEM_BKPT S
28280 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
28290 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  M.# define SQLIT
282a0 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50  E_CORRUPT_PGNO(P
282b0 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  ) sqlite3Corrupt
282c0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
282d0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
282e0 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74 68  S3 and FTS4 both
282f0 20 72 65 71 75 69 72 65 20 76 69 72 74 75 61 6c   require virtual
28300 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a   table support.*
28310 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
28320 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
28330 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66 20  LTABLE).# undef 
28340 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
28350 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  S3.# undef SQLIT
28360 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65  E_ENABLE_FTS4.#e
28370 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34  ndif../*.** FTS4
28380 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78   is really an ex
28390 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33  tension for FTS3
283a0 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64  .  It is enabled
283b0 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51   using the.** SQ
283c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
283d0 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20   macro.  But to 
283e0 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20  avoid confusion 
283f0 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20  we also call.** 
28400 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
28410 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20  E_FTS4 macro to 
28420 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61  serve as an alia
28430 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  s for SQLITE_ENA
28440 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66  BLE_FTS3..*/.#if
28450 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28460 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20  ENABLE_FTS4) && 
28470 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
28480 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64  ENABLE_FTS3).# d
28490 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
284a0 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69  BLE_FTS3 1.#endi
284b0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79  f../*.** The cty
284c0 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e  pe.h header is n
284d0 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53  eeded for non-AS
284e0 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74  CII systems.  It
284f0 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64   is also.** need
28500 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20  ed by FTS3 when 
28510 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64  FTS3 is included
28520 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61   in the amalgama
28530 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tion..*/.#if !de
28540 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43  fined(SQLITE_ASC
28550 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  II) || \.    (de
28560 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
28570 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66  BLE_FTS3) && def
28580 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c  ined(SQLITE_AMAL
28590 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63  GAMATION)).# inc
285a0 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23  lude <ctype.h>.#
285b0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
285c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
285d0 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e  s mimic the stan
285e0 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e  dard library fun
285f0 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29  ctions toupper()
28600 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20  ,.** isspace(), 
28610 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67  isalnum(), isdig
28620 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69  it() and isxdigi
28630 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c  t(), respectivel
28640 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65  y. The.** sqlite
28650 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77   versions only w
28660 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68  ork for ASCII ch
28670 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64  aracters, regard
28680 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a  less of locale..
28690 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
286a0 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20  _ASCII.# define 
286b0 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
286c0 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65  )  ((x)&~(sqlite
286d0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
286e0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
286f0 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  20)).# define sq
28700 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
28710 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
28720 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
28730 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64  r)(x)]&0x01).# d
28740 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
28750 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74  lnum(x)   (sqlit
28760 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
28770 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
28780 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x06).# define sq
28790 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
287a0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
287b0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
287c0 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64  r)(x)]&0x02).# d
287d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
287e0 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74  igit(x)   (sqlit
287f0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
28800 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
28810 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x04).# define sq
28820 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
28830 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
28840 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
28850 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64  r)(x)]&0x08).# d
28860 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
28870 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74  ower(x)   (sqlit
28880 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28  e3UpperToLower[(
28890 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
288a0 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  )]).# define sql
288b0 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20  ite3Isquote(x)  
288c0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
288d0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
288e0 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c 73  )(x)]&0x80).#els
288f0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
28900 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
28910 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
28920 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
28930 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
28940 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
28950 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
28960 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
28970 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
28980 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
28990 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
289a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
289b0 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
289c0 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
289d0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
289e0 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
289f0 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
28a00 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
28a10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
28a20 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
28a30 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
28a40 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
28a50 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
28a60 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
28a70 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
28a80 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
28a90 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28  e3Isquote(x)   (
28aa0 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27  (x)=='"'||(x)=='
28ab0 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28  \''||(x)=='['||(
28ac0 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a  x)=='`').#endif.
28ad0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64 43  int sqlite3IsIdC
28ae0 68 61 72 28 75 38 29 3b 0a 0a 2f 2a 0a 2a 2a 20  har(u8);../*.** 
28af0 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
28b00 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
28b10 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49 43  int sqlite3StrIC
28b20 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  mp(const char*,c
28b30 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
28b40 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
28b50 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
28b60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
28b70 72 6c 65 6e 33 30 4e 4e 28 43 29 20 28 73 74 72  rlen30NN(C) (str
28b80 6c 65 6e 28 43 29 26 30 78 33 66 66 66 66 66 66  len(C)&0x3ffffff
28b90 66 29 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  f).char *sqlite3
28ba0 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d  ColumnType(Colum
28bb0 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  n*,char*);.#defi
28bc0 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
28bd0 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
28be0 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
28bf0 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
28c00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
28c10 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
28c20 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
28c30 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  oc(u64);.void *s
28c40 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
28c50 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
28c60 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
28c70 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
28c80 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
28c90 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
28ca0 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  3*, u64);.void *
28cb0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
28cc0 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75  awNN(sqlite3*, u
28cd0 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  64);.char *sqlit
28ce0 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
28cf0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
28d00 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
28d10 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
28d20 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  *,const char*, u
28d30 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  64);.char *sqlit
28d40 65 33 44 62 53 70 61 6e 44 75 70 28 73 71 6c 69  e3DbSpanDup(sqli
28d50 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
28d60 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
28d70 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c  oid *sqlite3Real
28d80 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b  loc(void*, u64);
28d90 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
28da0 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71  ReallocOrFree(sq
28db0 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
28dc0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
28dd0 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71  ite3DbRealloc(sq
28de0 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
28df0 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u64);.void sqli
28e00 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65  te3DbFree(sqlite
28e10 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
28e20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e   sqlite3DbFreeNN
28e30 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
28e40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
28e50 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b  llocSize(void*);
28e60 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61  .int sqlite3DbMa
28e70 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33  llocSize(sqlite3
28e80 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  *, void*);.void 
28e90 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c  *sqlite3PageMall
28ea0 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
28eb0 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f  lite3PageFree(vo
28ec0 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
28ed0 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28  e3MemSetDefault(
28ee0 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53  void);.#ifndef S
28ef0 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
28f00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e  .void sqlite3Ben
28f10 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76  ignMallocHooks(v
28f20 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76  oid (*)(void), v
28f30 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a  oid (*)(void));.
28f40 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
28f50 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c  e3HeapNearlyFull
28f60 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f  (void);../*.** O
28f70 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61  n systems with a
28f80 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65  mple stack space
28f90 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72   and that suppor
28fa0 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65  t alloca(), make
28fb0 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63  .** use of alloc
28fc0 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70  a() to obtain sp
28fd0 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75  ace for large au
28fe0 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e  tomatic objects.
28ff0 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a    By default,.**
29000 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72   obtain space fr
29010 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a  om malloc()..**.
29020 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20  ** The alloca() 
29030 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65  routine never re
29040 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69  turns NULL.  Thi
29050 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64  s will cause cod
29060 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20  e paths.** that 
29070 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65  deal with sqlite
29080 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61  3StackAlloc() fa
29090 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72  ilures to be unr
290a0 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66  eachable..*/.#if
290b0 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41  def SQLITE_USE_A
290c0 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73  LLOCA.# define s
290d0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
290e0 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63  Raw(D,N)   alloc
290f0 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  a(N).# define sq
29100 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
29110 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74  ero(D,N)  memset
29120 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e  (alloca(N), 0, N
29130 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29140 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
29150 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
29160 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
29170 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69  cRaw(D,N)   sqli
29180 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44  te3DbMallocRaw(D
29190 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
291a0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
291b0 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33  ro(D,N)  sqlite3
291c0 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  DbMallocZero(D,N
291d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
291e0 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
291f0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
29200 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66  Free(D,P).#endif
29210 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f  ../* Do not allo
29220 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35 20 61  w both MEMSYS5 a
29230 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20 62 65  nd MEMSYS3 to be
29240 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74 68 65   defined togethe
29250 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a 20 61  r.  If they.** a
29260 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d 53  re, disable MEMS
29270 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  YS3.*/.#ifdef SQ
29280 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
29290 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS5.const sqlite
292a0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
292b0 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
292c0 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65  ys5(void);.#unde
292d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
292e0 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a 23  MEMSYS3.#endif.#
292f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
29300 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73  BLE_MEMSYS3.cons
29310 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
29320 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
29330 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64  mGetMemsys3(void
29340 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  );.#endif...#ifn
29350 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
29360 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  _OMIT.  sqlite3_
29370 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
29380 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61  nst *sqlite3Defa
29390 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  ultMutex(void);.
293a0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
293b0 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
293c0 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28  qlite3NoopMutex(
293d0 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
293e0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
293f0 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a  utexAlloc(int);.
29400 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
29410 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20  exInit(void);.  
29420 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
29430 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  End(void);.#endi
29440 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
29450 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
29460 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
29470 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29  LITE_MUTEX_NOOP)
29480 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
29490 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69  emoryBarrier(voi
294a0 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  d);.#else.# defi
294b0 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79  ne sqlite3Memory
294c0 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66  Barrier().#endif
294d0 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  ..sqlite3_int64 
294e0 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
294f0 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
29500 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69 6e  lite3StatusUp(in
29510 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
29520 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28  lite3StatusDown(
29530 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
29540 73 71 6c 69 74 65 33 53 74 61 74 75 73 48 69 67  sqlite3StatusHig
29550 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29  hwater(int, int)
29560 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f 6f  ;.int sqlite3Loo
29570 6b 61 73 69 64 65 55 73 65 64 28 73 71 6c 69 74  kasideUsed(sqlit
29580 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a 20 41  e3*,int*);../* A
29590 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73  ccess to mutexes
295a0 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
295b0 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c  _status() */.sql
295c0 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
295d0 74 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28  te3Pcache1Mutex(
295e0 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d  void);.sqlite3_m
295f0 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c  utex *sqlite3Mal
29600 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  locMutex(void);.
29610 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
29620 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49  ITE_ENABLE_MULTI
29630 54 48 52 45 41 44 45 44 5f 43 48 45 43 4b 53 29  THREADED_CHECKS)
29640 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
29650 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 0a  ITE_MUTEX_OMIT).
29660 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 74 65  void sqlite3Mute
29670 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f  xWarnOnContentio
29680 6e 28 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 2a  n(sqlite3_mutex*
29690 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
296a0 65 20 73 71 6c 69 74 65 33 4d 75 74 65 78 57 61  e sqlite3MutexWa
296b0 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 78  rnOnContention(x
296c0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
296d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
296e0 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64  OATING_POINT.# d
296f0 65 66 69 6e 65 20 45 58 50 37 35 34 20 28 28 28  efine EXP754 (((
29700 75 36 34 29 30 78 37 66 66 29 3c 3c 35 32 29 0a  u64)0x7ff)<<52).
29710 23 20 64 65 66 69 6e 65 20 4d 41 4e 37 35 34 20  # define MAN754 
29720 28 28 28 28 75 36 34 29 31 29 3c 3c 35 32 29 2d  ((((u64)1)<<52)-
29730 31 29 0a 23 20 64 65 66 69 6e 65 20 49 73 4e 61  1).# define IsNa
29740 4e 28 58 29 20 28 28 28 58 29 26 45 58 50 37 35  N(X) (((X)&EXP75
29750 34 29 3d 3d 45 58 50 37 35 34 20 26 26 20 28 28  4)==EXP754 && ((
29760 58 29 26 4d 41 4e 37 35 34 29 21 3d 30 29 0a 20  X)&MAN754)!=0). 
29770 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
29780 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
29790 0a 23 20 64 65 66 69 6e 65 20 49 73 4e 61 4e 28  .# define IsNaN(
297a0 58 29 20 20 20 20 20 20 20 20 20 30 0a 23 20 64  X)         0.# d
297b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
297c0 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a  aN(X)  0.#endif.
297d0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
297e0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
297f0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f  ing structure ho
29800 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
29810 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e  about SQL.** fun
29820 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73  ctions arguments
29830 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61   that are the pa
29840 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20  rameters to the 
29850 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f  printf() functio
29860 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69  n..*/.struct Pri
29870 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20  ntfArguments {. 
29880 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20   int nArg;      
29890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74            /* Tot
298a0 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  al number of arg
298b0 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  uments */.  int 
298c0 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20  nUsed;          
298d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
298e0 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64  f arguments used
298f0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c   so far */.  sql
29900 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41  ite3_value **apA
29910 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67  rg;   /* The arg
29920 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a  ument values */.
29930 7d 3b 0a 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  };..char *sqlite
29940 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
29950 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
29960 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
29970 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
29980 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
29990 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64   va_list);.#if d
299a0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
299b0 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
299c0 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
299d0 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c  RACE).  void sql
299e0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
299f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
29a00 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
29a10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
29a20 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
29a30 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
29a40 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
29a50 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
29a60 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
29a70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
29a80 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56  eeViewExpr(TreeV
29a90 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
29aa0 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
29ab0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 42 61  qlite3TreeViewBa
29ac0 72 65 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  reExprList(TreeV
29ad0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
29ae0 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
29af0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
29b00 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c  te3TreeViewExprL
29b10 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
29b20 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
29b30 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  u8, const char*)
29b40 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29b50 54 72 65 65 56 69 65 77 53 72 63 4c 69 73 74 28  TreeViewSrcList(
29b60 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
29b70 20 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 76 6f   SrcList*);.  vo
29b80 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
29b90 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65  ewSelect(TreeVie
29ba0 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74  w*, const Select
29bb0 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
29bc0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69  qlite3TreeViewWi
29bd0 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  th(TreeView*, co
29be0 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  nst With*, u8);.
29bf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29c00 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20  MIT_WINDOWFUNC. 
29c10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
29c20 65 56 69 65 77 57 69 6e 64 6f 77 28 54 72 65 65  eViewWindow(Tree
29c30 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e  View*, const Win
29c40 64 6f 77 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  dow*, u8);.  voi
29c50 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
29c60 77 57 69 6e 46 75 6e 63 28 54 72 65 65 56 69 65  wWinFunc(TreeVie
29c70 77 2a 2c 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77  w*, const Window
29c80 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 23  *, u8);.#endif.#
29c90 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c  endif...void sql
29ca0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68  ite3SetString(ch
29cb0 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ar **, sqlite3*,
29cc0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
29cd0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
29ce0 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Msg(Parse*, cons
29cf0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69  t char*, ...);.i
29d00 6e 74 20 73 71 6c 69 74 65 33 45 72 72 6f 72 54  nt sqlite3ErrorT
29d10 6f 50 61 72 73 65 72 28 73 71 6c 69 74 65 33 2a  oParser(sqlite3*
29d20 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
29d30 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
29d40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
29d50 65 71 75 6f 74 65 45 78 70 72 28 45 78 70 72 2a  equoteExpr(Expr*
29d60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
29d70 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c  okenInit(Token*,
29d80 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
29d90 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
29da0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
29db0 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
29dc0 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
29dd0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
29de0 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
29df0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
29e00 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
29e10 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
29e20 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
29e30 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
29e40 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
29e50 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
29e60 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
29e70 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
29e80 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
29e90 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
29ea0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
29eb0 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
29ec0 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
29ed0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
29ee0 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
29ef0 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28  3NoTempsInRange(
29f00 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
29f10 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71  .#endif.Expr *sq
29f20 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
29f30 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
29f40 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
29f50 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
29f60 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
29f70 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
29f80 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
29f90 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
29fa0 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
29fb0 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
29fc0 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
29fd0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
29fe0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
29ff0 74 65 33 50 45 78 70 72 41 64 64 53 65 6c 65 63  te3PExprAddSelec
2a000 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
2a010 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20   Select*);.Expr 
2a020 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28  *sqlite3ExprAnd(
2a030 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78  Parse*,Expr*, Ex
2a040 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
2a050 74 65 33 45 78 70 72 53 69 6d 70 6c 69 66 69 65  te3ExprSimplifie
2a060 64 41 6e 64 4f 72 28 45 78 70 72 2a 29 3b 0a 45  dAndOr(Expr*);.E
2a070 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2a080 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
2a090 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
2a0a0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2a0b0 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
2a0c0 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
2a0d0 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f   Expr*, u32);.vo
2a0e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65  id sqlite3ExprDe
2a0f0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
2a100 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2a110 74 65 33 45 78 70 72 55 6e 6d 61 70 41 6e 64 44  te3ExprUnmapAndD
2a120 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 45 78  elete(Parse*, Ex
2a130 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
2a140 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
2a150 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70  ppend(Parse*,Exp
2a160 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45  rList*,Expr*);.E
2a170 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
2a180 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65  ExprListAppendVe
2a190 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72  ctor(Parse*,Expr
2a1a0 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78  List*,IdList*,Ex
2a1b0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2a1c0 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72  e3ExprListSetSor
2a1d0 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a  tOrder(ExprList*
2a1e0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
2a1f0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
2a200 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78  etName(Parse*,Ex
2a210 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69  prList*,Token*,i
2a220 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a230 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e  3ExprListSetSpan
2a240 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
2a250 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
2a260 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2a270 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2a280 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2a290 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32   ExprList*);.u32
2a2a0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2a2b0 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72  Flags(const Expr
2a2c0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2a2d0 74 65 33 49 6e 64 65 78 48 61 73 44 75 70 6c 69  te3IndexHasDupli
2a2e0 63 61 74 65 52 6f 6f 74 50 61 67 65 28 49 6e 64  cateRootPage(Ind
2a2f0 65 78 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ex*);.int sqlite
2a300 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
2a310 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
2a320 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
2a330 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
2a340 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  r**, char**);.in
2a350 74 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65  t sqlite3InitOne
2a360 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2a370 63 68 61 72 2a 2a 2c 20 75 33 32 29 3b 0a 76 6f  char**, u32);.vo
2a380 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
2a390 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
2a3a0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
2a3b0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2a3c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2a3d0 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69  BLE.Module *sqli
2a3e0 74 65 33 50 72 61 67 6d 61 56 74 61 62 52 65 67  te3PragmaVtabReg
2a3f0 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63  ister(sqlite3*,c
2a400 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
2a410 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2a420 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
2a430 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
2a440 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
2a450 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
2a460 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
2a470 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2a480 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
2a490 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
2a4a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a4b0 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
2a4c0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
2a4d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
2a4e0 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73  eteColumnNames(s
2a4f0 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b  qlite3*,Table*);
2a500 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75  .int sqlite3Colu
2a510 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  mnsFromExprList(
2a520 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
2a530 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b  ,i16*,Column**);
2a540 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2a550 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65  ectAddColumnType
2a560 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72  AndCollation(Par
2a570 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63  se*,Table*,Selec
2a580 74 2a 2c 63 68 61 72 29 3b 0a 54 61 62 6c 65 20  t*,char);.Table 
2a590 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
2a5a0 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
2a5b0 2c 53 65 6c 65 63 74 2a 2c 63 68 61 72 29 3b 0a  ,Select*,char);.
2a5c0 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
2a5d0 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
2a5e0 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78  e *, int);.Index
2a5f0 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79   *sqlite3Primary
2a600 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29  KeyIndex(Table*)
2a610 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c  ;.i16 sqlite3Col
2a620 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78  umnOfIndex(Index
2a630 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71  *, i16);.void sq
2a640 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
2a650 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
2a660 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
2a670 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54  ,int);.#if SQLIT
2a680 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
2a690 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73  COLUMNS.  void s
2a6a0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
2a6b0 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
2a6c0 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  able*, Column*);
2a6d0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2a6e0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
2a6f0 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
2a700 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  T,C) /* no-op */
2a710 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2a720 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
2a730 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
2a740 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2a750 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73  3AddNotNull(Pars
2a760 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
2a770 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79  qlite3AddPrimary
2a780 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
2a790 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
2a7a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2a7b0 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74  te3AddCheckConst
2a7c0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78  raint(Parse*, Ex
2a7d0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2a7e0 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
2a7f0 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  e(Parse*,Expr*,c
2a800 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
2a810 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2a820 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
2a830 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
2a840 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2a850 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
2a860 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75  ,Token*,Token*,u
2a870 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  8,Select*);.int 
2a880 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
2a890 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
2a8a0 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
2a8b0 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
2a8c0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
2a8d0 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
2a8e0 63 68 61 72 20 2a 2a 29 3b 0a 23 69 66 64 65 66  char **);.#ifdef
2a8f0 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45   SQLITE_HAS_CODE
2a900 43 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  C.  int sqlite3C
2a910 6f 64 65 63 51 75 65 72 79 50 61 72 61 6d 65 74  odecQueryParamet
2a920 65 72 73 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ers(sqlite3*,con
2a930 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
2a940 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
2a950 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2a960 65 63 51 75 65 72 79 50 61 72 61 6d 65 74 65 72  ecQueryParameter
2a970 73 28 41 2c 42 2c 43 29 20 30 0a 23 65 6e 64 69  s(A,B,C) 0.#endi
2a980 66 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33  f.Btree *sqlite3
2a990 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71  DbNameToBtree(sq
2a9a0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2a9b0 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  r*);..#ifdef SQL
2a9c0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23  ITE_UNTESTABLE.#
2a9d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
2a9e0 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54  aultSim(X) SQLIT
2a9f0 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74  E_OK.#else.  int
2aa00 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
2aa10 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42  (int);.#endif..B
2aa20 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69  itvec *sqlite3Bi
2aa30 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b  tvecCreate(u32);
2aa40 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
2aa50 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20  ecTest(Bitvec*, 
2aa60 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
2aa70 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75  3BitvecTestNotNu
2aa80 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  ll(Bitvec*, u32)
2aa90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
2aaa0 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
2aab0 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
2aac0 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
2aad0 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
2aae0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2aaf0 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
2ab00 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
2ab10 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
2ab20 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20  tvec*);.#ifndef 
2ab30 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2ab40 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  E.int sqlite3Bit
2ab50 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69  vecBuiltinTest(i
2ab60 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66  nt,int*);.#endif
2ab70 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65  ..RowSet *sqlite
2ab80 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69  3RowSetInit(sqli
2ab90 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
2aba0 74 65 33 52 6f 77 53 65 74 44 65 6c 65 74 65 28  te3RowSetDelete(
2abb0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
2abc0 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
2abd0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
2abe0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2abf0 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a  (RowSet*, i64);.
2ac00 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
2ac10 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69  tTest(RowSet*, i
2ac20 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b  nt iBatch, i64);
2ac30 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
2ac40 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20  etNext(RowSet*, 
2ac50 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  i64*);..void sql
2ac60 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50  ite3CreateView(P
2ac70 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
2ac80 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  en*,Token*,ExprL
2ac90 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ist*,Select*,int
2aca0 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
2acb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2acc0 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
2acd0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
2ace0 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
2acf0 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
2ad00 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
2ad10 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
2ad20 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2ad30 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
2ad40 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
2ad50 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
2ad60 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
2ad70 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d    int sqlite3DbM
2ad80 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61  askAllZero(yDbMa
2ad90 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  sk);.#endif.void
2ada0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
2adb0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
2adc0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
2add0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
2ade0 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
2adf0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
2ae00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2ae10 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
2ae20 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 76  te3*, Table*);.v
2ae30 6f 69 64 20 73 71 6c 69 74 65 33 46 72 65 65 49  oid sqlite3FreeI
2ae40 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 20 49  ndex(sqlite3*, I
2ae50 6e 64 65 78 2a 29 3b 0a 23 69 66 6e 64 65 66 20  ndex*);.#ifndef 
2ae60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2ae70 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
2ae80 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
2ae90 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
2aea0 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
2aeb0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
2aec0 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
2aed0 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
2aee0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2aef0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
2af00 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
2af10 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
2af20 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
2af30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
2af40 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
2af50 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
2af60 64 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55 70 73  dList*, int, Ups
2af70 65 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ert*);.void *sql
2af80 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
2af90 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
2afa0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
2afb0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
2afc0 49 64 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  IdListAppend(Par
2afd0 73 65 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f  se*, IdList*, To
2afe0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2aff0 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64  e3IdListIndex(Id
2b000 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
2b010 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
2b020 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72  ite3SrcListEnlar
2b030 67 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ge(Parse*, SrcLi
2b040 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
2b050 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
2b060 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 50 61  SrcListAppend(Pa
2b070 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2b080 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2b090 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
2b0a0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
2b0b0 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
2b0c0 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
2b0d0 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
2b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2b100 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
2b110 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
2b120 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
2b130 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
2b140 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
2b150 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
2b160 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46   sqlite3SrcListF
2b170 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20  uncArgs(Parse*, 
2b180 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
2b190 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
2b1a0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
2b1b0 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
2b1c0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
2b1d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
2b1e0 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
2b1f0 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
2b200 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
2b210 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
2b220 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
2b230 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
2b240 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
2b250 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
2b260 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
2b270 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
2b280 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
2b290 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
2b2a0 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
2b2b0 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
2b2c0 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73  ,char**);.void s
2b2d0 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65  qlite3CreateInde
2b2e0 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  x(Parse*,Token*,
2b2f0 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c  Token*,SrcList*,
2b300 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f  ExprList*,int,To
2b310 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
2b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b330 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  Expr*, int, int,
2b340 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2b350 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
2b360 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
2b370 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
2b380 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
2b390 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
2b3a0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
2b3b0 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
2b3c0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
2b3d0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
2b3e0 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
2b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b400 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
2b410 2a 2c 75 33 32 2c 45 78 70 72 2a 29 3b 0a 76 6f  *,u32,Expr*);.vo
2b420 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2b430 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
2b440 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
2b450 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
2b460 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
2b470 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
2b480 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
2b490 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2b4a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b4b0 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
2b4c0 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
2b4d0 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
2b4e0 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
2b4f0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
2b500 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
2b510 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
2b520 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
2b530 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
2b540 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
2b550 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
2b560 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
2b570 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
2b580 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
2b590 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
2b5a0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
2b5b0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
2b5c0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2b5d0 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
2b5e0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
2b5f0 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 45  ist*,Expr*,int,E
2b600 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 0a  xprList*,Expr*,.
2b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b620 20 20 20 55 70 73 65 72 74 2a 29 3b 0a 57 68 65     Upsert*);.Whe
2b630 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
2b640 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
2b650 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
2b660 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
2b670 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
2b680 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
2b690 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
2b6a0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68  LogEst sqlite3Wh
2b6b0 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
2b6c0 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
2b6d0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
2b6e0 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
2b6f0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
2b700 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
2b710 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
2b720 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72  t sqlite3WhereOr
2b730 64 65 72 42 79 4c 69 6d 69 74 4f 70 74 4c 61 62  derByLimitOptLab
2b740 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
2b750 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
2b760 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e  IsSorted(WhereIn
2b770 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
2b780 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
2b790 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
2b7a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2b7b0 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
2b7c0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2b7d0 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
2b7e0 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  ss(WhereInfo*, i
2b7f0 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e  nt*);.#define ON
2b800 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30  EPASS_OFF      0
2b810 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f          /* Use o
2b820 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c  f ONEPASS not al
2b830 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  lowed */.#define
2b840 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20   ONEPASS_SINGLE 
2b850 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    1        /* ON
2b860 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20  EPASS valid for 
2b870 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64  a single row upd
2b880 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ate */.#define O
2b890 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20  NEPASS_MULTI    
2b8a0 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50  2        /* ONEP
2b8b0 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ASS is valid for
2b8c0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
2b8d0 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
2b8e0 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43  prCodeLoadIndexC
2b8f0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e  olumn(Parse*, In
2b900 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
2b910 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b920 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
2b930 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  mn(Parse*, Table
2b940 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2b950 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
2b960 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
2b970 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65  lumnOfTable(Vdbe
2b980 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2b990 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2b9a0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d  sqlite3ExprCodeM
2b9b0 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
2b9c0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b9d0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2b9e0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2b9f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2ba00 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50  e3ExprCodeCopy(P
2ba10 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2ba20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2ba30 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62  ExprCodeFactorab
2ba40 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  le(Parse*, Expr*
2ba50 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2ba60 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
2ba70 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
2ba80 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2ba90 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50  e3ExprCodeTemp(P
2baa0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2bab0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2bac0 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50  ExprCodeTarget(P
2bad0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2bae0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2baf0 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65  ExprCodeAndCache
2bb00 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2bb10 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2bb20 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73  3ExprCodeExprLis
2bb30 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
2bb40 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  st*, int, int, u
2bb50 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  8);.#define SQLI
2bb60 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20  TE_ECEL_DUP     
2bb70 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20   0x01  /* Deep, 
2bb80 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69  not shallow copi
2bb90 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
2bba0 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52  LITE_ECEL_FACTOR
2bbb0 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74     0x02  /* Fact
2bbc0 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20  or out constant 
2bbd0 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  terms */.#define
2bbe0 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46   SQLITE_ECEL_REF
2bbf0 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55        0x04  /* U
2bc00 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  se ExprList.u.x.
2bc10 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23  iOrderByCol */.#
2bc20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
2bc30 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38  EL_OMITREF  0x08
2bc40 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70    /* Omit if Exp
2bc50 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72  rList.u.x.iOrder
2bc60 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71  ByCol */.void sq
2bc70 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
2bc80 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2bc90 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2bca0 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
2bcb0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
2bcc0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2bcd0 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
2bce0 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45  lseDup(Parse*, E
2bcf0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
2bd00 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46  .Table *sqlite3F
2bd10 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33  indTable(sqlite3
2bd20 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
2bd30 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
2bd40 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57  fine LOCATE_VIEW
2bd50 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65      0x01.#define
2bd60 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20   LOCATE_NOERR   
2bd70 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69  0x02.Table *sqli
2bd80 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
2bd90 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c  arse*,u32 flags,
2bda0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2bdb0 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
2bdc0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
2bdd0 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
2bde0 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74  u32 flags,struct
2bdf0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
2be00 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
2be10 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
2be20 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
2be30 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2be40 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
2be50 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
2be60 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
2be70 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2be80 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2be90 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
2bea0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
2beb0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2bec0 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c  e3Vacuum(Parse*,
2bed0 54 6f 6b 65 6e 2a 2c 45 78 70 72 2a 29 3b 0a 69  Token*,Expr*);.i
2bee0 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
2bef0 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
2bf00 74 65 33 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74  te3*, int, sqlit
2bf10 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 63 68 61 72  e3_value*);.char
2bf20 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
2bf30 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
2bf40 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2bf50 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
2bf60 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45  (Parse*,Expr*, E
2bf70 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2bf80 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
2bf90 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78  reSkip(Expr*, Ex
2bfa0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
2bfb0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
2bfc0 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
2bfd0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
2bfe0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2bff0 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72  rImpliesExpr(Par
2c000 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  se*,Expr*, Expr*
2c010 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2c020 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 4e 6f  te3ExprImpliesNo
2c030 6e 4e 75 6c 6c 52 6f 77 28 45 78 70 72 2a 2c 69  nNullRow(Expr*,i
2c040 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c050 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
2c060 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
2c070 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
2c080 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
2c090 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
2c0a0 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
2c0b0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2c0c0 45 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e 64  ExprCoveredByInd
2c0d0 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69 43  ex(Expr*, int iC
2c0e0 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78 29  ur, Index *pIdx)
2c0f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
2c100 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
2c110 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
2c120 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
2c130 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
2c140 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c150 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20  UNTESTABLE.void 
2c160 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53  sqlite3PrngSaveS
2c170 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
2c180 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74   sqlite3PrngRest
2c190 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  oreState(void);.
2c1a0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2c1b0 74 65 33 46 61 73 74 50 72 6e 67 49 6e 69 74 28  te3FastPrngInit(
2c1c0 46 61 73 74 50 72 6e 67 2a 29 3b 0a 76 6f 69 64  FastPrng*);.void
2c1d0 20 73 71 6c 69 74 65 33 46 61 73 74 52 61 6e 64   sqlite3FastRand
2c1e0 6f 6d 6e 65 73 73 28 46 61 73 74 50 72 6e 67 2a  omness(FastPrng*
2c1f0 2c 20 69 6e 74 20 4e 2c 20 76 6f 69 64 20 2a 50  , int N, void *P
2c200 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2c210 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
2c220 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
2c230 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
2c240 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69  Schema(Parse*, i
2c250 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c260 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64  3CodeVerifyNamed
2c270 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63  Schema(Parse*, c
2c280 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b  onst char *zDb);
2c290 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
2c2a0 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  inTransaction(Pa
2c2b0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
2c2c0 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73   sqlite3EndTrans
2c2d0 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e  action(Parse*,in
2c2e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2c2f0 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
2c300 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
2c310 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
2c320 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
2c330 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
2c340 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
2c350 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
2c360 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2c370 74 65 33 45 78 70 72 49 64 54 6f 54 72 75 65 46  te3ExprIdToTrueF
2c380 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  alse(Expr*);.int
2c390 20 73 71 6c 69 74 65 33 45 78 70 72 54 72 75 74   sqlite3ExprTrut
2c3a0 68 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70  hValue(const Exp
2c3b0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2c3c0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
2c3d0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2c3e0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
2c3f0 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
2c400 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2c410 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
2c420 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a  ion(Expr*, u8);.
2c430 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2c440 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70  sConstantOrGroup
2c450 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  By(Parse*, Expr*
2c460 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
2c470 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
2c480 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
2c490 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  r*,int);.#ifdef 
2c4a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
2c4b0 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73  RSOR_HINTS.int s
2c4c0 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69  qlite3ExprContai
2c4d0 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a  nsSubquery(Expr*
2c4e0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2c4f0 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
2c500 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
2c510 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c520 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
2c530 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2c540 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
2c550 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
2c560 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
2c570 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
2c580 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
2c590 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
2c5a0 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
2c5b0 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c  .    Parse*,Tabl
2c5c0 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
2c5d0 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
2c5e0 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  8,u8,int);.void 
2c5f0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
2c600 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
2c610 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2c620 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2c630 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
2c640 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
2c650 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
2c660 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
2c670 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
2c680 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2c690 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
2c6a0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
2c6b0 74 20 73 71 6c 69 74 65 33 45 78 70 72 52 65 66  t sqlite3ExprRef
2c6c0 65 72 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f  erencesUpdatedCo
2c6d0 6c 75 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c  lumn(Expr*,int*,
2c6e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c6f0 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  e3GenerateConstr
2c700 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
2c710 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e  *,Table*,int*,in
2c720 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20  t,int,int,int,. 
2c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c750 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e      u8,u8,int,in
2c760 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29  t*,int*,Upsert*)
2c770 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2c780 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
2c790 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53  .  void sqlite3S
2c7a0 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56  etMakeRecordP5(V
2c7b0 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  dbe*,Table*);.#e
2c7c0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2c7d0 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
2c7e0 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  dP5(A,B).#endif.
2c7f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
2c800 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
2c810 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
2c820 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  int,int,int*,int
2c830 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ,int,int);.int s
2c840 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
2c850 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
2c860 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75  , Table*, int, u
2c870 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74  8, int, u8*, int
2c880 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  *, int*);.void s
2c890 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
2c8a0 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a  Operation(Parse*
2c8b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2c8c0 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72  d sqlite3MultiWr
2c8d0 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ite(Parse*);.voi
2c8e0 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72  d sqlite3MayAbor
2c8f0 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
2c900 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74  sqlite3HaltConst
2c910 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
2c920 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69  t, int, char*, i
2c930 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  8, u8);.void sql
2c940 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72  ite3UniqueConstr
2c950 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2c960 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
2c970 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73  sqlite3RowidCons
2c980 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
2c990 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70  nt, Table*);.Exp
2c9a0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
2c9b0 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
2c9c0 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20  ,int);.ExprList 
2c9d0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
2c9e0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
2c9f0 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63  rList*,int);.Src
2ca00 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
2ca10 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
2ca20 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ,SrcList*,int);.
2ca30 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
2ca40 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  dListDup(sqlite3
2ca50 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65  *,IdList*);.Sele
2ca60 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
2ca70 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  tDup(sqlite3*,Se
2ca80 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  lect*,int);.Func
2ca90 44 65 66 20 2a 73 71 6c 69 74 65 33 46 75 6e 63  Def *sqlite3Func
2caa0 74 69 6f 6e 53 65 61 72 63 68 28 69 6e 74 2c 63  tionSearch(int,c
2cab0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2cac0 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42  d sqlite3InsertB
2cad0 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63  uiltinFuncs(Func
2cae0 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44  Def*,int);.FuncD
2caf0 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
2cb00 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
2cb10 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2cb20 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71  ,u8,u8);.void sq
2cb30 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69  lite3RegisterBui
2cb40 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f  ltinFunctions(vo
2cb50 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
2cb60 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
2cb70 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
2cb80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2cb90 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74  gisterPerConnect
2cba0 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  ionBuiltinFuncti
2cbb0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ons(sqlite3*);.i
2cbc0 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
2cbd0 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
2cbe0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
2cbf0 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
2cc00 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
2cc10 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
2cc20 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
2cc30 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
2cc40 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
2cc50 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
2cc60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2cc70 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
2cc80 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
2cc90 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2cca0 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
2ccb0 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65  *,Expr*,int);.#e
2ccc0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2ccd0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2cce0 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
2ccf0 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
2cd00 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
2cd10 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
2cd20 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
2cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd40 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
2cd50 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
2cd60 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
2cd70 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
2cd80 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
2cd90 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2cda0 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
2cdb0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2cdc0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2cdd0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
2cde0 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
2cdf0 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
2ce00 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
2ce10 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
2ce20 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
2ce30 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
2ce40 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
2ce50 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
2ce60 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
2ce70 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
2ce80 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2ce90 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
2cea0 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
2ceb0 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
2cec0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2cee0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
2cef0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
2cf00 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
2cf10 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
2cf20 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
2cf30 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
2cf40 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
2cf50 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
2cf60 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
2cf70 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
2cf80 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2cf90 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
2cfa0 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
2cfb0 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
2cfc0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2cfd0 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
2cfe0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
2cff0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d010 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2d020 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2d030 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ar*);.  TriggerS
2d040 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2d050 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 50 61  gerInsertStep(Pa
2d060 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  rse*,Token*, IdL
2d070 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
2d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
2d0a0 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a  lect*,u8,Upsert*
2d0b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0d0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2d0e0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2d0f0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2d100 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2d110 72 55 70 64 61 74 65 53 74 65 70 28 50 61 72 73  rUpdateStep(Pars
2d120 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  e*,Token*,ExprLi
2d130 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a  st*, Expr*, u8,.
2d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d160 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2d170 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2d180 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2d190 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
2d1a0 65 6c 65 74 65 53 74 65 70 28 50 61 72 73 65 2a  eleteStep(Parse*
2d1b0 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a  ,Token*, Expr*,.
2d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1e0 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2d1f0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2d200 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2d210 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
2d220 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
2d230 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2d240 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2d250 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
2d260 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
2d270 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
2d280 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
2d290 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
2d2a0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
2d2b0 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
2d2c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
2d2d0 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
2d2e0 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
2d2f0 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
2d300 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20  : (p)).# define 
2d310 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
2d320 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
2d330 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  evel==0).#else.#
2d340 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2d350 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43  riggersExist(B,C
2d360 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69  ,D,E,F) 0.# defi
2d370 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  ne sqlite3Delete
2d380 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64  Trigger(A,B).# d
2d390 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f  efine sqlite3Dro
2d3a0 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29  pTriggerPtr(A,B)
2d3b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d3c0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2d3d0 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23  Trigger(A,B,C).#
2d3e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2d3f0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c  odeRowTrigger(A,
2d400 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29  B,C,D,E,F,G,H,I)
2d410 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d420 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
2d430 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  irect(A,B,C,D,E,
2d440 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  F).# define sqli
2d450 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58  te3TriggerList(X
2d460 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20  , Y) 0.# define 
2d470 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
2d480 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69  evel(p) p.# defi
2d490 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c  ne sqlite3IsTopl
2d4a0 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69  evel(p) 1.# defi
2d4b0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
2d4c0 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44  rColmask(A,B,C,D
2d4d0 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66  ,E,F,G) 0.#endif
2d4e0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69  ..int sqlite3Joi
2d4f0 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  nType(Parse*, To
2d500 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
2d510 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2d520 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e  te3CreateForeign
2d530 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
2d540 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45  List*, Token*, E
2d550 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
2d560 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65  void sqlite3Defe
2d570 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  rForeignKey(Pars
2d580 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65  e*, int);.#ifnde
2d590 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
2d5a0 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f  THORIZATION.  vo
2d5b0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  id sqlite3AuthRe
2d5c0 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ad(Parse*,Expr*,
2d5d0 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a  Schema*,SrcList*
2d5e0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2d5f0 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a  AuthCheck(Parse*
2d600 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  ,int, const char
2d610 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2d620 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2d630 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2d640 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73  ContextPush(Pars
2d650 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a  e*, AuthContext*
2d660 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2d670 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2d680 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74  thContextPop(Aut
2d690 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e  hContext*);.  in
2d6a0 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  t sqlite3AuthRea
2d6b0 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e  dCol(Parse*, con
2d6c0 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
2d6d0 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23   char *, int);.#
2d6e0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2d6f0 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c  lite3AuthRead(a,
2d700 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20  b,c,d).# define 
2d710 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
2d720 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
2d730 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
2d740 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
2d750 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
2d760 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d770 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
2d780 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
2d790 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2d7a0 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
2d7b0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
2d7c0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2d7d0 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
2d7e0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2d7f0 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62  qlite3FixInit(Db
2d800 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20  Fixer*, Parse*, 
2d810 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2d820 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
2d830 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
2d840 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  rcList(DbFixer*,
2d850 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
2d860 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74  sqlite3FixSelect
2d870 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63  (DbFixer*, Selec
2d880 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2d890 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a  FixExpr(DbFixer*
2d8a0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
2d8b0 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74  lite3FixExprList
2d8c0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c  (DbFixer*, ExprL
2d8d0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2d8e0 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70  e3FixTriggerStep
2d8f0 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67  (DbFixer*, Trigg
2d900 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71  erStep*);.int sq
2d910 6c 69 74 65 33 52 65 61 6c 53 61 6d 65 41 73 49  lite3RealSameAsI
2d920 6e 74 28 64 6f 75 62 6c 65 2c 73 71 6c 69 74 65  nt(double,sqlite
2d930 33 5f 69 6e 74 36 34 29 3b 0a 69 6e 74 20 73 71  3_int64);.int sq
2d940 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
2d950 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a  char *z, double*
2d960 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
2d970 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
2d980 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
2d990 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2d9a0 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  Atoi(const char*
2d9b0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2d9c0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74  E_OMIT_UTF16.int
2d9d0 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74   sqlite3Utf16Byt
2d9e0 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20  eLen(const void 
2d9f0 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61  *pData, int nCha
2da00 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  r);.#endif.int s
2da10 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65  qlite3Utf8CharLe
2da20 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44  n(const char *pD
2da30 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b  ata, int nByte);
2da40 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38  .u32 sqlite3Utf8
2da50 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29  Read(const u8**)
2da60 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
2da70 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67  LogEst(u64);.Log
2da80 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2da90 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45  tAdd(LogEst,LogE
2daa0 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  st);.#ifndef SQL
2dab0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2dac0 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c  TABLE.LogEst sql
2dad0 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f  ite3LogEstFromDo
2dae0 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65  uble(double);.#e
2daf0 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2db00 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
2db10 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20  TMT_SCANSTATUS) 
2db20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
2db30 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
2db40 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64  TAT4) || \.    d
2db50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58  efined(SQLITE_EX
2db60 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f  PLAIN_ESTIMATED_
2db70 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65  ROWS).u64 sqlite
2db80 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67  3LogEstToInt(Log
2db90 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69  Est);.#endif.VLi
2dba0 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74  st *sqlite3VList
2dbb0 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69  Add(sqlite3*,VLi
2dbc0 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  st*,const char*,
2dbd0 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20  int,int);.const 
2dbe0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4c 69  char *sqlite3VLi
2dbf0 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73  stNumToName(VLis
2dc00 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t*,int);.int sql
2dc10 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e  ite3VListNameToN
2dc20 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  um(VList*,const 
2dc30 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a  char*,int);../*.
2dc40 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72  ** Routines to r
2dc50 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61  ead and write va
2dc60 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
2dc70 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75  tegers.  These u
2dc80 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66  sed to.** be def
2dc90 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75  ined locally, bu
2dca0 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65  t now we use the
2dcb0 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73   varint routines
2dcc0 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a   in the util.c.*
2dcd0 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  * file..*/.int s
2dce0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
2dcf0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
2dd00 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  u64);.u8 sqlite3
2dd10 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20  GetVarint(const 
2dd20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2dd30 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69   u64 *);.u8 sqli
2dd40 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
2dd50 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2dd60 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e  ar *, u32 *);.in
2dd70 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t sqlite3VarintL
2dd80 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a  en(u64 v);../*.*
2dd90 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  * The common cas
2dda0 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e  e is for a varin
2ddb0 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65  t to be a single
2ddc0 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c   byte.  They fol
2ddd0 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73  lowing.** macros
2dde0 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d   handle the comm
2ddf0 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74 20  on case without 
2de00 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c  a procedure call
2de10 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a  , but then call.
2de20 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  ** the procedure
2de30 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69   for larger vari
2de40 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  nts..*/.#define 
2de50 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  getVarint32(A,B)
2de60 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29    \.  (u8)((*(A)
2de70 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d  <(u8)0x80)?((B)=
2de80 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c  (u32)*(A)),1:sql
2de90 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
2dea0 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29  (A),(u32 *)&(B))
2deb0 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  ).#define putVar
2dec0 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
2ded0 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28  (u8)(((u32)(B)<(
2dee0 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d  u32)0x80)?(*(A)=
2def0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
2df00 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65  B)),1:\.  sqlite
2df10 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28  3PutVarint((A),(
2df20 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74  B))).#define get
2df30 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
2df40 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69  3GetVarint.#defi
2df50 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20  ne putVarint    
2df60 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2df70 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ...const char *s
2df80 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
2df90 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c  ityStr(sqlite3*,
2dfa0 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
2dfb0 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e  qlite3TableAffin
2dfc0 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ity(Vdbe*, Table
2dfd0 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  *, int);.char sq
2dfe0 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69  lite3CompareAffi
2dff0 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
2e000 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e  , char aff2);.in
2e010 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66  t sqlite3IndexAf
2e020 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70  finityOk(Expr *p
2e030 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61  Expr, char idx_a
2e040 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73  ffinity);.char s
2e050 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d  qlite3TableColum
2e060 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c 65 2a  nAffinity(Table*
2e070 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69  ,int);.char sqli
2e080 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28  te3ExprAffinity(
2e090 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e  Expr *pExpr);.in
2e0a0 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28  t sqlite3Atoi64(
2e0b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
2e0c0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
2e0d0 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
2e0e0 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72  ToI64(const char
2e0f0 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73  *, i64*);.void s
2e100 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d  qlite3ErrorWithM
2e110 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  sg(sqlite3*, int
2e120 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  , const char*,..
2e130 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
2e140 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
2e150 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2e160 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71 6c  3SystemError(sql
2e170 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2e180 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c   *sqlite3HexToBl
2e190 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  ob(sqlite3*, con
2e1a0 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
2e1b0 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65  n);.u8 sqlite3He
2e1c0 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69  xToInt(int h);.i
2e1d0 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72  nt sqlite3TwoPar
2e1e0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54  tName(Parse *, T
2e1f0 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  oken *, Token *,
2e200 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66   Token **);..#if
2e210 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2e220 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63  NEED_ERR_NAME).c
2e230 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2e240 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a  e3ErrName(int);.
2e250 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2e260 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53  QLITE_ENABLE_DES
2e270 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20 73 71 6c  ERIALIZE.int sql
2e280 69 74 65 33 4d 65 6d 64 62 49 6e 69 74 28 76 6f  ite3MemdbInit(vo
2e290 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e  id);.#endif..con
2e2a0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2e2b0 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74  ErrStr(int);.int
2e2c0 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
2e2d0 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ma(Parse *pParse
2e2e0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2e2f0 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73  te3FindCollSeq(s
2e300 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20  qlite3*,u8 enc, 
2e310 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2e320 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 42  ;.int sqlite3IsB
2e330 69 6e 61 72 79 28 63 6f 6e 73 74 20 43 6f 6c 6c  inary(const Coll
2e340 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Seq*);.CollSeq *
2e350 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
2e360 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2e370 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
2e380 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
2e390 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
2e3a0 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2e3b0 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
2e3c0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2e3d0 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50 61  ExprNNCollSeq(Pa
2e3e0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2e3f0 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
2e400 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
2e410 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c 45 78  qMatch(Parse*,Ex
2e420 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
2e430 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
2e440 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
2e450 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2e460 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  *, const Token*,
2e470 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
2e480 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
2e490 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c  teString(Parse*,
2e4a0 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
2e4b0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2e4c0 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
2e4d0 28 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  (Expr*);.Expr *s
2e4e0 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
2e4f0 6c 6c 61 74 65 41 6e 64 4c 69 6b 65 6c 79 28 45  llateAndLikely(E
2e500 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2e510 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
2e520 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
2e530 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2e540 72 69 74 61 62 6c 65 53 63 68 65 6d 61 28 73 71  ritableSchema(sq
2e550 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2e560 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e  ite3CheckObjectN
2e570 61 6d 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ame(Parse*, cons
2e580 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2e590 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2e5a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
2e5b0 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
2e5c0 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
2e5d0 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
2e5e0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2e5f0 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
2e600 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2e610 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
2e620 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2e630 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
2e640 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
2e650 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
2e660 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
2e670 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
2e680 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
2e690 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2e6a0 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2e6b0 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
2e6c0 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
2e6d0 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
2e6e0 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
2e6f0 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
2e700 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
2e710 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
2e720 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
2e730 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2e740 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2e750 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
2e760 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
2e770 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
2e780 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
2e790 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
2e7a0 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
2e7b0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2e7c0 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c  Null(sqlite3_val
2e7d0 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ue*);.void sqlit
2e7e0 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
2e7f0 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 23 69 66  te3_value*);.#if
2e800 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
2e810 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
2e820 74 65 33 52 65 73 75 6c 74 49 6e 74 52 65 61 6c  te3ResultIntReal
2e830 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2e840 2a 29 3b 0a 23 65 6e 64 69 66 0a 73 71 6c 69 74  *);.#endif.sqlit
2e850 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65  e3_value *sqlite
2e860 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65  3ValueNew(sqlite
2e870 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  3 *);.#ifndef SQ
2e880 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
2e890 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
2e8a0 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
2e8b0 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2e8c0 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69  t, u8);.#endif.i
2e8d0 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  nt sqlite3ValueF
2e8e0 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20  romExpr(sqlite3 
2e8f0 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75  *, Expr *, u8, u
2e900 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
2e910 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
2e920 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
2e930 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c  nity(sqlite3_val
2e940 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23  ue *, u8, u8);.#
2e950 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2e960 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72  ALGAMATION.exter
2e970 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2e980 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63   char sqlite3Opc
2e990 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65  odeProperty[];.e
2e9a0 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72  xtern const char
2e9b0 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52   sqlite3StrBINAR
2e9c0 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  Y[];.extern cons
2e9d0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2e9e0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
2e9f0 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
2ea00 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2ea10 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
2ea20 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
2ea30 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
2ea40 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
2ea50 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
2ea60 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
2ea70 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
2ea80 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66  ;.extern FuncDef
2ea90 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c  Hash sqlite3Buil
2eaa0 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69  tinFunctions;.#i
2eab0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2eac0 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74  T_WSD.extern int
2ead0 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42   sqlite3PendingB
2eae0 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64  yte;.#endif.#end
2eaf0 69 66 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  if.#ifdef VDBE_P
2eb00 52 4f 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71  ROFILE.extern sq
2eb10 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c  lite3_uint64 sql
2eb20 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b  ite3NProfileCnt;
2eb30 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2eb40 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
2eb50 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
2eb60 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2eb70 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
2eb80 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2eb90 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2eba0 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
2ebb0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
2ebc0 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
2ebd0 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
2ebe0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
2ebf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2ec00 6c 74 65 72 52 65 6e 61 6d 65 43 6f 6c 75 6d 6e  lterRenameColumn
2ec10 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2ec20 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2ec30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
2ec40 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
2ec50 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
2ec60 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
2ec70 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
2ec80 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2ec90 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
2eca0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
2ecb0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
2ecc0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76  qlite3*, int);.v
2ecd0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
2ece0 68 73 4f 66 49 4e 28 50 61 72 73 65 2a 2c 20 45  hsOfIN(Parse*, E
2ecf0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
2ed00 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
2ed10 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70  lect(Parse*, Exp
2ed20 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2ed30 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73  3SelectPrep(Pars
2ed40 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
2ed50 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
2ed60 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72   sqlite3SelectWr
2ed70 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72  ongNumTermsError
2ed80 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2ed90 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20  Select *p);.int 
2eda0 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e  sqlite3MatchSpan
2edb0 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Name(const char*
2edc0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2edd0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2ede0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
2edf0 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
2ee00 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
2ee10 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  t*, Expr*);.int 
2ee20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
2ee30 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65  prListNames(Name
2ee40 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69  Context*, ExprLi
2ee50 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
2ee60 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
2ee70 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
2ee80 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
2ee90 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2eea0 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72  ResolveSelfRefer
2eeb0 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  ence(Parse*,Tabl
2eec0 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  e*,int,Expr*,Exp
2eed0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2eee0 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
2eef0 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
2ef00 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
2ef10 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2ef20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
2ef30 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
2ef40 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
2ef50 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2ef60 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
2ef70 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
2ef80 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
2ef90 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
2efa0 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
2efb0 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
2efc0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
2efd0 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70 28 50 61 72  nameTokenMap(Par
2efe0 73 65 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f 6b 65  se*, void*, Toke
2eff0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2f000 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 52 65 6d 61  3RenameTokenRema
2f010 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 20 2a  p(Parse*, void *
2f020 70 54 6f 2c 20 76 6f 69 64 20 2a 70 46 72 6f 6d  pTo, void *pFrom
2f030 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2f040 65 6e 61 6d 65 45 78 70 72 55 6e 6d 61 70 28 50  enameExprUnmap(P
2f050 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
2f060 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d  oid sqlite3Renam
2f070 65 45 78 70 72 6c 69 73 74 55 6e 6d 61 70 28 50  eExprlistUnmap(P
2f080 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2f090 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2f0a0 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61  te3GetCollSeq(Pa
2f0b0 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65  rse*, u8, CollSe
2f0c0 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  q *, const char*
2f0d0 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41  );.char sqlite3A
2f0e0 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73  ffinityType(cons
2f0f0 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d 6e 2a  t char*, Column*
2f100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2f110 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54  nalyze(Parse*, T
2f120 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
2f130 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
2f140 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
2f150 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c 69 74  yHandler*, sqlit
2f160 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74 20 73  e3_file*);.int s
2f170 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c  qlite3FindDb(sql
2f180 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
2f190 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2f1a0 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c  bName(sqlite3 *,
2f1b0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2f1c0 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  int sqlite3Analy
2f1d0 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a  sisLoad(sqlite3*
2f1e0 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20  ,int iDB);.void 
2f1f0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64  sqlite3DeleteInd
2f200 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65  exSamples(sqlite
2f210 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  3*,Index*);.void
2f220 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52   sqlite3DefaultR
2f230 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76  owEst(Index*);.v
2f240 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2f250 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
2f260 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
2f270 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69  .int sqlite3IsLi
2f280 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  keFunction(sqlit
2f290 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63  e3*,Expr*,int*,c
2f2a0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2f2b0 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76  te3SchemaClear(v
2f2c0 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a  oid *);.Schema *
2f2d0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
2f2e0 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65  (sqlite3 *, Btre
2f2f0 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
2f300 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73  3SchemaToIndex(s
2f310 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65  qlite3 *db, Sche
2f320 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  ma *);.KeyInfo *
2f330 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c  sqlite3KeyInfoAl
2f340 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
2f350 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2f360 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28  te3KeyInfoUnref(
2f370 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
2f380 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2f390 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  foRef(KeyInfo*);
2f3a0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2f3b0 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28  3KeyInfoOfIndex(
2f3c0 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b  Parse*, Index*);
2f3d0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2f3e0 33 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78 70 72  3KeyInfoFromExpr
2f3f0 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
2f400 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
2f410 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 61  );.int sqlite3Ha
2f420 73 45 78 70 6c 69 63 69 74 4e 75 6c 6c 73 28 50  sExplicitNulls(P
2f430 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2f440 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2f450 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
2f460 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74  te3KeyInfoIsWrit
2f470 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b  eable(KeyInfo*);
2f480 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2f490 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71  te3CreateFunc(sq
2f4a0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
2f4b0 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  har *, int, int,
2f4c0 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20   void *,.  void 
2f4d0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2f4e0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2f4f0 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f  _value **),.  vo
2f500 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2f510 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2f520 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a  te3_value **), .
2f530 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2f540 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
2f550 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2f560 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f  _context*),.  vo
2f570 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2f580 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2f590 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 0a  te3_value **), .
2f5a0 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
2f5b0 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
2f5c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 6f 6f  .void sqlite3Noo
2f5d0 70 44 65 73 74 72 75 63 74 6f 72 28 76 6f 69 64  pDestructor(void
2f5e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f5f0 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33  OomFault(sqlite3
2f600 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2f610 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33  OomClear(sqlite3
2f620 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2f630 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a  piExit(sqlite3 *
2f640 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  db, int);.int sq
2f650 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
2f660 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a  abase(Parse *);.
2f670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
2f680 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63  AccumInit(StrAcc
2f690 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63  um*, sqlite3*, c
2f6a0 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
2f6b0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74  .char *sqlite3St
2f6c0 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72  rAccumFinish(Str
2f6d0 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
2f6e0 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49  lite3SelectDestI
2f6f0 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c  nit(SelectDest*,
2f700 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  int,int);.Expr *
2f710 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c  sqlite3CreateCol
2f720 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20  umnExpr(sqlite3 
2f730 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e  *, SrcList *, in
2f740 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73  t, int);..void s
2f750 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74  qlite3BackupRest
2f760 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  art(sqlite3_back
2f770 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  up *);.void sqli
2f780 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28  te3BackupUpdate(
2f790 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
2f7a0 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38  , Pgno, const u8
2f7b0 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51   *);..#ifndef SQ
2f7c0 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
2f7d0 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  RY.int sqlite3Ex
2f7e0 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a  prCheckIN(Parse*
2f7f0 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a  , Expr*);.#else.
2f800 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2f810 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29  ExprCheckIN(x,y)
2f820 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69   SQLITE_OK.#endi
2f830 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2f840 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 69 6e  _ENABLE_STAT4.in
2f850 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
2f860 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20  obeSetValue(.   
2f870 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55   Parse*,Index*,U
2f880 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c  npackedRecord**,
2f890 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  Expr*,int,int,in
2f8a0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2f8b0 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78  Stat4ValueFromEx
2f8c0 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  pr(Parse*, Expr*
2f8d0 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2f8e0 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lue**);.void sql
2f8f0 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72  ite3Stat4ProbeFr
2f900 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ee(UnpackedRecor
2f910 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
2f920 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69  Stat4Column(sqli
2f930 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  te3*, const void
2f940 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c  *, int, int, sql
2f950 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63  ite3_value**);.c
2f960 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78  har sqlite3Index
2f970 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
2f980 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c  qlite3*, Index*,
2f990 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f   int);.#endif../
2f9a0 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
2f9b0 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
2f9c0 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
2f9d0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
2f9e0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
2f9f0 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50    void *sqlite3P
2fa00 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
2fa10 28 2a 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a  (*)(u64), Parse*
2fa20 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2fa30 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
2fa40 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
2fa50 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ));.#endif.void 
2fa60 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
2fa70 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29  id*, int, Token)
2fa80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72  ;.int sqlite3Par
2fa90 73 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29  serFallback(int)
2faa0 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
2fab0 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
2fac0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2fad0 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
2fae0 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
2faf0 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
2fb00 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
2fb10 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
2fb20 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
2fb30 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
2fb40 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2fb50 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
2fb60 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2fb70 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2fb80 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
2fb90 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2fba0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2fbb0 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
2fbc0 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
2fbd0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
2fbe0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2fbf0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2fc00 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2fc10 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
2fc20 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2fc30 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
2fc40 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
2fc50 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
2fc60 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2fc70 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2fc80 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
2fc90 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
2fca0 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
2fcb0 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
2fcc0 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
2fcd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2fce0 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
2fcf0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2fd00 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
2fd10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2fd20 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
2fd30 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2fd40 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64  VtabLock(X).#  d
2fd50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2fd60 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
2fd70 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2fd80 4d 6f 64 75 6c 65 55 6e 72 65 66 28 44 2c 58 29  ModuleUnref(D,X)
2fd90 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2fda0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
2fdb0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2fdc0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
2fdd0 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49  nt(X, Y, Z) SQLI
2fde0 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
2fdf0 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
2fe00 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a  (X,Y)  ((VTable*
2fe10 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69  )0).#else.   voi
2fe20 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  d sqlite3VtabCle
2fe30 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ar(sqlite3 *db, 
2fe40 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  Table*);.   void
2fe50 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
2fe60 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a  onnect(sqlite3 *
2fe70 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20  db, Table *p);. 
2fe80 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2fe90 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
2fea0 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e  b, Vdbe*);.   in
2feb0 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  t sqlite3VtabRol
2fec0 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64  lback(sqlite3 *d
2fed0 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  b);.   int sqlit
2fee0 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c  e3VtabCommit(sql
2fef0 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f  ite3 *db);.   vo
2ff00 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  id sqlite3VtabLo
2ff10 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2ff20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2ff30 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  bUnlock(VTable *
2ff40 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2ff50 65 33 56 74 61 62 4d 6f 64 75 6c 65 55 6e 72 65  e3VtabModuleUnre
2ff60 66 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c  f(sqlite3*,Modul
2ff70 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
2ff80 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2ff90 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
2ffa0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2ffb0 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
2ffc0 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
2ffd0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2ffe0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2fff0 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
30000 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
30010 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
30020 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
30030 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20  le*);.   Module 
30040 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61  *sqlite3VtabCrea
30050 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73  teModule(.     s
30060 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f  qlite3*,.     co
30070 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
30080 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
30090 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64  dule*,.     void
300a0 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28  *,.     void(*)(
300b0 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20  void*).   );.#  
300c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
300d0 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64  abInSync(db) ((d
300e0 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26  b)->nVTrans>0 &&
300f0 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d   (db)->aVTrans==
30100 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  0).#endif.int sq
30110 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
30120 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73  usTableInit(Pars
30130 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  e*,Module*);.voi
30140 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  d sqlite3VtabEpo
30150 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72  nymousTableClear
30160 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65  (sqlite3*,Module
30170 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
30180 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
30190 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
301a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
301b0 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
301c0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
301d0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
301e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
301f0 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
30200 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
30210 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
30220 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
30230 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
30240 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
30250 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
30260 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
30270 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
30280 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
30290 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
302a0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
302b0 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
302c0 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
302d0 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
302e0 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
302f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
30300 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
30310 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
30320 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
30330 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
30340 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
30350 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
30360 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
30370 78 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  xpr*);.sqlite3_i
30380 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
30390 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
303a0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
303b0 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
303c0 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
303d0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
303e0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
303f0 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
30400 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
30410 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
30420 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
30430 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
30440 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  e*);.#ifdef SQLI
30450 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c  TE_ENABLE_NORMAL
30460 49 5a 45 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  IZE.char *sqlite
30470 33 4e 6f 72 6d 61 6c 69 7a 65 28 56 64 62 65 2a  3Normalize(Vdbe*
30480 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
30490 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
304a0 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
304b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
304c0 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
304d0 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
304e0 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
304f0 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
30500 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
30510 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
30520 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
30530 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
30540 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
30550 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
30560 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
30570 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
30580 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
30590 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
305a0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
305b0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
305c0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
305d0 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
305e0 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
305f0 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
30600 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
30610 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
30620 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
30630 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
30640 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
30650 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
30660 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
30670 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
30680 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
30690 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
306a0 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
306b0 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
306c0 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
306d0 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
306e0 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
306f0 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
30700 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
30710 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
30720 5f 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55  _OMIT_UPSERT.  U
30730 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70  psert *sqlite3Up
30740 73 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a  sertNew(sqlite3*
30750 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
30760 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
30770 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
30780 33 55 70 73 65 72 74 44 65 6c 65 74 65 28 73 71  3UpsertDelete(sq
30790 6c 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b  lite3*,Upsert*);
307a0 0a 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74  .  Upsert *sqlit
307b0 65 33 55 70 73 65 72 74 44 75 70 28 73 71 6c 69  e3UpsertDup(sqli
307c0 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20  te3*,Upsert*);. 
307d0 20 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65   int sqlite3Upse
307e0 72 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28  rtAnalyzeTarget(
307f0 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
30800 55 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64  Upsert*);.  void
30810 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f   sqlite3UpsertDo
30820 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70  Update(Parse*,Up
30830 73 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64  sert*,Table*,Ind
30840 65 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  ex*,int);.#else.
30850 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
30860 70 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79  psertNew(v,w,x,y
30870 2c 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30 29  ,z) ((Upsert*)0)
30880 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
30890 55 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79  UpsertDelete(x,y
308a0 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
308b0 33 55 70 73 65 72 74 44 75 70 28 78 2c 79 29 20  3UpsertDup(x,y) 
308c0 20 20 20 20 20 20 28 28 55 70 73 65 72 74 2a 29        ((Upsert*)
308d0 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44  0).#endif.../* D
308e0 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
308f0 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
30900 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
30910 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
30920 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
30930 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
30940 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
30950 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
30960 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
30970 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
30980 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
30990 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
309a0 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
309b0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
309c0 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
309d0 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
309e0 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
309f0 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
30a00 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
30a10 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
30a20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
30a30 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64  ity is.** provid
30a40 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
30a50 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
30a60 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
30a70 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
30a80 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
30a90 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
30aa0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
30ab0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
30ac0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
30ad0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
30ae0 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
30af0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
30b00 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
30b10 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
30b20 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
30b30 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
30b40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
30b50 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
30b60 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
30b70 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
30b80 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
30b90 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
30ba0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
30bb0 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
30bc0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
30bd0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
30be0 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
30bf0 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
30c00 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
30c10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
30c20 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
30c30 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
30c40 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
30c50 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
30c60 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
30c70 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
30c80 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30c90 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
30ca0 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
30cb0 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
30cc0 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
30cd0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
30ce0 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
30cf0 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e  (a)        0.#en
30d00 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
30d10 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
30d20 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
30d30 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
30d40 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
30d50 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
30d60 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
30d70 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
30d80 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
30d90 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
30da0 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
30db0 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
30dc0 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
30dd0 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
30de0 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
30df0 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
30e00 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
30e10 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
30e20 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
30e30 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
30e40 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
30e50 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
30e60 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
30e70 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
30e80 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
30e90 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
30ea0 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
30eb0 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
30ec0 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
30ed0 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
30ee0 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
30ef0 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
30f00 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69  _UNTESTABLE.** i
30f10 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
30f20 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
30f30 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f  _UNTESTABLE.  vo
30f40 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
30f50 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
30f60 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
30f70 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
30f80 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
30f90 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
30fa0 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
30fb0 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
30fc0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
30fd0 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  loc().#endif../*
30fe0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  .** Allowed retu
30ff0 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
31000 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
31010 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  x().*/.#define I
31020 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
31030 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72       1   /* Sear
31040 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ch the rowid of 
31050 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  the table */.#de
31060 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
31070 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f  H          2   /
31080 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65  * Search an ephe
31090 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a  meral b-tree */.
310a0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
310b0 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20  _INDEX_ASC    3 
310c0 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
310d0 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f  dex ASCENDING */
310e0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
310f0 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34  X_INDEX_DESC   4
31100 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
31110 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20  ndex DESCENDING 
31120 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
31130 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20  DEX_NOOP        
31140 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65   5   /* No table
31150 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20   available. Use 
31160 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f  comparisons */./
31170 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61  *.** Allowed fla
31180 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70  gs for the 3rd p
31190 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
311a0 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
311b0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ..*/.#define IN_
311c0 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20  INDEX_NOOP_OK   
311d0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20    0x0001  /* OK 
311e0 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44  to return IN_IND
311f0 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69  EX_NOOP */.#defi
31200 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42  ne IN_INDEX_MEMB
31210 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20  ERSHIP  0x0002  
31220 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
31230 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68  sed for membersh
31240 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69  ip test */.#defi
31250 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50  ne IN_INDEX_LOOP
31260 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
31270 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
31280 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f  sed as a loop */
31290 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
312a0 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
312b0 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e   Expr *, u32, in
312c0 74 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  t*, int*, int*);
312d0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ..int sqlite3Jou
312e0 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
312f0 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
31300 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
31310 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
31320 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
31330 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
31340 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65 66 69  vfs *);.#if defi
31350 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
31360 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 20  E_ATOMIC_WRITE) 
31370 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  \. || defined(SQ
31380 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43  LITE_ENABLE_BATC
31390 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a  H_ATOMIC_WRITE).
313a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
313b0 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
313c0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64  e3_file *);.#end
313d0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
313e0 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79  ournalIsInMemory
313f0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
31400 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
31410 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  emJournalOpen(sq
31420 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
31430 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
31440 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67  SetHeightAndFlag
31450 73 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  s(Parse *pParse,
31460 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53   Expr *p);.#if S
31470 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
31480 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c  EPTH>0.  int sql
31490 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
314a0 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a  ight(Select *);.
314b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70    int sqlite3Exp
314c0 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72  rCheckHeight(Par
314d0 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  se*, int);.#else
314e0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
314f0 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
31500 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
31510 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
31520 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
31530 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
31540 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
31550 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
31560 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
31570 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
31580 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
31590 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
315a0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
315b0 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
315c0 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
315d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
315e0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
315f0 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
31600 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
31610 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
31620 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
31630 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
31640 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
31650 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
31660 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
31670 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
31680 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
31690 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
316a0 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
316b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
316c0 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
316d0 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
316e0 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
316f0 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
31700 59 59 43 4f 56 45 52 41 47 45 29 0a 20 20 69 6e  YYCOVERAGE).  in
31710 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 43  t sqlite3ParserC
31720 6f 76 65 72 61 67 65 28 46 49 4c 45 2a 29 3b 0a  overage(FILE*);.
31730 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
31740 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
31750 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
31760 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
31770 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
31780 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
31790 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
317a0 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
317b0 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
317c0 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
317d0 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66  messages..*/.#if
317e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
317f0 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
31800 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
31810 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
31820 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
31830 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
31840 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
31850 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
31860 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f  LITE_API SQLITE_
31870 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c  EXTERN void (SQL
31880 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
31890 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
318a0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c   char*,...);.#el
318b0 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
318c0 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
318d0 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
318e0 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
318f0 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75  ./*.** These rou
31900 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61  tines are availa
31910 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32  ble for the mem2
31920 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d  .c debugging mem
31930 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
31940 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65   only.  They are
31950 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
31960 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22  that different "
31970 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79  types" of memory
31980 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  .** allocations 
31990 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61  are properly tra
319a0 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74  cked by the syst
319b0 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  em..**.** sqlite
319c0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
319d0 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70  () sets the "typ
319e0 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74  e" of an allocat
319f0 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a  ion to one of.**
31a00 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d   the MEMTYPE_* m
31a10 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65  acros defined be
31a20 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d  low.  The type m
31a30 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b  ust be a bitmask
31a40 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c   with.** a singl
31a50 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  e bit set..**.**
31a60 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
31a70 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e  HasType() return
31a80 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66  s true if any of
31a90 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
31aa0 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
31ab0 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
31ac0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
31ad0 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
31ae0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
31af0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
31b00 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20  bugHasType() is 
31b10 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
31b20 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
31b30 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
31b40 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
31b50 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72  ugNoType() retur
31b60 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20  ns true if none 
31b70 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
31b80 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
31b90 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
31ba0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
31bb0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
31bc0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
31bd0 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73  )..**.** Perhaps
31be0 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   the most import
31bf0 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65  ant point is the
31c00 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
31c10 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  een MEMTYPE_HEAP
31c20 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f  .** and MEMTYPE_
31c30 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61  LOOKASIDE.  If a
31c40 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20  n allocation is 
31c50 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
31c60 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a  E, that means.**
31c70 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62   it might have b
31c80 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  een allocated by
31c90 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65   lookaside, exce
31ca0 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  pt the allocatio
31cb0 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72  n was.** too lar
31cc0 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  ge or lookaside 
31cd0 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c  was already full
31ce0 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  .  It is importa
31cf0 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  nt to verify.** 
31d00 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  that allocations
31d10 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
31d20 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20   been satisfied 
31d30 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65  by lookaside are
31d40 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62   not.** passed b
31d50 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61  ack to non-looka
31d60 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
31d70 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73  ines.  Asserts s
31d80 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78  uch as the.** ex
31d90 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20  ample above are 
31da0 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f  placed on the no
31db0 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
31dc0 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76  () routines to v
31dd0 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f  erify.** this co
31de0 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nstraint..**.** 
31df0 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
31e00 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
31e10 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
31e20 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
31e30 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
31e40 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
31e50 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
31e60 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
31e70 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
31e80 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
31e90 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
31ea0 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
31eb0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
31ec0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
31ed0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
31ee0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
31ef0 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
31f00 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
31f10 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
31f20 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
31f30 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
31f40 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
31f50 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
31f60 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
31f70 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
31f80 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
31f90 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
31fa0 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
31fb0 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
31fc0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
31fd0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
31fe0 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
31ff0 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69   /* Heap that mi
32000 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
32010 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69  okaside */.#defi
32020 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48  ne MEMTYPE_PCACH
32030 45 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 50  E     0x04  /* P
32040 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61  age cache alloca
32050 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
32060 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66  Threading interf
32070 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  ace.*/.#if SQLIT
32080 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
32090 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74  EADS>0.int sqlit
320a0 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53  e3ThreadCreate(S
320b0 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f  QLiteThread**,vo
320c0 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f  id*(*)(void*),vo
320d0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
320e0 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69  3ThreadJoin(SQLi
320f0 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a  teThread*, void*
32100 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
32110 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
32120 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56 54 41  NABLE_DBPAGE_VTA
32130 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  B) || defined(SQ
32140 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73  LITE_TEST).int s
32150 71 6c 69 74 65 33 44 62 70 61 67 65 52 65 67 69  qlite3DbpageRegi
32160 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ster(sqlite3*);.
32170 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
32180 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
32190 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c  _DBSTAT_VTAB) ||
321a0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
321b0 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
321c0 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28  3DbstatRegister(
321d0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
321e0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  f..int sqlite3Ex
321f0 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70  prVectorSize(Exp
32200 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
32210 71 6c 69 74 65 33 45 78 70 72 49 73 56 65 63 74  qlite3ExprIsVect
32220 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  or(Expr *pExpr);
32230 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56 65  .Expr *sqlite3Ve
32240 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70 72  ctorFieldSubexpr
32250 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78  (Expr*, int);.Ex
32260 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
32270 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50 61  orVectorField(Pa
32280 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  rse*,Expr*,int);
32290 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65 63  .void sqlite3Vec
322a0 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72 73  torErrorMsg(Pars
322b0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66  e*, Expr*);..#if
322c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
322d0 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
322e0 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61 72 20  IAGS.const char 
322f0 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65  **sqlite3Compile
32300 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f  Options(int *pnO
32310 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e  pt);.#endif..#en
32320 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54  dif /* SQLITEINT
32330 5f 48 20 2a 2f 0a                                _H */.