/ Hex Artifact Content
Login

Artifact aa16ccbbe83b06807da56079398412a995c904e0c0bb5a18eb5c659eb5c96898:


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 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8f30: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8f40: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8f50: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8f60: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8f70: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8f80: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8f90: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8fa0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8fb0: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8fc0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8fd0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
8fe0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
8ff0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73  struct sqlite3_s
9000: 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a 20  tr StrAccum; /* 
9010: 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20 66  Internal alias f
9020: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20 2a  or sqlite3_str *
9030: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9040: 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79   Table Table;.ty
9050: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
9060: 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b  leLock TableLock
9070: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
9080: 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79   Token Token;.ty
9090: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65  pedef struct Tre
90a0: 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a  eView TreeView;.
90b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90c0: 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a  rigger Trigger;.
90d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
90e0: 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65  riggerPrg Trigge
90f0: 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74  rPrg;.typedef st
9100: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
9110: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
9120: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70  pedef struct Unp
9130: 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61  ackedRecord Unpa
9140: 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65  ckedRecord;.type
9150: 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65 72  def struct Upser
9160: 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64 65  t Upsert;.typede
9170: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
9180: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
9190: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
91a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
91b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
91c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
91d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
91e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
91f0: 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77 20  f struct Window 
9200: 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66 20  Window;.typedef 
9210: 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68  struct With With
9220: 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  ;.../*.** The bi
9230: 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
9240: 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
9250: 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
9260: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
9270: 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
9280: 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
9290: 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
92a0: 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
92b0: 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
92c0: 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
92d0: 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
92e0: 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
92f0: 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
9300: 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
9310: 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
9320: 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66   ix86..*/.#ifdef
9330: 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f   SQLITE_BITMASK_
9340: 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53  TYPE.  typedef S
9350: 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
9360: 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73  PE Bitmask;.#els
9370: 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
9380: 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  Bitmask;.#endif.
9390: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
93a0: 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
93b0: 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
93c0: 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
93d0: 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
93e0: 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
93f0: 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
9400: 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20  ./*.** A bit in 
9410: 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65  a Bitmask.*/.#de
9420: 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20  fine MASKBIT(n) 
9430: 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c    (((Bitmask)1)<
9440: 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41  <(n)).#define MA
9450: 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e  SKBIT32(n) (((un
9460: 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28  signed int)1)<<(
9470: 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42  n)).#define ALLB
9480: 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61  ITS      ((Bitma
9490: 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c 69  sk)-1)../* A VLi
94a0: 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72 64  st object record
94b0: 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74 77  s a mapping betw
94c0: 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f 76  een parameters/v
94d0: 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61 72  ariables/wildcar
94e0: 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c  ds.** in the SQL
94f0: 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63 68   statement (such
9500: 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c 20   as $abc, @pqr, 
9510: 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68 65  or :xyz) and the
9520: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72 69   integer.** vari
9530: 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73 6f  able number asso
9540: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
9550: 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65 65   parameter.  See
9560: 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73 63   the format desc
9570: 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68  ription.** on th
9580: 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64  e sqlite3VListAd
9590: 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  d() routine for 
95a0: 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  more information
95b0: 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72 65  .  A VList is re
95c0: 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20  ally.** just an 
95d0: 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72  array of integer
95e0: 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e  s..*/.typedef in
95f0: 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20  t VList;../*.** 
9600: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
9610: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
9620: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
9630: 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42  e "u8" and.** "B
9640: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
9650: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
9660: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
9670: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
9680: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
9690: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
96a0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
96b0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
96c0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
96d0: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
96e0: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
96f0: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e  e "pcache.h".#in
9700: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
9710: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
9720: 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45  ./* The SQLITE_E
9730: 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d  XTRA_DURABLE com
9740: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
9750: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
9760: 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63   default.** sync
9770: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
9780: 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73  to EXTRA.  It is
9790: 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
97a0: 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rted..*/.#ifdef 
97b0: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
97c0: 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55  ABLE.# warning U
97d0: 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  se SQLITE_DEFAUL
97e0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20  T_SYNCHRONOUS=3 
97f0: 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54  instead of SQLIT
9800: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
9810: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
9820: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9830: 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OUS 3.#endif../*
9840: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63  .** Default sync
9850: 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a  hronous levels..
9860: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
9870: 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72  (for historcal r
9880: 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45  easons) the PAGE
9890: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20  R_SYNCHRONOUS_* 
98a0: 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a  macros differ.**
98b0: 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
98c0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
98d0: 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e  NOUS value by 1.
98e0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
98f0: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
9900: 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54  US       DEFAULT
9910: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20  _SYNCHRONOUS.** 
9920: 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20    OFF           
9930: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
9940: 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20            0.**  
9950: 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32   NORMAL        2
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9970: 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20           1.**   
9980: 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20  FULL          3 
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45          2.**   E
99b0: 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20  XTRA         4  
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54         3.**.** T
99e0: 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  he "PRAGMA synch
99f0: 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e  ronous" statemen
9a00: 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20  t also uses the 
9a10: 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65  zero-based numbe
9a20: 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  rs..** In other 
9a30: 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d  words, the zero-
9a40: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72  based numbers ar
9a50: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65  e used for all e
9a60: 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63  xternal interfac
9a70: 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e  es.** and the on
9a80: 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61  e-based values a
9a90: 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  re used internal
9aa0: 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ly..*/.#ifndef S
9ab0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9ac0: 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69  NCHRONOUS.# defi
9ad0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9ae0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a  T_SYNCHRONOUS 2.
9af0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
9b00: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
9b10: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  L_SYNCHRONOUS.# 
9b20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
9b30: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
9b40: 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46  ONOUS SQLITE_DEF
9b50: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9b60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
9b70: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
9b80: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
9b90: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
9ba0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
9bb0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9bc0: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
9bd0: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
9be0: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
9bf0: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
9c00: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
9c10: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
9c20: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
9c30: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
9c40: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
9c50: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
9c60: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
9c70: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
9c80: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
9c90: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
9ca0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
9cb0: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53  b {.  char *zDbS
9cc0: 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
9cd0: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
9ce0: 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d  ase. (schema nam
9cf0: 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29  e, not filename)
9d00: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
9d10: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
9d20: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
9d30: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
9d40: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
9d50: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
9d60: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
9d70: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
9d80: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
9d90: 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20  .  u8 bSyncSet; 
9da0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
9db0: 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  if "PRAGMA synch
9dc0: 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65  ronous=N" has be
9dd0: 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65  en run */.  Sche
9de0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
9df0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
9e00: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
9e10: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
9e20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
9e30: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
9e40: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9e50: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
9e60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
9e70: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
9e80: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
9e90: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
9ea0: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
9eb0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
9ec0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
9ed0: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
9ee0: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
9ef0: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
9f00: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
9f10: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
9f20: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
9f30: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
9f40: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
9f50: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
9f60: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
9f70: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
9f80: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  red object..**.*
9f90: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
9fa0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
9fb0: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
9fc0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
9fd0: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
9fe0: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
9ff0: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
a000: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
a010: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
a020: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
a030: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
a040: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
a050: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a060: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
a070: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
a080: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
a090: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
a0a0: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
a0b0: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
a0c0: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
a0d0: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
a0e0: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
a0f0: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
a100: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
a110: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
a120: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
a130: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
a140: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
a150: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
a160: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
a170: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
a180: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
a190: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
a1a0: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
a1b0: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
a1c0: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
a1d0: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
a1e0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
a1f0: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
a200: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
a210: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
a220: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
a230: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
a240: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
a250: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
a260: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a270: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
a280: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
a290: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
a2a0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
a2b0: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
a2c0: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
a2d0: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
a2e0: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
a2f0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
a300: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
a310: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
a320: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
a330: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
a340: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
a350: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
a360: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
a370: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
a380: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
a390: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
a3a0: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
a3b0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
a3c0: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
a3d0: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
a3e0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
a3f0: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
a400: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
a410: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
a420: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
a430: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
a440: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
a450: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
a460: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
a470: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
a480: 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53   in the.** Db.pS
a490: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a4a0: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ld..*/.#define D
a4b0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49  bHasProperty(D,I
a4c0: 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61  ,P)     (((D)->a
a4d0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a4e0: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d  chemaFlags&(P))=
a4f0: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
a500: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
a510: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
a520: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
a530: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d  hemaFlags&(P))!=
a540: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
a550: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a560: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
a570: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a580: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
a590: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
a5a0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
a5b0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a5c0: 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50  schemaFlags&=~(P
a5d0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
a5e0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
a5f0: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
a600: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
a610: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
a620: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
a630: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
a640: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a650: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
a660: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
a670: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
a680: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
a690: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
a6a0: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
a6b0: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
a6c0: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
a6d0: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
a6e0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
a6f0: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
a700: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
a710: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
a720: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
a730: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
a740: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
a750: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
a760: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
a770: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
a780: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
a790: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
a7a0: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
a7b0: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
a7c0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
a7d0: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
a7e0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
a7f0: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
a800: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
a810: 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65 66  0 bytes) */.#def
a820: 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e 74  ine DB_ResetWant
a830: 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20 2f  ed     0x0008  /
a840: 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68 65  * Reset the sche
a850: 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61 4c  ma when nSchemaL
a860: 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ock==0 */../*.**
a870: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
a880: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
a890: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
a8a0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
a8b0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
a8c0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
a8d0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
a8e0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
a8f0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
a900: 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a  KER_THREADS+1)..
a910: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
a920: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
a930: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
a940: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
a950: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
a960: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
a970: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
a980: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
a990: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
a9a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a9b0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
a9c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
a9d0: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
a9e0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a9f0: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
aa00: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
aa10: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
aa20: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
aa30: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
aa40: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
aa50: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
aa60: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
aa70: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
aa80: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
aa90: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
aaa0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
aab0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
aac0: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
aad0: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
aae0: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
aaf0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
ab00: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
ab10: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
ab20: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
ab30: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
ab40: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
ab50: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
ab60: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
ab70: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
ab80: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
ab90: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
aba0: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
abb0: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
abc0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
abd0: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
abe0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
abf0: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
ac00: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
ac10: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
ac20: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
ac30: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
ac40: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
ac50: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
ac60: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
ac70: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
ac80: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
ac90: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
aca0: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
acb0: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
acc0: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
acd0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
ace0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
acf0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
ad00: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
ad10: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 65 77  jects..**.** New
ad20: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
ad30: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
ad40: 61 6c 6c 6f 77 65 64 20 69 66 20 62 44 69 73 61  allowed if bDisa
ad50: 62 6c 65 3d 3d 30 2e 20 20 57 68 65 6e 0a 2a 2a  ble==0.  When.**
ad60: 20 62 44 69 73 61 62 6c 65 20 69 73 20 67 72 65   bDisable is gre
ad70: 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
ad80: 73 7a 20 69 73 20 73 65 74 20 74 6f 20 7a 65 72  sz is set to zer
ad90: 6f 20 77 68 69 63 68 20 65 66 66 65 63 74 69 76  o which effectiv
ada0: 65 6c 79 0a 2a 2a 20 64 69 73 61 62 6c 65 73 20  ely.** disables 
adb0: 6c 6f 6f 6b 61 73 69 64 65 20 77 69 74 68 6f 75  lookaside withou
adc0: 74 20 61 64 64 69 6e 67 20 61 20 6e 65 77 20 74  t adding a new t
add0: 65 73 74 20 66 6f 72 20 74 68 65 20 62 44 69 73  est for the bDis
ade0: 61 62 6c 65 20 66 6c 61 67 0a 2a 2a 20 69 6e 20  able flag.** in 
adf0: 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 2d 63 72  a performance-cr
ae00: 69 74 69 63 61 6c 20 70 61 74 68 2e 20 20 73 7a  itical path.  sz
ae10: 20 73 68 6f 75 6c 64 20 62 65 20 73 65 74 20 62   should be set b
ae20: 79 20 74 6f 20 73 7a 54 72 75 65 20 77 68 65 6e  y to szTrue when
ae30: 65 76 65 72 0a 2a 2a 20 62 44 69 73 61 62 6c 65  ever.** bDisable
ae40: 20 63 68 61 6e 67 65 73 20 62 61 63 6b 20 74 6f   changes back to
ae50: 20 7a 65 72 6f 2e 0a 2a 2f 0a 73 74 72 75 63 74   zero..*/.struct
ae60: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
ae70: 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20  32 bDisable;    
ae80: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f         /* Only o
ae90: 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61  perate the looka
aea0: 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a  side when zero *
aeb0: 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  /.  u16 sz;     
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
aed0: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
aee0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
aef0: 20 75 31 36 20 73 7a 54 72 75 65 3b 20 20 20 20   u16 szTrue;    
af00: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
af10: 20 76 61 6c 75 65 20 6f 66 20 73 7a 2c 20 65 76   value of sz, ev
af20: 65 6e 20 69 66 20 64 69 73 61 62 6c 65 64 20 2a  en if disabled *
af30: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
af40: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
af50: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
af60: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
af70: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
af80: 20 20 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20    u32 nSlot;    
af90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
afa0: 62 65 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65  ber of lookaside
afb0: 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
afc0: 20 2a 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74   */.  u32 anStat
afd0: 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  [3];          /*
afe0: 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69   0: hits.  1: si
aff0: 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66  ze misses.  2: f
b000: 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20  ull misses */.  
b010: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70  LookasideSlot *p
b020: 49 6e 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20  Init;   /* List 
b030: 6f 66 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70  of buffers not p
b040: 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a  reviously used *
b050: 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  /.  LookasideSlo
b060: 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c  t *pFree;   /* L
b070: 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ist of available
b080: 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
b090: 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20  id *pStart;     
b0a0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
b0b0: 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  yte of available
b0c0: 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f   memory space */
b0d0: 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20  .  void *pEnd;  
b0e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
b0f0: 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e  rst byte past en
b100: 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  d of available s
b110: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63  pace */.};.struc
b120: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
b130: 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  {.  LookasideSlo
b140: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  t *pNext;    /* 
b150: 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74  Next buffer in t
b160: 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20  he list of free 
b170: 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 23  buffers */.};..#
b180: 64 65 66 69 6e 65 20 44 69 73 61 62 6c 65 4c 6f  define DisableLo
b190: 6f 6b 61 73 69 64 65 20 20 64 62 2d 3e 6c 6f 6f  okaside  db->loo
b1a0: 6b 61 73 69 64 65 2e 62 44 69 73 61 62 6c 65 2b  kaside.bDisable+
b1b0: 2b 3b 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e  +;db->lookaside.
b1c0: 73 7a 3d 30 0a 23 64 65 66 69 6e 65 20 45 6e 61  sz=0.#define Ena
b1d0: 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 20 20 20 64  bleLookaside   d
b1e0: 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62 44 69  b->lookaside.bDi
b1f0: 73 61 62 6c 65 2d 2d 3b 5c 0a 20 20 20 64 62 2d  sable--;\.   db-
b200: 3e 6c 6f 6f 6b 61 73 69 64 65 2e 73 7a 3d 64 62  >lookaside.sz=db
b210: 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62 44 69 73  ->lookaside.bDis
b220: 61 62 6c 65 3f 30 3a 64 62 2d 3e 6c 6f 6f 6b 61  able?0:db->looka
b230: 73 69 64 65 2e 73 7a 54 72 75 65 0a 0a 2f 2a 0a  side.szTrue../*.
b240: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b250: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b260: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b270: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b280: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b290: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b2a0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b2b0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b2c0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b2d0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b2e0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b2f0: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b300: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b310: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b320: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b330: 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20  chain.  Use the 
b340: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b350: 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63  ().** macro to c
b360: 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e  ompute a hash on
b370: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61   the function na
b380: 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  me..*/.#define S
b390: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b3a0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
b3b0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
b3c0: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
b3d0: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
b3e0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
b3f0: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
b400: 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
b410: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43  LITE_FUNC_HASH(C
b420: 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53  ,L) (((C)+(L))%S
b430: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b440: 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  SZ)..#ifdef SQLI
b450: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b460: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
b470: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
b480: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
b490: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b4a0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
b4b0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
b4c0: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
b4d0: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
b4e0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
b4f0: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
b500: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
b510: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
b520: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
b530: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
b540: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
b550: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
b560: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
b570: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b580: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
b590: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
b5a0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
b5b0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
b5c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
b5d0: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
b5e0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
b5f0: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
b600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b610: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
b620: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b630: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b640: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
b650: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
b660: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
b670: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
b680: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
b690: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
b6a0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
b6b0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
b6c0: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
b6d0: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
b6e0: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
b6f0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
b700: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
b710: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b720: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
b730: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
b740: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
b750: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
b760: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
b770: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
b780: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
b790: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
b7a0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
b7b0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
b7c0: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
b7d0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
b7e0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
b7f0: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
b800: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
b810: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
b820: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
b830: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
b840: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
b850: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
b860: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
b870: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
b880: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b890: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
b8a0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
b8b0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
b8c0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
b8d0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
b8e0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b8f0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
b900: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
b910: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
b920: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
b930: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b940: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b960: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
b970: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
b980: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
b990: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b9a0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b9b0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b9c0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b9d0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
ba00: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
ba10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ba20: 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54  _DEPRECATED./* T
ba30: 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20  his is an extra 
ba40: 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63  SQLITE_TRACE mac
ba50: 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ro that indicate
ba60: 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69  s "legacy" traci
ba70: 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79  ng.** in the sty
ba80: 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72  le of sqlite3_tr
ba90: 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  ace().*/.#define
baa0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
bab0: 47 41 43 59 20 20 20 20 20 20 20 20 20 20 30 78  GACY          0x
bac0: 34 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68  40     /* Use th
bad0: 65 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20  e legacy xTrace 
bae0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
baf0: 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45  E_TRACE_XPROFILE
bb00: 20 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20          0x80    
bb10: 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61   /* Use the lega
bb20: 63 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23  cy xProfile */.#
bb30: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c  else.#define SQL
bb40: 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
bb50: 20 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66            0.#def
bb60: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
bb70: 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20  _XPROFILE       
bb80: 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   0.#endif /* SQL
bb90: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
bba0: 54 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TED */.#define S
bbb0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c  QLITE_TRACE_NONL
bbc0: 45 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66  EGACY_MASK  0x0f
bbd0: 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66       /* Normal f
bbe0: 6c 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  lags */.../*.** 
bbf0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  Each database co
bc00: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69  nnection is an i
bc10: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
bc20: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
bc30: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  re..*/.struct sq
bc40: 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65  lite3 {.  sqlite
bc50: 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20  3_vfs *pVfs;    
bc60: 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e          /* OS In
bc70: 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72  terface */.  str
bc80: 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b  uct Vdbe *pVdbe;
bc90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
bca0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72  st of active vir
bcb0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f  tual machines */
bcc0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c  .  CollSeq *pDfl
bcd0: 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  tColl;          
bce0: 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20   /* The default 
bcf0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
bd00: 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20  ce (BINARY) */. 
bd10: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
bd20: 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f  mutex;         /
bd30: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  * Connection mut
bd40: 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b  ex */.  Db *aDb;
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd60: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63        /* All bac
bd70: 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  kends */.  int n
bd80: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
bd90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bda0: 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63  er of backends c
bdb0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
bdc0: 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67  */.  u32 mDbFlag
bdd0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
bde0: 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f     /* flags reco
bdf0: 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73  rding internal s
be00: 74 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c  tate */.  u64 fl
be10: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
be20: 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73          /* flags
be30: 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61   settable by pra
be40: 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  gmas. See below 
be50: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
be60: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
be70: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
be80: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
be90: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
bea0: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bec0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
bed0: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
bee0: 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f  .  u32 nSchemaLo
bef0: 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
bf00: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74   /* Do not reset
bf10: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
bf20: 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75   non-zero */.  u
bf30: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
bf40: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
bf50: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
bf60: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
bf70: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
bf80: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
bf90: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
bfa0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
bfb0: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
bfc0: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bfe0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
bff0: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
c000: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
c010: 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20   int iSysErrno; 
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c030: 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72  * Errno value fr
c040: 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65  om last system e
c050: 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62  rror */.  u16 db
c060: 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20  OptFlags;       
c070: 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73          /* Flags
c080: 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62   to enable/disab
c090: 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  le optimizations
c0a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
c0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0c0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
c0d0: 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74  ding */.  u8 aut
c0e0: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
c0f0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
c100: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
c110: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
c120: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
c130: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
c140: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
c150: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
c160: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
c170: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
c180: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
c190: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
c1a0: 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d  */.  u8 bBenignM
c1b0: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
c1c0: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71     /* Do not req
c1d0: 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75  uire OOMs if tru
c1e0: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
c1f0: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
c200: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
c210: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
c220: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
c230: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
c240: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
c250: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
c260: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
c270: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
c280: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
c290: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
c2a0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
c2b0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
c2c0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
c2d0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
c2e0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
c2f0: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
c300: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
c310: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
c320: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
c330: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
c340: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
c350: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
c360: 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20  */.  u8 mTrace; 
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c380: 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f     /* zero or mo
c390: 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20  re SQLITE_TRACE 
c3a0: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f  flags */.  u8 no
c3b0: 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20  SharedCache;    
c3c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
c3d0: 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61   if no shared-ca
c3e0: 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  che backends */.
c3f0: 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20    u8 nSqlExec;  
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c410: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e  /* Number of pen
c420: 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20  ding OP_SqlExec 
c430: 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74  opcodes */.  int
c440: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
c450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
c460: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
c470: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75  UUM if >0 */.  u
c480: 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20  32 magic;       
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c4a0: 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72  Magic number for
c4b0: 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20   detect library 
c4c0: 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  misuse */.  int 
c4d0: 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  nChange;        
c4e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
c4f0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
c500: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
c510: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c   */.  int nTotal
c520: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c530: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
c540: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
c550: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
c560: 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74   */.  int aLimit
c570: 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d  [SQLITE_N_LIMIT]
c580: 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f  ;   /* Limits */
c590: 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65  .  int nMaxSorte
c5a0: 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  rMmap;          
c5b0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65   /* Maximum size
c5c0: 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70   of regions mapp
c5d0: 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a  ed by sorter */.
c5e0: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
c5f0: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
c600: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
c610: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
c620: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
c630: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c650: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
c660: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
c670: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44  zed */.    u8 iD
c680: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c690: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
c6a0: 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67  db file is being
c6b0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
c6c0: 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20      u8 busy;    
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6e0: 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65  /* TRUE if curre
c6f0: 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e  ntly initializin
c700: 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  g */.    unsigne
c710: 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20  d orphanTrigger 
c720: 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61  : 1; /* Last sta
c730: 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e  tement is orphan
c740: 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20  ed TEMP trigger 
c750: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c760: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20  imposterTable : 
c770: 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61  1; /* Building a
c780: 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65  n imposter table
c790: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c7a0: 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31   reopenMemdb : 1
c7b0: 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73  ;   /* ATTACH is
c7c0: 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e   really a reopen
c7d0: 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a   using MemDB */.
c7e0: 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 49 6e 69      char **azIni
c7f0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
c800: 2f 2a 20 22 74 79 70 65 22 2c 20 22 6e 61 6d 65  /* "type", "name
c810: 22 2c 20 61 6e 64 20 22 74 62 6c 5f 6e 61 6d 65  ", and "tbl_name
c820: 22 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 7d  " columns */.  }
c830: 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64   init;.  int nVd
c840: 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20  beActive;       
c850: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c860: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
c870: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20  tly running */. 
c880: 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20   int nVdbeRead; 
c890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c8b0: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
c8c0: 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20  ad or write */. 
c8d0: 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b   int nVdbeWrite;
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c8f0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
c900: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
c910: 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a  ad and write */.
c920: 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b    int nVdbeExec;
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c940: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
c950: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62  ted calls to Vdb
c960: 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74  eExec() */.  int
c970: 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20   nVDestroy;     
c980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c990: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f  mber of active O
c9a0: 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61  P_VDestroy opera
c9b0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  tions */.  int n
c9c0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
c9d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c9e0: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
c9f0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
ca00: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
ca10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
ca20: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
ca30: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
ca40: 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29  .  int (*xTrace)
ca50: 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a  (u32,void*,void*
ca60: 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20  ,void*);     /* 
ca70: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
ca80: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
ca90: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cab0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
cac0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
cad0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cae0: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
caf0: 44 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  D.  void (*xProf
cb00: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
cb10: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
cb20: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
cb30: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
cb40: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb60: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
cb70: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
cb80: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 76  on */.#endif.  v
cb90: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbb0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
cbc0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
cbd0: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f  ) */.  int (*xCo
cbe0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
cbf0: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
cc00: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
cc10: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
cc20: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cc40: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
cc50: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
cc60: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c  /.  void (*xRoll
cc70: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
cc80: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
cc90: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
cca0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
ccb0: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
ccc0: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
ccd0: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
cce0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
ccf0: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
cd00: 36 34 29 3b 0a 20 20 50 61 72 73 65 20 2a 70 50  64);.  Parse *pP
cd10: 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
cd20: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
cd30: 70 61 72 73 65 20 2a 2f 0a 23 69 66 64 65 66 20  parse */.#ifdef 
cd40: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
cd50: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
cd60: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
cd70: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
cd80: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
cd90: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
cda0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
cdb0: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
cdc0: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
cdd0: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
cde0: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
cdf0: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
ce00: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
ce10: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
ce20: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
ce30: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
ce40: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
ce50: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
ce60: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
ce70: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
ce80: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
ce90: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
cea0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
ceb0: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
cec0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
ced0: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
cee0: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
cef0: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
cf00: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
cf10: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
cf20: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
cf30: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
cf40: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
cf50: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
cf60: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
cf70: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
cf80: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
cf90: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
cfa0: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
cfb0: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
cfc0: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
cfd0: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
cfe0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
cff0: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
d000: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
d010: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
d020: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
d030: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
d040: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
d050: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
d060: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
d070: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
d080: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
d090: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
d0a0: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
d0b0: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
d0c0: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
d0d0: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
d0e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
d0f0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
d100: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
d110: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
d120: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
d130: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
d140: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
d150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d160: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
d170: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
d180: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
d190: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
d1a0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
d1b0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
d1c0: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
d1d0: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
d1e0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
d1f0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
d200: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
d210: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
d220: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
d230: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
d240: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
d250: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
d260: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
d270: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
d280: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
d290: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d2a0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d2b0: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
d2c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
d2d0: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
d2e0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
d2f0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
d300: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
d310: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
d320: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
d330: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
d340: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
d350: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
d360: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
d370: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
d380: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
d390: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
d3b0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
d3c0: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
d3d0: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
d3e0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
d3f0: 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 63 6f          /* Disco
d400: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
d410: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
d420: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
d430: 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20    Hash aFunc;   
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
d460: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
d470: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
d480: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
d490: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
d4a0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d4b0: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
d4c0: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
d4d0: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
d4e0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
d4f0: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
d500: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
d510: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
d520: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
d530: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
d540: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
d550: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
d560: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
d570: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
d580: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
d590: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
d5a0: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
d5b0: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
d5c0: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d5e0: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
d5f0: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
d600: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
d610: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
d620: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d630: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
d640: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
d650: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
d660: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
d670: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
d680: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
d690: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
d6a0: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
d6b0: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
d6c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
d6d0: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
d6e0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
d6f0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
d700: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
d710: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
d720: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
d730: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
d740: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
d750: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
d760: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
d770: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
d780: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
d790: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
d7a0: 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78  ASTER.  ** mutex
d7b0: 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33  , not by sqlite3
d7c0: 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65  .mutex. They are
d7d0: 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e   used by code in
d7e0: 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a   notify.c..  **.
d7f0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c    ** When X.pUnl
d800: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ockConnection==Y
d810: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
d820: 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66  t X is waiting f
d830: 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c  or Y to.  ** unl
d840: 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63  ock so that it c
d850: 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a  an proceed..  **
d860: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c  .  ** When X.pBl
d870: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
d880: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d890: 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74  that something t
d8a0: 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a  hat X tried.  **
d8b0: 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63   tried to do rec
d8c0: 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74  ently failed wit
d8d0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  h an SQLITE_LOCK
d8e0: 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20  ED error due to 
d8f0: 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20  locks.  ** held 
d900: 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  by Y..  */.  sql
d910: 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43  ite3 *pBlockingC
d920: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f  onnection; /* Co
d930: 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61  nnection that ca
d940: 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  used SQLITE_LOCK
d950: 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ED */.  sqlite3 
d960: 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  *pUnlockConnecti
d970: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  on;           /*
d980: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77   Connection to w
d990: 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20  atch for unlock 
d9a0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f  */.  void *pUnlo
d9b0: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
d9c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
d9d0: 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63  gument to xUnloc
d9e0: 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69  kNotify */.  voi
d9f0: 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66  d (*xUnlockNotif
da00: 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29  y)(void **, int)
da10: 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74  ;  /* Unlock not
da20: 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ify callback */.
da30: 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74    sqlite3 *pNext
da40: 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20  Blocked;        
da50: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20  /* Next in list 
da60: 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63  of all blocked c
da70: 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65  onnections */.#e
da80: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
da90: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
daa0: 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33  CATION.  sqlite3
dab0: 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20  _userauth auth; 
dac0: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61         /* User a
dad0: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e  uthentication in
dae0: 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e  formation */.#en
daf0: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
db00: 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65  macro to discove
db10: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
db20: 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  f a database..*/
db30: 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f  .#define SCHEMA_
db40: 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61  ENC(db) ((db)->a
db50: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65  Db[0].pSchema->e
db60: 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  nc).#define ENC(
db70: 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29  db)        ((db)
db80: 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ->enc)../*.** Po
db90: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
dba0: 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c  r the sqlite3.fl
dbb0: 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ags..**.** Value
dbc0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
dbd0: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
dbe0: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51  t()):.**      SQ
dbf0: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
dc00: 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c     == PAGER_FULL
dc10: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
dc20: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
dc30: 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54  nc == PAGER_CKPT
dc40: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
dc50: 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53     SQLITE_CacheS
dc60: 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52  pill    == PAGER
dc70: 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a  _CACHE_SPILL.*/.
dc80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
dc90: 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78  riteSchema    0x
dca0: 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b 20  00000001  /* OK 
dcb0: 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45  to update SQLITE
dcc0: 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69  _MASTER */.#defi
dcd0: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
dce0: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 30  FileFmt  0x00000
dcf0: 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  002  /* Create n
dd00: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
dd10: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
dd20: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43  ine SQLITE_FullC
dd30: 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30  olNames   0x0000
dd40: 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75  0004  /* Show fu
dd50: 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ll column names 
dd60: 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65  on SELECT */.#de
dd70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
dd80: 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30  FSync      0x000
dd90: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
dda0: 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20  ll fsync on the 
ddb0: 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69  backend */.#defi
ddc0: 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  ne SQLITE_CkptFu
ddd0: 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30  llFSync  0x00000
dde0: 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c  010  /* Use full
ddf0: 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b   fsync for check
de00: 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  point */.#define
de10: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
de20: 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32  ll     0x0000002
de30: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c  0  /* OK to spil
de40: 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f  l pager cache */
de50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de60: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
de70: 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68  x00000040  /* Sh
de80: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
de90: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
dea0: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
deb0: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
dec0: 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  80  /* Count row
ded0: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
dee0: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
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 20 20 20 20 20 20                  
df10: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
df20: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
df30: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df60: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
df70: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
df80: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
df90: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
dfa0: 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f     0x00000100  /
dfb0: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
dfc0: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
dfd0: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e000: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
e010: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
e020: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
e030: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 30  Checks   0x00000
e040: 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  200  /* Do not e
e050: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
e060: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
e070: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
e080: 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30 30  ncommit   0x0000
e090: 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55 4e  0400  /* READ UN
e0a0: 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68 61  COMMITTED in sha
e0b0: 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64 65  red-cache */.#de
e0c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43 6b  fine SQLITE_NoCk
e0d0: 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30 30  ptOnClose  0x000
e0e0: 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68 65  00800  /* No che
e0f0: 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73 65  ckpoint on close
e100: 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64 65  ()/DETACH */.#de
e110: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
e120: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
e130: 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  01000  /* Revers
e140: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
e150: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
e160: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
e170: 73 20 20 20 20 30 78 30 30 30 30 32 30 30 30 20  s    0x00002000 
e180: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
e190: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
e1a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e1b0: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
e1c0: 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45 6e  x00004000  /* En
e1d0: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
e1e0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
e1f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e200: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
e210: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 45  0x00008000  /* E
e220: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
e230: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
e240: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
e250: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31 30  tension  0x00010
e260: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
e270: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
e280: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e290: 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30  LoadExtFunc    0
e2a0: 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e  x00020000  /* En
e2b0: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
e2c0: 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a  ion() SQL func *
e2d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e2e0: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
e2f0: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 54  0x00040000  /* T
e300: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
e310: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
e320: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  e SQLITE_DeferFK
e330: 73 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30  s       0x000800
e340: 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c  00  /* Defer all
e350: 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
e360: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e370: 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20  E_QueryOnly     
e380: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
e390: 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65  Disable database
e3a0: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
e3b0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53  ine SQLITE_CellS
e3c0: 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32 30  izeCk     0x0020
e3d0: 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62  0000  /* Check b
e3e0: 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20  tree cell sizes 
e3f0: 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69  on load */.#defi
e400: 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f  ne SQLITE_Fts3To
e410: 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30 30  kenizer  0x00400
e420: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66  000  /* Enable f
e430: 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29  ts3_tokenizer(2)
e440: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e450: 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20 20  TE_EnableQPSG   
e460: 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a    0x00800000  /*
e470: 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20 53   Query Planner S
e480: 74 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e 74  tability Guarant
e490: 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ee*/.#define SQL
e4a0: 49 54 45 5f 54 72 69 67 67 65 72 45 51 50 20 20  ITE_TriggerEQP  
e4b0: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
e4c0: 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72 20 45  * Show trigger E
e4d0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
e4e0: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
e4f0: 49 54 45 5f 52 65 73 65 74 44 61 74 61 62 61 73  ITE_ResetDatabas
e500: 65 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f  e  0x02000000  /
e510: 2a 20 52 65 73 65 74 20 74 68 65 20 64 61 74 61  * Reset the data
e520: 62 61 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  base */.#define 
e530: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 41 6c 74  SQLITE_LegacyAlt
e540: 65 72 20 20 20 20 30 78 30 34 30 30 30 30 30 30  er    0x04000000
e550: 20 20 2f 2a 20 4c 65 67 61 63 79 20 41 4c 54 45    /* Legacy ALTE
e560: 52 20 54 41 42 4c 45 20 62 65 68 61 76 69 6f 75  R TABLE behaviou
e570: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
e580: 49 54 45 5f 4e 6f 53 63 68 65 6d 61 45 72 72 6f  ITE_NoSchemaErro
e590: 72 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f  r  0x08000000  /
e5a0: 2a 20 44 6f 20 6e 6f 74 20 72 65 70 6f 72 74 20  * Do not report 
e5b0: 73 63 68 65 6d 61 20 70 61 72 73 65 20 65 72 72  schema parse err
e5c0: 6f 72 73 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ors*/.#define SQ
e5d0: 4c 49 54 45 5f 44 65 66 65 6e 73 69 76 65 20 20  LITE_Defensive  
e5e0: 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20      0x10000000  
e5f0: 2f 2a 20 49 6e 70 75 74 20 53 51 4c 20 69 73 20  /* Input SQL is 
e600: 6c 69 6b 65 6c 79 20 68 6f 73 74 69 6c 65 20 2a  likely hostile *
e610: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e620: 5f 44 71 73 44 44 4c 20 20 20 20 20 20 20 20 20  _DqsDDL         
e630: 30 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 64  0x20000000  /* d
e640: 62 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e 67  bl-quoted string
e650: 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 44 4c  s allowed in DDL
e660: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e670: 45 5f 44 71 73 44 4d 4c 20 20 20 20 20 20 20 20  E_DqsDML        
e680: 20 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20   0x40000000  /* 
e690: 64 62 6c 2d 71 75 6f 74 65 64 20 73 74 72 69 6e  dbl-quoted strin
e6a0: 67 73 20 61 6c 6c 6f 77 65 64 20 69 6e 20 44 4d  gs allowed in DM
e6b0: 4c 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  L*/.#define SQLI
e6c0: 54 45 5f 45 6e 61 62 6c 65 56 69 65 77 20 20 20  TE_EnableView   
e6d0: 20 20 30 78 38 30 30 30 30 30 30 30 20 20 2f 2a    0x80000000  /*
e6e0: 20 45 6e 61 62 6c 65 20 74 68 65 20 75 73 65 20   Enable the use 
e6f0: 6f 66 20 76 69 65 77 73 20 2a 2f 0a 0a 2f 2a 20  of views */../* 
e700: 46 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20  Flags used only 
e710: 69 66 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a  if debugging */.
e720: 23 64 65 66 69 6e 65 20 48 49 28 58 29 20 20 28  #define HI(X)  (
e730: 28 75 36 34 29 28 58 29 3c 3c 33 32 29 0a 23 69  (u64)(X)<<32).#i
e740: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
e750: 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  G.#define SQLITE
e760: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
e770: 48 49 28 30 78 30 31 30 30 30 30 30 29 20 2f 2a  HI(0x0100000) /*
e780: 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c   Debug print SQL
e790: 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20   as it executes 
e7a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e7b0: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20  E_VdbeListing   
e7c0: 20 48 49 28 30 78 30 32 30 30 30 30 30 29 20 2f   HI(0x0200000) /
e7d0: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
e7e0: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 73 20 2a   of VDBE progs *
e7f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e800: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
e810: 48 49 28 30 78 30 34 30 30 30 30 30 29 20 2f 2a  HI(0x0400000) /*
e820: 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56   True to trace V
e830: 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  DBE execution */
e840: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e850: 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 48  VdbeAddopTrace H
e860: 49 28 30 78 30 38 30 30 30 30 30 29 20 2f 2a 20  I(0x0800000) /* 
e870: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
e880: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
e890: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e8a0: 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20  _VdbeEQP        
e8b0: 48 49 28 30 78 31 30 30 30 30 30 30 29 20 2f 2a  HI(0x1000000) /*
e8c0: 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51   Debug EXPLAIN Q
e8d0: 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65  UERY PLAN */.#de
e8e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 61 72 73  fine SQLITE_Pars
e8f0: 65 72 54 72 61 63 65 20 20 20 20 48 49 28 30 78  erTrace    HI(0x
e900: 32 30 30 30 30 30 30 29 20 2f 2a 20 50 52 41 47  2000000) /* PRAG
e910: 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d  MA parser_trace=
e920: 4f 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ON */.#endif../*
e930: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
e940: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d  es for sqlite3.m
e950: 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  DbFlags.*/.#defi
e960: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e970: 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20  Change   0x0001 
e980: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
e990: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
e9a0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
e9b0: 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74  FLAG_PreferBuilt
e9c0: 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50  in  0x0002  /* P
e9d0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
e9e0: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
e9f0: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61  define DBFLAG_Va
ea00: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
ea10: 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  004  /* Currentl
ea20: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
ea30: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
ea40: 56 61 63 75 75 6d 49 6e 74 6f 20 20 20 20 20 30  VacuumInto     0
ea50: 78 30 30 30 38 20 20 2f 2a 20 43 75 72 72 65 6e  x0008  /* Curren
ea60: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 56 41 43 55  tly running VACU
ea70: 55 4d 20 49 4e 54 4f 20 2a 2f 0a 23 64 65 66 69  UM INTO */.#defi
ea80: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
ea90: 4b 6e 6f 77 6e 4f 6b 20 20 30 78 30 30 31 30 20  KnownOk  0x0010 
eaa0: 20 2f 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e   /* Schema is kn
eab0: 6f 77 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20  own to be valid 
eac0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  */../*.** Bits o
ead0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
eae0: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
eaf0: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
eb00: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
eb10: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
eb20: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
eb30: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
eb40: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
eb50: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
eb60: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
eb70: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
eb80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
eb90: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
eba0: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
ebb0: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
ebc0: 6e 65 20 53 51 4c 49 54 45 5f 57 69 6e 64 6f 77  ne SQLITE_Window
ebd0: 46 75 6e 63 20 20 20 20 20 30 78 30 30 30 32 20  Func     0x0002 
ebe0: 20 20 2f 2a 20 55 73 65 20 78 49 6e 76 65 72 73    /* Use xInvers
ebf0: 65 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e  e for window fun
ec00: 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
ec10: 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79  e SQLITE_GroupBy
ec20: 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20  Order   0x0004  
ec30: 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65   /* GROUPBY cove
ec40: 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a  r of ORDERBY */.
ec50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ec60: 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78  actorOutConst 0x
ec70: 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61  0008   /* Consta
ec80: 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a  nt factoring */.
ec90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
eca0: 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78  istinctOpt    0x
ecb0: 30 30 31 30 20 20 20 2f 2a 20 44 49 53 54 49 4e  0010   /* DISTIN
ecc0: 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73  CT using indexes
ecd0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ece0: 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20  TE_CoverIdxScan 
ecf0: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 43 6f    0x0020   /* Co
ed00: 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61  vering index sca
ed10: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
ed20: 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a  LITE_OrderByIdxJ
ed30: 6f 69 6e 20 30 78 30 30 34 30 20 20 20 2f 2a 20  oin 0x0040   /* 
ed40: 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e  ORDER BY of join
ed50: 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23  s via index */.#
ed60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
ed70: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
ed80: 30 38 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  080   /* Transit
ed90: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
eda0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
edb0: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
edc0: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0100   /* Omi
edd0: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
ede0: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
edf0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
ee00: 4f 66 56 69 65 77 20 20 20 20 30 78 30 32 30 30  OfView    0x0200
ee10: 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d     /* The count-
ee20: 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61  of-view optimiza
ee30: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
ee40: 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e  SQLITE_CursorHin
ee50: 74 73 20 20 20 20 30 78 30 34 30 30 20 20 20 2f  ts    0x0400   /
ee60: 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48  * Add OP_CursorH
ee70: 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23  int opcodes */.#
ee80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
ee90: 61 74 34 20 20 20 20 20 20 20 20 20 20 30 78 30  at4          0x0
eea0: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
eeb0: 54 34 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a  T4 data */.   /*
eec0: 20 54 48 33 20 65 78 70 65 63 74 73 20 74 68 65   TH3 expects the
eed0: 20 53 74 61 74 34 20 20 20 5e 5e 5e 5e 5e 5e 20   Stat4   ^^^^^^ 
eee0: 76 61 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38  value to be 0x08
eef0: 30 30 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67  00.  Don't chang
ef00: 65 20 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  e it */.#define 
ef10: 53 51 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20  SQLITE_PushDown 
ef20: 20 20 20 20 20 20 30 78 31 30 30 30 20 20 20 2f        0x1000   /
ef30: 2a 20 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20  * The push-down 
ef40: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
ef50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ef60: 69 6d 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78  implifyJoin   0x
ef70: 32 30 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72  2000   /* Conver
ef80: 74 20 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a  t LEFT JOIN to J
ef90: 4f 49 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  OIN */.#define S
efa0: 51 4c 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20  QLITE_SkipScan  
efb0: 20 20 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a       0x4000   /*
efc0: 20 53 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23   Skip-scans */.#
efd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72  define SQLITE_Pr
efe0: 6f 70 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38  opagateConst 0x8
eff0: 30 30 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e  000   /* The con
f000: 73 74 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f  stant propagatio
f010: 6e 20 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65  n opt */.#define
f020: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
f030: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
f040: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
f050: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
f060: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
f070: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
f080: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
f090: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
f0a0: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69  sabled..*/.#defi
f0b0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
f0c0: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
f0d0: 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74  )  (((db)->dbOpt
f0e0: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30  Flags&(mask))!=0
f0f0: 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  ).#define Optimi
f100: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
f110: 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29  , mask)   (((db)
f120: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
f130: 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  sk))==0)../*.** 
f140: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
f150: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
f160: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
f170: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
f180: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
f190: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
f1a0: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
f1b0: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
f1c0: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
f1d0: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
f1e0: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
f1f0: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
f200: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
f210: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
f220: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
f230: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
f240: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
f250: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
f260: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
f270: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
f280: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
f290: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
f2a0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
f2b0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
f2c0: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
f2d0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
f2e0: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
f2f0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
f300: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
f310: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
f320: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
f330: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
f340: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
f350: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
f360: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
f370: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f380: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
f390: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
f3a0: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
f3b0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
f3c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f3d0: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
f3e0: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
f3f0: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
f400: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
f410: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f420: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
f430: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
f440: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
f450: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
f460: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
f470: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
f480: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
f490: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
f4a0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  ** structure.  F
f4b0: 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  or global built-
f4c0: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78  in functions (ex
f4d0: 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28  : substr(), max(
f4e0: 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61  ), count()).** a
f4f0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
f500: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
f510: 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ld in the sqlite
f520: 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
f530: 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72  s object..** For
f540: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
f550: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
f560: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61  ned functions, a
f570: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
f580: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73  .** structure is
f590: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d   held in the db-
f5a0: 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c  >aHash hash tabl
f5b0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70  e..**.** The u.p
f5c0: 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73  Hash field is us
f5d0: 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c  ed by the global
f5e0: 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65   built-ins.  The
f5f0: 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a   u.pDestructor.*
f600: 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  * field is used 
f610: 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  by per-connectio
f620: 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69  n app-def functi
f630: 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ons..*/.struct F
f640: 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41  uncDef {.  i8 nA
f650: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
f660: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
f670: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
f680: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
f690: 20 75 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20   u32 funcFlags; 
f6a0: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
f6b0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
f6c0: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
f6d0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
f6e0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
f6f0: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
f700: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
f710: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
f720: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
f730: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
f740: 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65  (*xSFunc)(sqlite
f750: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
f760: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
f770: 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d   /* func or agg-
f780: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
f790: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
f7a0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72  /* Agg finalizer
f7d0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61   */.  void (*xVa
f7e0: 6c 75 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  lue)(sqlite3_con
f7f0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
f800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
f810: 75 72 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65  urrent agg value
f820: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e   */.  void (*xIn
f830: 76 65 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63  verse)(sqlite3_c
f840: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
f850: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
f860: 20 69 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65   inverse agg-ste
f870: 70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  p */.  const cha
f880: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53  r *zName;   /* S
f890: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
f8a0: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e  unction. */.  un
f8b0: 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65  ion {.    FuncDe
f8c0: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
f8d0: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
f8e0: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
f8f0: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
f900: 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75  /.    FuncDestru
f910: 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
f920: 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63  r;   /* Referenc
f930: 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75  e counted destru
f940: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
f950: 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  .  } u;.};../*.*
f960: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
f970: 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20   encapsulates a 
f980: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
f990: 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63  structor callbac
f9a0: 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  k (as.** configu
f9b0: 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65  red using create
f9c0: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20  _function_v2()) 
f9d0: 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20  and a reference 
f9e0: 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a  counter. When.**
f9f0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
fa00: 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20  _v2() is called 
fa10: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
fa20: 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74  tion with a dest
fa30: 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e  ructor,.** a sin
fa40: 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  gle object of th
fa50: 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63  is type is alloc
fa60: 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75  ated. FuncDestru
fa70: 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74  ctor.nRef is set
fa80: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
fa90: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
faa0: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
fab0: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
fac0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
fad0: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
fae0: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
faf0: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
fb00: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
fb10: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
fb20: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
fb30: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
fb40: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
fb50: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
fb60: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
fb70: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
fb80: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
fb90: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
fba0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
fbb0: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
fbc0: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
fbd0: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
fbe0: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
fbf0: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
fc00: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
fc10: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
fc20: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
fc30: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
fc40: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
fc50: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
fc60: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
fc70: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
fc80: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
fc90: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
fca0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
fcb0: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
fcc0: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
fcd0: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
fce0: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
fcf0: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
fd00: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
fd10: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
fd20: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
fd30: 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45  .  And.** SQLITE
fd40: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d  _FUNC_CONSTANT m
fd50: 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
fd60: 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  as SQLITE_DETERM
fd70: 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a  INISTIC.  There.
fd80: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
fd90: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
fda0: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
fdb0: 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c   this..**.** Val
fdc0: 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
fdd0: 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
fde0: 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53  ert()):.**     S
fdf0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
fe00: 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d  X    ==  NC_MinM
fe10: 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46  axAgg      == SF
fe20: 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20  _MinMaxAgg.**   
fe30: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45    SQLITE_FUNC_LE
fe40: 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c  NGTH    ==  OPFL
fe50: 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20  AG_LENGTHARG.** 
fe60: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
fe70: 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50  TYPEOF    ==  OP
fe80: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a  FLAG_TYPEOFARG.*
fe90: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
fea0: 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20  C_CONSTANT  ==  
feb0: 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49  SQLITE_DETERMINI
fec0: 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50  STIC from the AP
fed0: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
fee0: 46 55 4e 43 5f 44 49 52 45 43 54 20 20 20 20 3d  FUNC_DIRECT    =
fef0: 3d 20 20 53 51 4c 49 54 45 5f 44 49 52 45 43 54  =  SQLITE_DIRECT
ff00: 4f 4e 4c 59 20 66 72 6f 6d 20 74 68 65 20 41 50  ONLY from the AP
ff10: 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  I.**     SQLITE_
ff20: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64  FUNC_ENCMASK   d
ff30: 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45  epends on SQLITE
ff40: 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20  _UTF* macros in 
ff50: 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69  the API.*/.#defi
ff60: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
ff70: 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f  NCMASK  0x0003 /
ff80: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
ff90: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
ffa0: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
ffb0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ffc0: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20  LIKE     0x0004 
ffd0: 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72  /* Candidate for
ffe0: 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69   the LIKE optimi
fff0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
10000 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41  e SQLITE_FUNC_CA
10010 53 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a  SE     0x0008 /*
10020 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20   Case-sensitive 
10030 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69  LIKE-type functi
10040 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
10050 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20  LITE_FUNC_EPHEM 
10060 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68     0x0010 /* Eph
10070 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20  emeral.  Delete 
10080 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65  with VDBE */.#de
10090 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
100a0 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30  _NEEDCOLL 0x0020
100b0 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
100c0 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
100d0 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64  t be called*/.#d
100e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
100f0 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34  C_LENGTH   0x004
10100 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
10110 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
10120 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
10130 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
10140 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0080 /* Built-
10150 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
10160 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
10170 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
10180 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42  T    0x0100 /* B
10190 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
101a0 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
101b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
101c0 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30  C_COALESCE 0x020
101d0 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
101e0 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
101f0 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
10200 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
10210 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42  KELY 0x0400 /* B
10220 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79  uilt-in unlikely
10230 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
10240 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10250 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38  NC_CONSTANT 0x08
10260 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69  00 /* Constant i
10270 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e  nputs give a con
10280 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a  stant output */.
10290 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
102a0 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31  UNC_MINMAX   0x1
102b0 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  000 /* True for 
102c0 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20  min() and max() 
102d0 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64  aggregates */.#d
102e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
102f0 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30  C_SLOCHNG  0x200
10300 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67  0 /* "Slow Chang
10310 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61  e". Value consta
10320 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20  nt during a.    
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10350 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20  ** single query 
10360 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f  - might change o
10370 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66  ver time */.#def
10380 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
10390 41 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20  AFFINITY 0x4000 
103a0 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69  /* Built-in affi
103b0 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  nity() function 
103c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
103d0 45 5f 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20  E_FUNC_OFFSET   
103e0 30 78 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x8000 /* Built-
103f0 69 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  in sqlite_offset
10400 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
10410 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
10420 4e 43 5f 57 49 4e 44 4f 57 20 20 20 30 78 30 30  NC_WINDOW   0x00
10430 30 31 30 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d  010000 /* Built-
10440 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79 20 66  in window-only f
10450 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
10460 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49  ne SQLITE_FUNC_I
10470 4e 54 45 52 4e 41 4c 20 30 78 30 30 30 34 30 30  NTERNAL 0x000400
10480 30 30 20 2f 2a 20 46 6f 72 20 75 73 65 20 62 79  00 /* For use by
10490 20 4e 65 73 74 65 64 50 61 72 73 65 28 29 20 6f   NestedParse() o
104a0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
104b0 51 4c 49 54 45 5f 46 55 4e 43 5f 44 49 52 45 43  QLITE_FUNC_DIREC
104c0 54 20 20 20 30 78 30 30 30 38 30 30 30 30 20 2f  T   0x00080000 /
104d0 2a 20 4e 6f 74 20 66 6f 72 20 75 73 65 20 69 6e  * Not for use in
104e0 20 54 52 49 47 47 45 52 73 20 6f 72 20 56 49 45   TRIGGERs or VIE
104f0 57 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ws */.#define SQ
10500 4c 49 54 45 5f 46 55 4e 43 5f 53 55 42 54 59 50  LITE_FUNC_SUBTYP
10510 45 20 20 30 78 30 30 31 30 30 30 30 30 20 2f 2a  E  0x00100000 /*
10520 20 52 65 73 75 6c 74 20 6c 69 6b 65 6c 79 20 74   Result likely t
10530 6f 20 68 61 76 65 20 73 75 62 2d 74 79 70 65 20  o have sub-type 
10540 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
10550 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61  llowing three ma
10560 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29  cros, FUNCTION()
10570 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64  , LIKEFUNC() and
10580 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65   AGGREGATE() are
10590 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61  .** used to crea
105a0 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  te the initializ
105b0 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63  ers for the Func
105c0 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a  Def structures..
105d0 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e  **.**   FUNCTION
105e0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
105f0 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
10600 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10610 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
10620 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10630 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
10640 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d   zName.**     im
10650 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
10660 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
10670 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
10680 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
10690 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
106a0 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
106b0 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
106c0 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
106d0 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
106e0 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
106f0 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
10700 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
10710 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67  n. If.**     arg
10720 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
10730 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
10740 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10750 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
10760 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28  .**   VFUNCTION(
10770 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10780 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
10790 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
107a0 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
107b0 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
107c0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
107d0 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43  g..**.**   DFUNC
107e0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
107f0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10800 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
10810 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
10820 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
10830 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10840 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20  T flag and.**   
10850 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54    adds the SQLIT
10860 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66  E_FUNC_SLOCHNG f
10870 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64  lag.  Used for d
10880 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74  ate & time funct
10890 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20  ions.**     and 
108a0 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73  functions like s
108b0 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
108c0 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c  that can change,
108d0 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a   but not during.
108e0 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20  **     a single 
108f0 71 75 65 72 79 2e 20 20 54 68 65 20 69 41 72 67  query.  The iArg
10900 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20 54 68   is ignored.  Th
10910 65 20 75 73 65 72 2d 64 61 74 61 20 69 73 20 61  e user-data is a
10920 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20 20 20  lways set.**    
10930 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74   to a NULL point
10940 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72  er.  The bNC par
10950 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
10960 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52 45  ed..**.**   PURE
10970 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
10980 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10990 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
109a0 20 66 6f 72 20 22 70 75 72 65 22 20 64 61 74 65   for "pure" date
109b0 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 2c  /time functions,
109c0 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6c   this macro is l
109d0 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a  ike DFUNCTION.**
109e0 20 20 20 20 20 65 78 63 65 70 74 20 74 68 61 74       except that
109f0 20 69 74 20 64 6f 65 73 20 73 65 74 20 74 68 65   it does set the
10a00 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
10a10 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20 69 41  STANT flags.  iA
10a20 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69 67 6e  rg is.**     ign
10a30 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75 73 65  ored and the use
10a40 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65 73 65  r-data for these
10a50 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 73 65   functions is se
10a60 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20 20 20  t to an .**     
10a70 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d 4e 55  arbitrary non-NU
10a80 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65  LL pointer.  The
10a90 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69   bNC parameter i
10aa0 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
10ab0 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
10ac0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10ad0 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
10ae0 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
10af0 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
10b00 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10b10 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
10b20 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
10b30 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
10b40 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10b50 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
10b60 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
10b70 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
10b80 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
10b90 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
10ba0 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
10bb0 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
10bc0 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57 46 55  N()..**.**   WFU
10bd0 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10be0 72 67 2c 20 69 41 72 67 2c 20 78 53 74 65 70 2c  rg, iArg, xStep,
10bf0 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c   xFinal, xValue,
10c00 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20 20 20   xInverse).**   
10c10 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
10c20 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
10c30 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
10c40 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
10c50 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
10c60 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
10c70 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
10c80 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
10c90 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
10ca0 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
10cb0 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
10cc0 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
10cd0 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
10ce0 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
10cf0 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
10d00 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
10d10 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
10d20 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
10d30 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
10d40 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
10d50 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20  nction zName.** 
10d60 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73      that accepts
10d70 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20   nArg arguments 
10d80 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  and is implement
10d90 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20  ed by a call to 
10da0 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f  C.**     functio
10db0 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
10dc0 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
10dd0 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
10de0 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
10df0 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
10e00 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
10e10 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
10e20 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
10e30 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
10e40 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
10e50 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
10e60 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
10e70 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
10e80 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
10e90 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
10ea0 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10eb0 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10ec0 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10ed0 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
10ee0 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
10ef0 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
10f00 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
10f10 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
10f20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
10f30 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
10f40 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49  .#define VFUNCTI
10f50 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10f60 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10f70 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10f80 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
10f90 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10fa0 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
10fb0 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
10fc0 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
10fd0 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10fe0 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
10ff0 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
11000 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
11010 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
11020 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
11030 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c  HNG|SQLITE_UTF8,
11040 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e   \.   0, 0, xFun
11050 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  c, 0, 0, 0, #zNa
11060 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
11070 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d  e PURE_DATE(zNam
11080 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
11090 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
110a0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
110b0 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
110c0 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e  _UTF8|SQLITE_FUN
110d0 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20  C_CONSTANT, \.  
110e0 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74 65 33   (void*)&sqlite3
110f0 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e 63  Config, 0, xFunc
11100 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  , 0, 0, 0, #zNam
11110 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
11120 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
11130 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
11140 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
11150 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
11160 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
11170 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
11180 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
11190 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
111a0 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
111b0 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
111c0 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
111d0 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
111e0 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54  {0} }.#define ST
111f0 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
11200 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
11210 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
11220 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
11230 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
11240 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
11250 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
11260 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
11270 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23  Func, 0, 0, 0, #
11280 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65  zName, }.#define
11290 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
112a0 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
112b0 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
112c0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
112d0 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
112e0 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
112f0 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
11300 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
11310 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
11320 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e  ine AGGREGATE(zN
11330 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
11340 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
11350 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20 20 7b  l, xValue) \.  {
11360 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
11370 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
11380 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
11390 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
113a0 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
113b0 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c 75 65  ep,xFinal,xValue
113c0 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  ,0,#zName, {0}}.
113d0 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
113e0 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  E2(zName, nArg, 
113f0 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
11400 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61  xFinal, extraFla
11410 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
11420 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
11430 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
11440 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
11450 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
11460 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
11470 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 46   xStep,xFinal,xF
11480 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b  inal,0,#zName, {
11490 30 7d 7d 0a 23 64 65 66 69 6e 65 20 57 41 47 47  0}}.#define WAGG
114a0 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
114b0 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
114c0 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c  ep, xFinal, xVal
114d0 75 65 2c 20 78 49 6e 76 65 72 73 65 2c 20 66 29  ue, xInverse, f)
114e0 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
114f0 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
11500 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
11510 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  )|f, \.   SQLITE
11520 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
11530 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
11540 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76 65 72 73  l,xValue,xInvers
11550 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23  e,#zName, {0}}.#
11560 64 65 66 69 6e 65 20 49 4e 54 45 52 4e 41 4c 5f  define INTERNAL_
11570 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
11580 6e 41 72 67 2c 20 78 46 75 6e 63 29 20 5c 0a 20  nArg, xFunc) \. 
11590 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
115a0 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 7c 53 51 4c  UNC_INTERNAL|SQL
115b0 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f  ITE_UTF8|SQLITE_
115c0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c  FUNC_CONSTANT, \
115d0 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63 2c  .   0, 0, xFunc,
115e0 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
115f0 2c 20 7b 30 7d 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , {0} }.../*.** 
11600 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
11610 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
11620 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
11630 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
11640 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
11650 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
11660 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
11670 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
11680 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
11690 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
116a0 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
116b0 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
116c0 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
116d0 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
116e0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
116f0 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
11700 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11720 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
11730 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
11740 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
11750 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11770 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
11780 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
11790 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
117a0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
117c0 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
117d0 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
117e0 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
117f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11800 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
11810 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
11820 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
11830 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
11840 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
11850 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
11860 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
11870 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
11880 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
11890 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
118a0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
118b0 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
118c0 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
118d0 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
118e0 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
118f0 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
11900 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
11910 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
11920 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
11930 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
11940 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
11950 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
11960 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
11970 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
11980 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
11990 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
119a0 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
119b0 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
119c0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
119d0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
119e0 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
119f0 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
11a00 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
11a10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11a20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
11a30 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
11a40 75 6c 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ule() */.  int n
11a50 52 65 66 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  RefModule;      
11a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
11a80 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 6f 62  nters to this ob
11a90 6a 65 63 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ject */.  void *
11aa0 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20  pAux;           
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11ac0 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f  * pAux passed to
11ad0 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
11ae0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   */.  void (*xDe
11af0 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20  stroy)(void *); 
11b00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
11b10 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20  dule destructor 
11b20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61  function */.  Ta
11b30 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20  ble *pEpoTab;   
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20     /* Eponymous 
11b60 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d  table for this m
11b70 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  odule */.};../*.
11b80 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
11b90 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
11ba0 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
11bb0 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
11bc0 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
11bd0 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
11be0 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
11bf0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
11c00 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
11c10 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30  his column, \000
11c20 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20  , then the type 
11c30 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
11c40 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
11c50 20 76 61 6c 75 65 20 6f 72 20 47 45 4e 45 52 41   value or GENERA
11c60 54 45 44 20 41 4c 57 41 59 53 20 41 53 20 76 61  TED ALWAYS AS va
11c70 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  lue */.  char *z
11c80 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
11c90 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
11ca0 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
11cb0 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
11cc0 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
11cd0 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
11ce0 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
11cf0 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
11d00 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
11d10 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
11d20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
11d30 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
11d40 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
11d50 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
11d60 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e  size of value in
11d70 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69   this column. si
11d80 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a  zeof(INT)==1 */.
11d90 20 20 75 31 36 20 63 6f 6c 46 6c 61 67 73 3b 20    u16 colFlags; 
11da0 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
11db0 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
11dc0 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
11dd0 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
11de0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
11df0 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
11e00 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
11e10 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
11e20 20 30 78 30 30 30 31 20 20 20 2f 2a 20 43 6f 6c   0x0001   /* Col
11e30 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
11e40 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
11e50 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11e60 47 5f 48 49 44 44 45 4e 20 20 20 20 30 78 30 30  G_HIDDEN    0x00
11e70 30 32 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  02   /* A hidden
11e80 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
11e90 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
11ea0 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41  efine COLFLAG_HA
11eb0 53 54 59 50 45 20 20 20 30 78 30 30 30 34 20 20  STYPE   0x0004  
11ec0 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f   /* Type name fo
11ed0 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  llows column nam
11ee0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  e */.#define COL
11ef0 46 4c 41 47 5f 55 4e 49 51 55 45 20 20 20 20 30  FLAG_UNIQUE    0
11f00 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0008   /* Colum
11f10 6e 20 64 65 66 20 63 6f 6e 74 61 69 6e 73 20 22  n def contains "
11f20 55 4e 49 51 55 45 22 20 6f 72 20 22 50 4b 22 20  UNIQUE" or "PK" 
11f30 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11f40 41 47 5f 53 4f 52 54 45 52 52 45 46 20 30 78 30  AG_SORTERREF 0x0
11f50 30 31 30 20 20 20 2f 2a 20 55 73 65 20 73 6f 72  010   /* Use sor
11f60 74 65 72 2d 72 65 66 73 20 77 69 74 68 20 74 68  ter-refs with th
11f70 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  is column */.#de
11f80 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 56 49 52  fine COLFLAG_VIR
11f90 54 55 41 4c 20 20 20 30 78 30 30 32 30 20 20 20  TUAL   0x0020   
11fa0 2f 2a 20 47 45 4e 45 52 41 54 45 44 20 41 4c 57  /* GENERATED ALW
11fb0 41 59 53 20 41 53 20 2e 2e 2e 20 56 49 52 54 55  AYS AS ... VIRTU
11fc0 41 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  AL */.#define CO
11fd0 4c 46 4c 41 47 5f 53 54 4f 52 45 44 20 20 20 20  LFLAG_STORED    
11fe0 30 78 30 30 34 30 20 20 20 2f 2a 20 47 45 4e 45  0x0040   /* GENE
11ff0 52 41 54 45 44 20 41 4c 57 41 59 53 20 41 53 20  RATED ALWAYS AS 
12000 2e 2e 2e 20 53 54 4f 52 45 44 20 2a 2f 0a 23 64  ... STORED */.#d
12010 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 42 55  efine COLFLAG_BU
12020 53 59 20 20 20 20 20 20 30 78 30 30 38 30 20 20  SY      0x0080  
12030 20 2f 2a 20 42 6c 6f 63 6b 73 20 72 65 63 75 72   /* Blocks recur
12040 73 69 6f 6e 20 6f 6e 20 47 45 4e 45 52 41 54 45  sion on GENERATE
12050 44 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65  D columns */.#de
12060 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 4e 4f 54  fine COLFLAG_NOT
12070 41 56 41 49 4c 20 20 30 78 30 31 30 30 20 20 20  AVAIL  0x0100   
12080 2f 2a 20 53 54 4f 52 45 44 20 63 6f 6c 75 6d 6e  /* STORED column
12090 20 6e 6f 74 20 79 65 74 20 63 61 6c 63 75 6c 61   not yet calcula
120a0 74 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  ted */.#define C
120b0 4f 4c 46 4c 41 47 5f 47 45 4e 45 52 41 54 45 44  OLFLAG_GENERATED
120c0 20 30 78 30 30 36 30 20 20 20 2f 2a 20 43 6f 6d   0x0060   /* Com
120d0 62 6f 3a 20 5f 53 54 4f 52 45 44 2c 20 5f 56 49  bo: _STORED, _VI
120e0 52 54 55 41 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  RTUAL */.#define
120f0 20 43 4f 4c 46 4c 41 47 5f 4e 4f 49 4e 53 45 52   COLFLAG_NOINSER
12100 54 20 20 30 78 30 30 36 32 20 20 20 2f 2a 20 43  T  0x0062   /* C
12110 6f 6d 62 6f 3a 20 5f 48 49 44 44 45 4e 2c 20 5f  ombo: _HIDDEN, _
12120 53 54 4f 52 45 44 2c 20 5f 56 49 52 54 55 41 4c  STORED, _VIRTUAL
12130 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
12140 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
12150 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
12160 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
12170 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
12180 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
12190 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
121a0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
121b0 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
121c0 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
121d0 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
121e0 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
121f0 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
12200 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
12210 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
12220 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
12230 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
12240 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
12250 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
12260 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
12270 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
12280 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
12290 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
122a0 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
122b0 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
122c0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
122d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
122e0 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
122f0 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
12300 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
12310 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
12320 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
12330 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
12340 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
12350 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
12360 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
12370 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
12380 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
12390 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
123a0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
123b0 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
123c0 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
123d0 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
123e0 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
123f0 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
12400 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
12410 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
12420 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12430 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
12440 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
12450 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
12460 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
12470 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
12480 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
12490 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
124a0 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e  ine SQLITE_SO_UN
124b0 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f  DEFINED -1 /* No
124c0 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63   sort order spec
124d0 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ified */../*.** 
124e0 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  Column affinity 
124f0 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  types..**.** The
12500 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20  se used to have 
12510 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69  mnemonic name li
12520 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54  ke 'i' for SQLIT
12530 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e  E_AFF_INTEGER an
12540 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c  d.** 't' for SQL
12550 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42  ITE_AFF_TEXT.  B
12560 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61  ut we can save a
12570 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e   little space an
12580 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65  d improve.** the
12590 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20   speed a little 
125a0 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65  by numbering the
125b0 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74   values consecut
125c0 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74  ively..**.** But
125d0 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61   rather than sta
125e0 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20  rt with 0 or 1, 
125f0 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41  we begin with 'A
12600 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a  '.  That way,.**
12610 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61   when multiple a
12620 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72  ffinity types ar
12630 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69  e concatenated i
12640 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64  nto a string and
12650 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20  .** used as the 
12660 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79  P4 operand, they
12670 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65   will be more re
12680 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  adable..**.** No
12690 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65  te also that the
126a0 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61   numeric types a
126b0 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74  re grouped toget
126c0 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74  her so that test
126d0 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d  ing.** for a num
126e0 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73  eric type is a s
126f0 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e  ingle comparison
12700 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20  .  And the BLOB 
12710 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a  type is first..*
12720 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12730 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 30 78  _AFF_NONE     0x
12740 34 30 20 20 2f 2a 20 27 40 27 20 2a 2f 0a 23 64  40  /* '@' */.#d
12750 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
12760 5f 42 4c 4f 42 20 20 20 20 20 30 78 34 31 20 20  _BLOB     0x41  
12770 2f 2a 20 27 41 27 20 2a 2f 0a 23 64 65 66 69 6e  /* 'A' */.#defin
12780 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
12790 54 20 20 20 20 20 30 78 34 32 20 20 2f 2a 20 27  T     0x42  /* '
127a0 42 27 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  B' */.#define SQ
127b0 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
127c0 20 20 30 78 34 33 20 20 2f 2a 20 27 43 27 20 2a    0x43  /* 'C' *
127d0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
127e0 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 30 78  _AFF_INTEGER  0x
127f0 34 34 20 20 2f 2a 20 27 44 27 20 2a 2f 0a 23 64  44  /* 'D' */.#d
12800 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
12810 5f 52 45 41 4c 20 20 20 20 20 30 78 34 35 20 20  _REAL     0x45  
12820 2f 2a 20 27 45 27 20 2a 2f 0a 0a 23 64 65 66 69  /* 'E' */..#defi
12830 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
12840 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
12850 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
12860 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
12870 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
12880 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
12890 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
128a0 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
128b0 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
128c0 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ue..*/.#define S
128d0 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20  QLITE_AFF_MASK  
128e0 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41     0x47../*.** A
128f0 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61  dditional bit va
12900 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  lues that can be
12910 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66   ORed with an af
12920 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a  finity without.*
12930 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61  * changing the a
12940 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54  ffinity..**.** T
12950 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  he SQLITE_NOTNUL
12960 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62  L flag is a comb
12970 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45  ination of NULLE
12980 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c  Q and JUMPIFNULL
12990 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61  ..** It causes a
129a0 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69  n assert() to fi
129b0 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  re if either ope
129c0 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72  rand to a compar
129d0 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72  ison.** operator
129e0 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73   is NULL.  It is
129f0 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69   added to certai
12a00 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  n comparison ope
12a10 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f  rators to.** pro
12a20 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ve that the oper
12a30 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20  ands are always 
12a40 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65  NOT NULL..*/.#de
12a50 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50  fine SQLITE_KEEP
12a60 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f  NULL     0x08  /
12a70 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f 72  * Used by vector
12a80 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65   == or <> */.#de
12a90 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
12aa0 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f  IFNULL   0x10  /
12ab0 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
12ac0 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
12ad0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
12ae0 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
12af0 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x20  /* Store 
12b00 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
12b10 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
12b20 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
12b30 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
12b40 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
12b50 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
12b60 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20  SQLITE_NOTNULL  
12b70 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73      0x90  /* Ass
12b80 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64  ert that operand
12b90 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c  s are never NULL
12ba0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
12bb0 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
12bc0 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
12bd0 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
12be0 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
12bf0 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
12c00 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  chema..**.** If 
12c10 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
12c20 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74  ema is shared, t
12c30 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65  hen there is one
12c40 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
12c50 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66  s.** structure f
12c60 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
12c70 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c   connection (sql
12c80 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73  ite3*) that uses
12c90 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73   the shared.** s
12ca0 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62  chema. This is b
12cb0 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61  ecause each data
12cc0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
12cd0 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e  requires its own
12ce0 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61   unique.** insta
12cf0 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  nce of the sqlit
12d00 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
12d10 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
12d20 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
12d30 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
12d40 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62  on. sqlite3_vtab
12d50 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f  * handles can no
12d60 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77  t be shared betw
12d70 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  een.** database 
12d80 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
12d90 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
12da0 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
12db0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68   database.** sch
12dc0 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
12dd0 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
12de0 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
12df0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
12e00 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
12e10 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
12e20 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
12e30 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
12e40 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
12e50 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
12e60 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
12e70 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
12e80 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
12e90 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
12ea0 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
12eb0 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
12ec0 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
12ed0 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69  eal tables.** wi
12ee0 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
12ef0 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
12f00 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
12f10 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a  f the callers.**
12f20 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
12f30 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
12f40 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
12f50 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
12f60 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
12f70 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f   as that used to
12f80 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65   execute SQL ope
12f90 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76  rations on the v
12fa0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
12fb0 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f  .** All VTable o
12fc0 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72  bjects that corr
12fd0 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67  espond to a sing
12fe0 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68  le table in a sh
12ff0 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ared.** database
13000 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74   schema are init
13010 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ially stored in 
13020 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f  a linked-list po
13030 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74  inted to by.** t
13040 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
13050 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
13060 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
13070 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65  nding Table obje
13080 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73  ct..** When an s
13090 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
130a0 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65   operation is re
130b0 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73  quired to access
130c0 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
130d0 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68  table, it search
130e0 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20  es the list for 
130f0 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20  the VTable that 
13100 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
13110 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  he.** database c
13120 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20  onnection doing 
13130 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f  the preparing so
13140 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63   as to use the c
13150 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65  orrect.** sqlite
13160 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69  3_vtab* handle i
13170 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  n the compiled q
13180 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  uery..**.** When
13190 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61   an in-memory Ta
131a0 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65  ble object is de
131b0 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70  leted (for examp
131c0 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73  le when the.** s
131d0 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72  chema is being r
131e0 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65  eloaded for some
131f0 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54   reason), the VT
13200 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65  able objects are
13210 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20   not.** deleted 
13220 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
13230 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
13240 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
13250 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61  t()ed.** immedia
13260 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
13270 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
13280 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
13290 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
132a0 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
132b0 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
132c0 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
132d0 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
132e0 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
132f0 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
13300 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
13310 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
13320 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e  isconnected.** n
13330 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65  ext time a state
13340 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64  ment is prepared
13350 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69   using said sqli
13360 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f  te3*. This is do
13370 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64  ne.** to avoid d
13380 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69  eadlock issues i
13390 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
133a0 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  e sqlite3.mutex 
133b0 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65  mutexes..** Refe
133c0 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62  r to comments ab
133d0 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c  ove function sql
133e0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
133f0 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  st() for an.** e
13400 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f  xplanation as to
13410 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20   why it is safe 
13420 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20  to add an entry 
13430 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44  to an sqlite3.pD
13440 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73  isconnect.** lis
13450 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e  t without holdin
13460 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
13470 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ing sqlite3.mute
13480 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  x mutex..**.** T
13490 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62  he memory for ob
134a0 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79  jects of this ty
134b0 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c  pe is always all
134c0 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c  ocated by.** sql
134d0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20  ite3DbMalloc(), 
134e0 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  using the connec
134f0 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72  tion handle stor
13500 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20  ed in VTable.db 
13510 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  as.** the first 
13520 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
13530 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
13540 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
13550 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
13560 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
13570 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
13580 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13590 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
135a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
135b0 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
135c0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
135d0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
135e0 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
135f0 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
13600 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
13610 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
13620 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13630 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
13640 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
13650 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
13660 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
13670 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
13680 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
13690 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
136a0 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
136b0 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
136c0 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
136d0 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
136e0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
136f0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
13700 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
13710 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
13720 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  * The schema for
13730 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   each SQL table 
13740 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72  and view is repr
13750 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
13760 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61  y.** by an insta
13770 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
13780 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
13790 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
137a0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
137b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
137c0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
137d0 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
137e0 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
137f0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
13800 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
13810 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
13820 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
13830 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
13840 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
13850 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
13860 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
13870 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
13880 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
13890 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
138a0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
138b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
138c0 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
138d0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
138e0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
138f0 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
13900 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
13910 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
13920 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
13930 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  umn */.  ExprLis
13940 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
13950 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
13960 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20  raints */.      
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13980 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75   /*   ... also u
13990 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61  sed as column na
139a0 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45  me list in a VIE
139b0 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  W */.  int tnum;
139c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
139d0 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66  oot BTree page f
139e0 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  or this table */
139f0 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20  .  u32 nTabRef; 
13a00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13a10 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
13a20 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
13a30 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20   u32 tabFlags;  
13a40 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
13a50 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
13a60 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
13a70 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
13a80 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
13a90 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
13aa0 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36  e rowid */.  i16
13ab0 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
13ac0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
13ad0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
13ae0 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 6e 4e  able */.  i16 nN
13af0 56 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  VCol;          /
13b00 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
13b10 6d 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  mns that are not
13b20 20 56 49 52 54 55 41 4c 20 2a 2f 0a 20 20 4c 6f   VIRTUAL */.  Lo
13b30 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b  gEst nRowLogEst;
13b40 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
13b50 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20  rows in table - 
13b60 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
13b70 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  1 table */.  Log
13b80 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20  Est szTabRow;   
13b90 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
13ba0 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c  ize of each tabl
13bb0 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a  e row in bytes *
13bc0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
13bd0 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a  ENABLE_COSTMULT.
13be0 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c    LogEst costMul
13bf0 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d  t;     /* Cost m
13c00 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73  ultiplier for us
13c10 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
13c20 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65  /.#endif.  u8 ke
13c30 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  yConf;          
13c40 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e  /* What to do in
13c50 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e   case of uniquen
13c60 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20  ess conflict on 
13c70 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66  iPKey */.#ifndef
13c80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
13c90 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64  ERTABLE.  int ad
13ca0 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f  dColOffset;    /
13cb0 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41  * Offset in CREA
13cc0 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f  TE TABLE stmt to
13cd0 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d   add a new colum
13ce0 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
13cf0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13d00 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
13d10 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20  nt nModuleArg;  
13d20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13d30 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
13d40 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68  e module */.  ch
13d50 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67  ar **azModuleArg
13d60 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20  ;  /* 0: module 
13d70 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61  1: schema 2: vta
13d80 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67  b name 3...: arg
13d90 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  s */.  VTable *p
13da0 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c  VTable;     /* L
13db0 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62  ist of VTable ob
13dc0 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66  jects. */.#endif
13dd0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
13de0 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20  gger;   /* List 
13df0 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72  of triggers stor
13e00 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f  ed in pSchema */
13e10 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
13e20 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
13e30 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  a that contains 
13e40 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13e50 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62  Table *pNextZomb
13e60 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20  ie;  /* Next on 
13e70 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69  the Parse.pZombi
13e80 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a  eTab list */.};.
13e90 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
13ea0 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e  alues for Table.
13eb0 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  tabFlags..**.** 
13ec0 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70  TF_OOOHidden app
13ed0 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f  lies to tables o
13ee0 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76 65  r view that have
13ef0 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
13f00 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c  that are.** foll
13f10 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64  owed by non-hidd
13f20 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61  en columns.  Exa
13f30 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56  mple:  "CREATE V
13f40 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55  IRTUAL TABLE x U
13f50 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20  SING.** vtab1(a 
13f60 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53  HIDDEN, b);".  S
13f70 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f  ince "b" is a no
13f80 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  n-hidden column 
13f90 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64 65  but "a" is hidde
13fa0 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f  n,.** the TF_OOO
13fb0 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74 65  Hidden attribute
13fc0 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20   would apply in 
13fd0 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63 68  this case.  Such
13fe0 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a   tables require.
13ff0 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c  ** special handl
14000 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52  ing during INSER
14010 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 54 68  T processing. Th
14020 65 20 22 4f 4f 4f 22 20 6d 65 61 6e 73 20 22 4f  e "OOO" means "O
14030 75 74 20 4f 66 20 4f 72 64 65 72 22 2e 0a 2a 2a  ut Of Order"..**
14040 0a 2a 2a 20 43 6f 6e 73 74 72 61 69 6e 74 73 3a  .** Constraints:
14050 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 54  .**.**         T
14060 46 5f 48 61 73 56 69 72 74 75 61 6c 20 3d 3d 20  F_HasVirtual == 
14070 43 4f 4c 46 4c 41 47 5f 56 69 72 74 75 61 6c 0a  COLFLAG_Virtual.
14080 2a 2a 20 20 20 20 20 20 20 20 20 54 46 5f 48 61  **         TF_Ha
14090 73 53 74 6f 72 65 64 20 20 3d 3d 20 43 4f 4c 46  sStored  == COLF
140a0 4c 41 47 5f 53 74 6f 72 65 64 0a 2a 2f 0a 23 64  LAG_Stored.*/.#d
140b0 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
140c0 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  y        0x0001 
140d0 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
140e0 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
140f0 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
14100 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30  eral       0x000
14110 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
14120 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
14130 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
14140 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20  aryKey   0x0004 
14150 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
14160 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
14170 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
14180 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30  increment   0x00
14190 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
141a0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
141b0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
141c0 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53  .#define TF_HasS
141d0 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30  tat1        0x00
141e0 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67  10    /* nRowLog
141f0 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c  Est set from sql
14200 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65  ite_stat1 */.#de
14210 66 69 6e 65 20 54 46 5f 48 61 73 56 69 72 74 75  fine TF_HasVirtu
14220 61 6c 20 20 20 20 20 20 30 78 30 30 32 30 20 20  al      0x0020  
14230 20 20 2f 2a 20 48 61 73 20 6f 6e 65 20 6f 72 20    /* Has one or 
14240 6d 6f 72 65 20 56 49 52 54 55 41 4c 20 63 6f 6c  more VIRTUAL col
14250 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  umns */.#define 
14260 54 46 5f 48 61 73 53 74 6f 72 65 64 20 20 20 20  TF_HasStored    
14270 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20     0x0040    /* 
14280 48 61 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  Has one or more 
14290 53 54 4f 52 45 44 20 63 6f 6c 75 6d 6e 73 20 2a  STORED columns *
142a0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
142b0 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30  houtRowid    0x0
142c0 30 38 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  080    /* No row
142d0 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59  id.  PRIMARY KEY
142e0 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23   is the key */.#
142f0 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55  define TF_StatsU
14300 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30  sed       0x0100
14310 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61      /* Query pla
14320 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61  nner decisions a
14330 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20  ffected by.     
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f  ** Index.aiRowLo
14370 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f  gEst[] values */
14380 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69  .#define TF_NoVi
14390 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78 30 32  sibleRowid  0x02
143a0 30 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72  00    /* No user
143b0 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22  -visible "rowid"
143c0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
143d0 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ne TF_OOOHidden 
143e0 20 20 20 20 20 20 30 78 30 34 30 30 20 20 20 20        0x0400    
143f0 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20  /* Out-of-Order 
14400 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a  hidden columns *
14410 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
14420 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30  NotNull      0x0
14430 38 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69  800    /* Contai
14440 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  ns NOT NULL cons
14450 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
14460 6e 65 20 54 46 5f 53 68 61 64 6f 77 20 20 20 20  ne TF_Shadow    
14470 20 20 20 20 20 20 30 78 31 30 30 30 20 20 20 20        0x1000    
14480 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 73 68  /* True for a sh
14490 61 64 6f 77 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  adow table */../
144a0 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
144b0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
144c0 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
144d0 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
144e0 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
144f0 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
14500 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
14510 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
14520 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
14530 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
14540 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
14550 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
14560 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
14570 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
14580 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
14590 20 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41    ((X)->nModuleA
145a0 72 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  rg).#else.#  def
145b0 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
145c0 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a        0.#endif..
145d0 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
145e0 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63  determine if a c
145f0 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e  olumn is hidden.
14600 20 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64    IsOrdinaryHidd
14610 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e  enColumn().** on
14620 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e  ly works for non
14630 2d 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20  -virtual tables 
14640 28 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73  (ordinary tables
14650 20 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20   and views) and 
14660 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c  is.** always fal
14670 73 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45  se unless SQLITE
14680 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
14690 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65  OLUMNS is define
146a0 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64  d.  The.** IsHid
146b0 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72  denColumn() macr
146c0 6f 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72  o is general pur
146d0 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  pose..*/.#if def
146e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
146f0 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
14700 53 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  S).#  define IsH
14710 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
14720 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f         (((X)->co
14730 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
14740 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20  _HIDDEN)!=0).#  
14750 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72  define IsOrdinar
14760 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  yHiddenColumn(X)
14770 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
14780 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
14790 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65  N)!=0).#elif !de
147a0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
147b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
147c0 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
147d0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
147e0 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
147f0 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
14800 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
14810 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
14820 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
14830 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
14840 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
14850 29 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64  )         0.#  d
14860 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
14870 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
14880 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f  0.#endif.../* Do
14890 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
148a0 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
148b0 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
148c0 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
148d0 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
148e0 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66  tRowid)==0).#def
148f0 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64  ine VisibleRowid
14900 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c  (X) (((X)->tabFl
14910 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62  ags & TF_NoVisib
14920 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  leRowid)==0)../*
14930 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
14940 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
14950 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
14960 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14970 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
14980 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
14990 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
149a0 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
149b0 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
149c0 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
149d0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
149e0 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
149f0 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
14a00 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
14a10 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
14a20 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
14a30 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
14a40 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
14a50 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
14a60 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
14a70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
14a80 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
14a90 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
14aa0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
14ab0 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
14ac0 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
14ad0 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
14ae0 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
14af0 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
14b00 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
14b10 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
14b20 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
14b30 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
14b40 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
14b50 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
14b60 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
14b70 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
14b80 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
14b90 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
14ba0 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
14bb0 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
14bc0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
14bd0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
14be0 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
14bf0 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
14c00 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
14c10 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
14c20 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
14c30 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
14c40 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
14c50 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
14c60 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
14c70 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
14c80 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
14c90 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
14ca0 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
14cb0 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
14cc0 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
14cd0 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
14ce0 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
14cf0 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
14d00 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
14d10 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
14d20 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
14d30 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
14d40 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
14d50 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
14d60 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
14d70 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
14d80 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
14d90 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
14da0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
14db0 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
14dc0 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
14dd0 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
14de0 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
14df0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
14e00 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
14e10 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
14e20 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
14e30 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
14e40 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
14e50 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
14e60 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
14e70 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
14e80 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
14e90 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
14ea0 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
14eb0 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
14ec0 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
14ed0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
14ee0 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
14ef0 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
14f00 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
14f10 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
14f20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
14f30 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
14f40 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
14f50 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
14f60 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
14f70 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
14f80 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
14f90 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
14fa0 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
14fb0 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
14fc0 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
14fd0 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
14fe0 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
14ff0 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
15000 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
15010 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
15020 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
15030 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
15040 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15050 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
15060 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
15070 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
15080 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
15090 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
150a0 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
150b0 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
150c0 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
150d0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
150e0 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
150f0 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
15100 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
15110 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
15120 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
15130 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
15140 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
15150 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
15160 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
15170 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
15180 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
15190 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
151a0 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
151b0 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
151c0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
151d0 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
151e0 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
151f0 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
15200 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
15210 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
15220 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
15230 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
15240 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
15250 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
15260 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
15270 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
15280 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
15290 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
152a0 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
152b0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
152c0 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
152d0 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
152e0 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
152f0 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
15300 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
15310 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
15320 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
15330 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
15340 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
15350 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
15360 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
15370 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
15380 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
15390 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
153a0 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
153b0 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
153c0 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
153d0 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
153e0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
153f0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
15400 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
15410 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
15420 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
15430 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
15440 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
15450 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
15460 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
15470 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
15480 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
15490 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
154a0 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
154b0 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
154c0 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
154d0 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
154e0 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
154f0 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
15500 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
15510 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
15520 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
15530 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
15540 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
15550 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
15560 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
15570 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
15580 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
15590 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
155a0 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
155b0 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
155c0 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
155d0 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
155e0 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
155f0 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
15600 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a  oreign key..**.*
15610 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
15620 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20  symbolic values 
15630 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
15640 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a  rd which type.**
15650 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61   of action to ta
15660 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ke..*/.#define O
15670 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f  E_None     0   /
15680 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * There is no co
15690 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63  nstraint to chec
156a0 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  k */.#define OE_
156b0 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20  Rollback 1   /* 
156c0 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69  Fail the operati
156d0 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20  on and rollback 
156e0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
156f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62  */.#define OE_Ab
15700 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61  ort    2   /* Ba
15710 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62  ck out changes b
15720 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63  ut do no rollbac
15730 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  k transaction */
15740 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c  .#define OE_Fail
15750 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70       3   /* Stop
15760 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62   the operation b
15770 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69  ut leave all pri
15780 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  or changes */.#d
15790 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20  efine OE_Ignore 
157a0 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20    4   /* Ignore 
157b0 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f  the error. Do no
157c0 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20  t do the INSERT 
157d0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
157e0 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20  fine OE_Replace 
157f0 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65   5   /* Delete e
15800 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20  xisting record, 
15810 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f  then do INSERT o
15820 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
15830 69 6e 65 20 4f 45 5f 55 70 64 61 74 65 20 20 20  ine OE_Update   
15840 36 20 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 61  6   /* Process a
15850 73 20 61 20 44 4f 20 55 50 44 41 54 45 20 69 6e  s a DO UPDATE in
15860 20 61 6e 20 75 70 73 65 72 74 20 2a 2f 0a 23 64   an upsert */.#d
15870 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
15880 74 20 37 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 7   /* OE_Abor
15890 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
158a0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
158b0 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
158c0 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
158d0 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
158e0 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
158f0 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
15900 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
15910 20 39 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   9   /* Set the 
15920 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
15930 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
15940 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
15950 61 73 63 61 64 65 20 20 31 30 20 20 2f 2a 20 43  ascade  10  /* C
15960 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
15970 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
15980 5f 44 65 66 61 75 6c 74 20 20 31 31 20 20 2f 2a  _Default  11  /*
15990 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65   Do whatever the
159a0 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20   default action 
159b0 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  is */.../*.** An
159c0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
159d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
159e0 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61  ture is passed a
159f0 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
15a00 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
15a10 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65  e3VdbeKeyCompare
15a20 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20   and is used to 
15a30 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63  control the.** c
15a40 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
15a50 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
15a60 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
15a70 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
15a80 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
15a90 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
15aa0 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
15ab0 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
15ac0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
15ad0 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
15ae0 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
15af0 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
15b00 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
15b10 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
15b20 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
15b30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
15b40 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
15b50 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
15b60 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
15b70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
15b80 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
15b90 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
15ba0 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
15bb0 31 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20  16 nKeyField;   
15bc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15bd0 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
15be0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
15bf0 36 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20  6 nAllField;    
15c00 20 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d    /* Total colum
15c10 6e 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65  ns, including ke
15c20 79 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f  y plus others */
15c30 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
15c40 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
15c50 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
15c60 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
15c70 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 53 6f  Flags;     /* So
15c80 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
15c90 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
15ca0 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
15cb0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
15cc0 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
15cd0 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
15ce0 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  y */.};../*.** A
15cf0 6c 6c 6f 77 65 64 20 62 69 74 20 76 61 6c 75 65  llowed bit value
15d00 73 20 66 6f 72 20 65 6e 74 72 69 65 73 20 69 6e  s for entries in
15d10 20 74 68 65 20 4b 65 79 49 6e 66 6f 2e 61 53 6f   the KeyInfo.aSo
15d20 72 74 46 6c 61 67 73 5b 5d 20 61 72 72 61 79 2e  rtFlags[] array.
15d30 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4b 45 59 49  .*/.#define KEYI
15d40 4e 46 4f 5f 4f 52 44 45 52 5f 44 45 53 43 20 20  NFO_ORDER_DESC  
15d50 20 20 30 78 30 31 20 20 20 20 2f 2a 20 44 45 53    0x01    /* DES
15d60 43 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  C sort order */.
15d70 23 64 65 66 69 6e 65 20 4b 45 59 49 4e 46 4f 5f  #define KEYINFO_
15d80 4f 52 44 45 52 5f 42 49 47 4e 55 4c 4c 20 30 78  ORDER_BIGNULL 0x
15d90 30 32 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 69 73  02    /* NULL is
15da0 20 6c 61 72 67 65 72 20 74 68 61 6e 20 61 6e 79   larger than any
15db0 20 6f 74 68 65 72 20 76 61 6c 75 65 20 2a 2f 0a   other value */.
15dc0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
15dd0 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  ct holds a recor
15de0 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e  d which has been
15df0 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
15e00 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66   individual.** f
15e10 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70  ields, for the p
15e20 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67  urposes of doing
15e30 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a   a comparison..*
15e40 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
15e50 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
15e60 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
15e70 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
15e80 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
15e90 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
15ea0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
15eb0 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
15ec0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
15ed0 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
15ee0 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
15ef0 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
15f00 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
15f10 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
15f20 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
15f30 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
15f40 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
15f50 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
15f60 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e  ode..**.** An in
15f70 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
15f80 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20  bject serves as 
15f90 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e  a "key" for doin
15fa0 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a  g a search on.**
15fb0 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65   an index b+tree
15fc0 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68  . The goal of th
15fd0 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66  e search is to f
15fe0 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68  ind the entry th
15ff0 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20  at.** is closed 
16000 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72  to the key descr
16010 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a  ibed by this obj
16020 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63  ect.  This objec
16030 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20  t might hold.** 
16040 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  just a prefix of
16050 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e   the key.  The n
16060 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
16070 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70  is given by.** p
16080 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e  KeyInfo->nField.
16090 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e  .**.** The r1 an
160a0 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20  d r2 fields are 
160b0 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65  the values to re
160c0 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79  turn if this key
160d0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a   is less than.**
160e0 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
160f0 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74   a key in the bt
16100 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ree, respectivel
16110 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f  y.  These are no
16120 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64  rmally.** -1 and
16130 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79   +1 respectively
16140 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69  , but might be i
16150 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e  nverted to +1 an
16160 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72  d -1 if the b-tr
16170 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43  ee.** is in DESC
16180 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68   order..**.** Th
16190 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
161a0 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61   functions actua
161b0 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75  lly return defau
161c0 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20  lt_rc when they 
161d0 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c  find.** an equal
161e0 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64  s comparison.  d
161f0 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
16200 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20   -1, 0, or +1.  
16210 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  If there are.** 
16220 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73  multiple entries
16230 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77   in the b-tree w
16240 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
16250 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b   (when only look
16260 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69  ing.** at the fi
16270 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  rst pKeyInfo->nF
16280 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66  ields,) then def
16290 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73  ault_rc can be s
162a0 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63  et to -1 to.** c
162b0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
162c0 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
162d0 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
162e0 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
162f0 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
16300 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
16310 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
16320 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
16330 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
16340 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
16350 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
16360 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
16370 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
16380 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
16390 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
163a0 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
163b0 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
163c0 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
163d0 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
163e0 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
163f0 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
16400 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
16410 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
16420 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
16430 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
16440 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
16450 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
16460 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
16470 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
16480 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
16490 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
164a0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
164b0 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
164c0 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
164d0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
164e0 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
164f0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
16500 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
16510 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16520 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
16530 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
16540 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
16550 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
16560 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
16570 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
16580 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
16590 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
165a0 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
165b0 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
165c0 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
165d0 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
165e0 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
165f0 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68  urn if (lhs < rh
16600 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
16610 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
16620 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
16630 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
16640 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
16650 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
16660 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
16670 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
16680 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
16690 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
166a0 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
166b0 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
166c0 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
166d0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
166e0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
166f0 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
16700 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
16710 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
16720 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
16730 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
16740 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
16750 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
16760 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
16770 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
16780 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
16790 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
167a0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
167b0 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
167c0 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
167d0 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
167e0 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
167f0 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
16800 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
16810 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
16820 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
16830 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
16840 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
16850 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
16860 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
16870 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
16880 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
16890 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
168a0 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
168b0 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
168c0 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
168d0 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
168e0 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
168f0 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
16900 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d  e.** first colum
16910 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
16920 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
16930 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
16940 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
16950 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
16960 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
16970 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
16980 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
16990 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
169a0 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
169b0 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
169c0 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
169d0 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
169e0 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
169f0 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
16a00 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
16a10 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
16a20 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
16a30 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
16a40 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
16a50 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
16a60 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
16a70 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
16a80 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
16a90 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
16aa0 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
16ab0 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
16ac0 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
16ad0 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72  olution.** algor
16ae0 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
16af0 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
16b00 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
16b10 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
16b20 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a  e.** element..**
16b30 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e  .** While parsin
16b40 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  g a CREATE TABLE
16b50 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58   or CREATE INDEX
16b60 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72   statement in or
16b70 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61  der to.** genera
16b80 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73  te VDBE code (as
16b90 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73   opposed to pars
16ba0 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f  ing one read fro
16bb0 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74  m an sqlite_mast
16bc0 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70  er.** table as p
16bd0 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61  art of parsing a
16be0 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
16bf0 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61  ase schema), tra
16c00 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73  nsient instances
16c10 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
16c20 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65  cture may be cre
16c30 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ated. In this ca
16c40 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75  se the Index.tnu
16c50 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a  m variable is.**
16c60 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
16c70 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
16c80 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
16c90 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  , not a database
16ca0 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
16cb0 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65  (it cannot - the
16cc0 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69   database page i
16cd0 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20  s not allocated 
16ce0 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a  until the VDBE.*
16cf0 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65  * program is exe
16d00 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76  cuted). See conv
16d10 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69  ertToWithoutRowi
16d20 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74  dTable() for det
16d30 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ails..*/.struct 
16d40 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
16d50 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
16d60 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
16d70 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31  is index */.  i1
16d80 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  6 *aiColumn;    
16d90 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
16da0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
16db0 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
16dc0 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c   1st is 0 */.  L
16dd0 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45  ogEst *aiRowLogE
16de0 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  st;     /* From 
16df0 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
16e00 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
16e10 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
16e20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
16e30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16e40 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
16e50 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
16e60 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
16e70 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
16e80 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
16e90 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
16ea0 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
16eb0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
16ec0 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
16ed0 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
16ee0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
16ef0 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
16f00 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
16f10 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
16f20 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
16f30 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
16f40 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
16f50 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
16f60 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
16f70 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
16f80 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43  const char **azC
16f90 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oll;     /* Arra
16fa0 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
16fb0 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
16fc0 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  r index */.  Exp
16fd0 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65  r *pPartIdxWhere
16fe0 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63  ;     /* WHERE c
16ff0 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
17000 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45  l indices */.  E
17010 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70  xprList *aColExp
17020 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  r;      /* Colum
17030 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  n expressions */
17040 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
17050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
17060 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
17070 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
17080 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
17090 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
170a0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
170b0 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
170c0 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
170d0 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
170e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
170f0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
17100 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
17110 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
17120 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17130 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
17140 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
17150 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
17160 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
17170 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
17180 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
17190 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
171a0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
171b0 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
171c0 2a 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a 55 4e 49  * 0:Normal 1:UNI
171d0 51 55 45 2c 20 32 3a 50 52 49 4d 41 52 59 20 4b  QUE, 2:PRIMARY K
171e0 45 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a 20 20 75  EY, 3:IPK */.  u
171f0 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72  nsigned bUnorder
17200 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74  ed:1;   /* Use t
17210 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d  his index for ==
17220 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f   or IN queries o
17230 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  nly */.  unsigne
17240 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b  d uniqNotNull:1;
17250 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49    /* True if UNI
17260 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
17270 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73   for all columns
17280 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
17290 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f  sResized:1;    /
172a0 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65  * True if resize
172b0 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61  IndexObject() ha
172c0 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
172d0 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f  .  unsigned isCo
172e0 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54  vering:1;   /* T
172f0 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61  rue if this is a
17300 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   covering index 
17310 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  */.  unsigned no
17320 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a  SkipScan:1;   /*
17330 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75   Do not try to u
17340 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20  se skip-scan if 
17350 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  true */.  unsign
17360 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20  ed hasStat1:1;  
17370 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73     /* aiRowLogEs
17380 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72  t values come fr
17390 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
173a0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 4e  */.  unsigned bN
173b0 6f 51 75 65 72 79 3a 31 3b 20 20 20 20 20 2f 2a  oQuery:1;     /*
173c0 20 44 6f 20 6e 6f 74 20 75 73 65 20 74 68 69 73   Do not use this
173d0 20 69 6e 64 65 78 20 74 6f 20 6f 70 74 69 6d 69   index to optimi
173e0 7a 65 20 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  ze queries */.  
173f0 75 6e 73 69 67 6e 65 64 20 62 41 73 63 4b 65 79  unsigned bAscKey
17400 42 75 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  Bug:1;   /* True
17410 20 69 66 20 74 68 65 20 62 62 61 37 62 36 39 66   if the bba7b69f
17420 39 38 34 39 62 35 62 66 20 62 75 67 20 61 70 70  9849b5bf bug app
17430 6c 69 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  lies */.#ifdef S
17440 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
17450 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
17460 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17470 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
17480 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
17490 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
174a0 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
174b0 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
174c0 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
174d0 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
174e0 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
174f0 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
17500 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
17510 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
17520 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
17530 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
17540 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
17550 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
17560 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
17570 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
17580 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
17590 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
175a0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
175b0 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
175c0 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
175d0 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
175e0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
175f0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
17600 69 66 0a 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  if.  Bitmask col
17610 4e 6f 74 49 64 78 65 64 3b 20 20 20 20 20 2f 2a  NotIdxed;     /*
17620 20 30 20 66 6f 72 20 75 6e 69 6e 64 65 78 65 64   0 for unindexed
17630 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 54 61 62   columns in pTab
17640 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
17650 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
17660 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a   Index.idxType.*
17670 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
17680 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20  _IDXTYPE_APPDEF 
17690 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61       0   /* Crea
176a0 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
176b0 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
176c0 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
176d0 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20  _UNIQUE      1  
176e0 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61   /* Implements a
176f0 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
17700 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
17710 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
17720 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20  MARYKEY  2   /* 
17730 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  Is the PRIMARY K
17740 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
17750 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
17760 54 45 5f 49 44 58 54 59 50 45 5f 49 50 4b 20 20  TE_IDXTYPE_IPK  
17770 20 20 20 20 20 20 20 33 20 20 20 2f 2a 20 49 4e         3   /* IN
17780 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
17790 59 20 69 6e 64 65 78 20 2a 2f 0a 0a 2f 2a 20 52  Y index */../* R
177a0 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
177b0 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
177c0 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
177d0 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
177e0 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
177f0 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
17800 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
17810 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75  ARYKEY)../* Retu
17820 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
17830 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69   X is a UNIQUE i
17840 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
17850 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29  IsUniqueIndex(X)
17860 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72        ((X)->onEr
17870 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f  ror!=OE_None)../
17880 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f  * The Index.aiCo
17890 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72  lumn[] values ar
178a0 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74  e normally posit
178b0 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75  ive integer.  Bu
178c0 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73  t.** there are s
178d0 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c  ome negative val
178e0 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70  ues that have sp
178f0 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a  ecial meaning:.*
17900 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57  /.#define XN_ROW
17910 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20  ID     (-1)     
17920 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
17930 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a  n is the rowid *
17940 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50  /.#define XN_EXP
17950 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20  R      (-2)     
17960 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
17970 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
17980 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  on */../*.** Eac
17990 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
179a0 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
179b0 61 74 34 20 74 61 62 6c 65 20 69 73 20 72 65 70  at4 table is rep
179c0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
179d0 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74  ry.** using a st
179e0 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
179f0 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d  type.  See docum
17a00 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20  entation at the 
17a10 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e  top of the.** an
17a20 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66  alyze.c source f
17a30 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
17a40 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
17a50 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
17a60 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a  ample {.  void *
17a70 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  p;          /* P
17a80 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65  ointer to sample
17a90 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  d record */.  in
17aa0 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
17ab0 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72  /* Size of recor
17ac0 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  d in bytes */.  
17ad0 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20  tRowcnt *anEq;  
17ae0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
17af0 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
17b00 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
17b10 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
17b20 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20  Rowcnt *anLt;   
17b30 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
17b40 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
17b50 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
17b60 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
17b70 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20  tRowcnt *anDLt; 
17b80 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
17b90 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
17ba0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
17bb0 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
17bc0 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
17bd0 6c 75 65 73 20 74 6f 20 75 73 65 20 77 69 74 68  lues to use with
17be0 69 6e 20 74 68 65 20 66 6c 61 67 73 20 61 72 67  in the flags arg
17bf0 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
17c00 47 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23  GetToken()..*/.#
17c10 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f  define SQLITE_TO
17c20 4b 45 4e 5f 51 55 4f 54 45 44 20 20 20 20 30 78  KEN_QUOTED    0x
17c30 31 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20  1 /* Token is a 
17c40 71 75 6f 74 65 64 20 69 64 65 6e 74 69 66 69 65  quoted identifie
17c50 72 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r. */.#define SQ
17c60 4c 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f  LITE_TOKEN_KEYWO
17c70 52 44 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b 65  RD   0x2 /* Toke
17c80 6e 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20  n is a keyword. 
17c90 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  */../*.** Each t
17ca0 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
17cb0 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
17cc0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
17cd0 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
17ce0 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
17cf0 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
17d00 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
17d10 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
17d20 72 79 20 74 68 61 74 20 22 7a 22 20 70 6f 69 6e  ry that "z" poin
17d30 74 73 20 74 6f 20 69 73 20 6f 77 6e 65 64 20 62  ts to is owned b
17d40 79 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2e  y other objects.
17d50 20 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74    Take care.** t
17d60 68 61 74 20 74 68 65 20 6f 77 6e 65 72 20 6f 66  hat the owner of
17d70 20 74 68 65 20 22 7a 22 20 73 74 72 69 6e 67 20   the "z" string 
17d80 64 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63  does not dealloc
17d90 61 74 65 20 74 68 65 20 73 74 72 69 6e 67 20 62  ate the string b
17da0 65 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b  efore.** the Tok
17db0 65 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66 20 73  en goes out of s
17dc0 63 6f 70 65 21 20 20 56 65 72 79 20 6f 66 74 65  cope!  Very ofte
17dd0 6e 2c 20 74 68 65 20 22 7a 22 20 70 6f 69 6e 74  n, the "z" point
17de0 73 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a  s to some place.
17df0 2a 2a 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  ** in the middle
17e00 20 6f 66 20 74 68 65 20 50 61 72 73 65 2e 7a 53   of the Parse.zS
17e10 71 6c 20 74 65 78 74 2e 20 20 42 75 74 20 69 74  ql text.  But it
17e20 20 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e   might also poin
17e30 74 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63  t to a.** static
17e40 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75   string..*/.stru
17e50 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
17e60 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
17e70 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
17e80 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
17e90 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
17ea0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
17eb0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17ec0 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
17ed0 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
17ee0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
17ef0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
17f00 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
17f10 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
17f20 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
17f30 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
17f40 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
17f50 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17f60 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
17f70 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
17f80 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
17f90 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
17fa0 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
17fb0 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
17fc0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
17fd0 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
17fe0 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
17ff0 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
18000 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
18010 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
18020 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
18030 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
18040 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
18050 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
18060 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
18070 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
18080 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
18090 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
180a0 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
180b0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
180c0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
180d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
180e0 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
180f0 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
18100 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
18110 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
18120 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
18130 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
18140 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
18150 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
18160 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
18170 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
18180 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
18190 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
181a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
181b0 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
181c0 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
181d0 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
181e0 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
181f0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
18200 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
18210 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
18220 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
18230 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
18250 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
18260 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
18270 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
18280 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
18290 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
182a0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
182b0 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
182c0 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
182d0 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
182e0 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
182f0 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
18300 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18310 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
18320 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
18330 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
18340 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
18350 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
18360 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
18370 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
18380 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
18390 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
183a0 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
183b0 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
183c0 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
183d0 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
183e0 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
183f0 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
18400 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
18410 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
18420 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
18430 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
18440 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
18450 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
18460 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
18470 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18490 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
184a0 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
184b0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
184c0 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
184d0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
184e0 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
184f0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
18500 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
18510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
18520 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
18530 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
18540 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
18550 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
18560 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
18570 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
18580 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
18590 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
185a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
185b0 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
185c0 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
185d0 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
185e0 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
185f0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
18600 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
18610 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
18620 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18630 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
18640 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
18650 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
18660 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
18670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18680 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
18690 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
186a0 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
186b0 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
186c0 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
186d0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
186e0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
186f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
18700 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
18710 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
18720 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
18730 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
18740 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
18750 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
18760 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
18770 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
18780 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
18790 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
187a0 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
187b0 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
187c0 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
187d0 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
187e0 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
187f0 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
18800 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
18810 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
18820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18830 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
18840 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
18850 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
18860 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
18870 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
18880 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
18890 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
188a0 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
188b0 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
188c0 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
188d0 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
188e0 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
188f0 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
18900 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
18910 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
18920 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
18930 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
18940 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
18950 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
18960 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
18970 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
18980 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
18990 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
189a0 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
189b0 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
189c0 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
189d0 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
189e0 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
189f0 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
18a00 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
18a10 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
18a20 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
18a30 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
18a40 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
18a50 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
18a60 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
18a70 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
18a80 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
18a90 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
18aa0 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
18ab0 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
18ac0 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
18ad0 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
18ae0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
18af0 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
18b00 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
18b10 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
18b20 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
18b30 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
18b40 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
18b50 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
18b60 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
18b70 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
18b80 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
18b90 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
18ba0 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
18bb0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
18bc0 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
18bd0 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
18be0 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
18bf0 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
18c00 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
18c10 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
18c20 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
18c30 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
18c40 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
18c50 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
18c60 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18c70 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
18c80 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
18c90 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20  AT, TK_BLOB,.** 
18ca0 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
18cb0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
18cc0 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
18cd0 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
18ce0 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
18cf0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
18d00 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
18d10 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
18d20 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
18d30 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  the.** variable 
18d40 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
18d50 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18d60 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
18d70 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
18d80 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
18d90 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
18da0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
18db0 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
18dc0 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
18dd0 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
18de0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
18df0 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
18e00 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
18e10 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
18e20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
18e30 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
18e40 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
18e50 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
18e60 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18e70 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
18e80 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
18e90 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
18ea0 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
18eb0 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
18ec0 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
18ed0 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
18ee0 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
18ef0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18f00 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
18f10 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
18f20 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
18f30 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
18f40 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
18f50 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
18f60 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
18f70 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
18f80 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
18f90 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
18fa0 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
18fb0 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76  .x.pList is.** v
18fc0 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
18fd0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
18fe0 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
18ff0 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
19000 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
19010 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
19020 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
19030 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
19040 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
19050 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
19060 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
19070 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
19080 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
19090 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
190a0 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
190b0 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
190c0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
190d0 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
190e0 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
190f0 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
19100 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
19110 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
19120 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
19130 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
19140 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
19150 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
19160 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
19170 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
19180 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
19190 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
191a0 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
191b0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
191c0 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
191d0 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
191e0 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
191f0 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  ark.** character
19200 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
19210 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
19220 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
19230 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a  olds the index.*
19240 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  * number for tha
19250 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a  t variable..**.*
19260 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
19270 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72  ion is a subquer
19280 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c  y then Expr.iCol
19290 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  umn holds an int
192a0 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72  eger.** register
192b0 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69   number containi
192c0 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ng the result of
192d0 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20   the subquery.  
192e0 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65  If the.** subque
192f0 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74  ry gives a const
19300 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e  ant result, then
19310 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20   iTable is -1.  
19320 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a  If the subquery.
19330 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65  ** gives a diffe
19340 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64  rent answer at d
19350 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64  ifferent times d
19360 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uring statement 
19370 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68  processing.** th
19380 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65  en iTable is the
19390 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75   address of a su
193a0 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f  broutine that co
193b0 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75  mputes the subqu
193c0 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ery..**.** If th
193d0 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70  e Expr is of typ
193e0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64  e OP_Column, and
193f0 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73   the table it is
19400 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a   selecting from.
19410 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62  ** is a disk tab
19420 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a  le or the "old.*
19430 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20  " pseudo-table, 
19440 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73  then pTab points
19450 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   to the.** corre
19460 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64  sponding table d
19470 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  efinition..**.**
19480 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45   ALLOCATION NOTE
19490 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62  S:.**.** Expr ob
194a0 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20  jects can use a 
194b0 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70  lot of memory sp
194c0 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ace in database 
194d0 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68  schema.  To.** h
194e0 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72  elp reduce memor
194f0 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20  y requirements, 
19500 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70  sometimes an Exp
19510 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  r object will be
19520 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20  .** truncated.  
19530 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68  And to reduce th
19540 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
19550 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20  ry allocations, 
19560 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f  sometimes.** two
19570 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62   or more Expr ob
19580 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74  jects will be st
19590 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ored in a single
195a0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
195b0 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20  on,.** together 
195c0 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  with Expr.zToken
195d0 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20   strings..**.** 
195e0 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
195f0 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e  d and EP_TokenOn
19600 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  ly flags are set
19610 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72   when.** an Expr
19620 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63   object is trunc
19630 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52  ated.  When EP_R
19640 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74  educed is set, t
19650 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63  hen all.** the c
19660 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74  hild Expr object
19670 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c  s in the Expr.pL
19680 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69  eft and Expr.pRi
19690 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20  ght subtrees.** 
196a0 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69  are contained wi
196b0 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65  thin the same me
196c0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
196d0 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c    Note, however,
196e0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62   that.** the sub
196f0 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e  trees in Expr.x.
19700 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e  pList or Expr.x.
19710 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  pSelect are alwa
19720 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a  ys separately.**
19730 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61   allocated, rega
19740 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
19750 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75  r or not EP_Redu
19760 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73  ced is set..*/.s
19770 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75  truct Expr {.  u
19780 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
19790 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69        /* Operati
197a0 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  on performed by 
197b0 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63  this node */.  c
197c0 68 61 72 20 61 66 66 45 78 70 72 3b 20 20 20 20  har affExpr;    
197d0 20 20 20 20 20 20 2f 2a 20 61 66 66 69 6e 69 74        /* affinit
197e0 79 2c 20 6f 72 20 52 41 49 53 45 20 74 79 70 65  y, or RAISE type
197f0 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b   */.  u32 flags;
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19810 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
19820 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
19830 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
19840 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
19850 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
19860 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
19870 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
19880 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
19890 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
198a0 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
198b0 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
198c0 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
198d0 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
198e0 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
198f0 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
19900 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
19910 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
19920 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
19930 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
19940 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
19950 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
19960 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
19970 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
19980 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
19990 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
199a0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
199b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
199c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
199d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
199e0 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70  ********/..  Exp
199f0 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20  r *pLeft;       
19a00 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e      /* Left subn
19a10 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ode */.  Expr *p
19a20 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  Right;          
19a30 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65  /* Right subnode
19a40 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
19a50 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73    ExprList *pLis
19a60 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49  t;     /* op = I
19a70 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
19a80 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f  T, CASE, FUNCTIO
19a90 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20  N, BETWEEN */.  
19aa0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
19ab0 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73  t;     /* EP_xIs
19ac0 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20  Select and op = 
19ad0 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
19ae0 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  CT */.  } x;..  
19af0 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
19b00 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
19b10 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
19b20 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
19b30 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
19b40 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
19b50 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
19b60 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
19b70 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
19b80 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
19b90 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
19ba0 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
19bb0 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
19bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
19c00 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
19c10 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
19c20 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
19c30 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
19c40 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
19c50 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
19c60 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
19c70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
19c80 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
19c90 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
19ca0 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
19cb0 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19cd0 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
19ce0 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
19cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d00 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
19d10 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
19d20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20  -> old.         
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d40 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20  ** EP_Unlikely: 
19d50 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73   134217728 times
19d60 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20   likelihood.    
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 20 20 20 20 20 2a 2a 20 54 4b 5f 49 4e 3a 20 65       ** TK_IN: e
19d90 70 68 65 6d 65 72 69 61 6c 20 74 61 62 6c 65 20  phemerial table 
19da0 68 6f 6c 64 69 6e 67 20 52 48 53 0a 20 20 20 20  holding RHS.    
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
19dd0 54 5f 43 4f 4c 55 4d 4e 3a 20 4e 75 6d 62 65 72  T_COLUMN: Number
19de0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 6e 20 74   of columns on t
19df0 68 65 20 4c 48 53 0a 20 20 20 20 20 20 20 20 20  he LHS.         
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e10 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73  ** TK_SELECT: 1s
19e20 74 20 72 65 67 69 73 74 65 72 20 6f 66 20 72 65  t register of re
19e30 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20  sult vector */. 
19e40 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20   ynVar iColumn; 
19e50 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
19e60 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64  LUMN: column ind
19e70 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69  ex.  -1 for rowi
19e80 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
19e90 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19ea0 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69  K_VARIABLE: vari
19eb0 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77  able number (alw
19ec0 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20  ays >= 1)..     
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54      ** TK_SELECT
19ef0 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
19f00 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 76 65  of the result ve
19f10 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69 41  ctor */.  i16 iA
19f20 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
19f30 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20   /* Which entry 
19f40 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f  in pAggInfo->aCo
19f50 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d  l[] or ->aFunc[]
19f60 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74   */.  i16 iRight
19f70 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20  JoinTable;   /* 
19f80 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20  If EP_FromJoin, 
19f90 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20  the right table 
19fa0 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  of the join */. 
19fb0 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20   u8 op2;        
19fc0 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45          /* TK_RE
19fd0 47 49 53 54 45 52 2f 54 4b 5f 54 52 55 54 48 3a  GISTER/TK_TRUTH:
19fe0 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
19ff0 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
1a020 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
1a030 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a050 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
1a060 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
1a070 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
1a080 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
1a090 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
1a0a0 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
1a0b0 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
1a0c0 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ION */.  union {
1a0d0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
1a0e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1a0f0 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62 6c 65 20  K_COLUMN: Table 
1a100 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6c 75 6d  containing colum
1a110 6e 2e 20 43 61 6e 20 62 65 20 4e 55 4c 4c 0a 20  n. Can be NULL. 
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72            ** for
1a140 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20   a column of an 
1a150 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78 70 72  index on an expr
1a160 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 57 69  ession */.    Wi
1a170 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20 20 20  ndow *pWin;     
1a180 20 20 20 20 20 2f 2a 20 45 50 5f 57 69 6e 46 75       /* EP_WinFu
1a190 6e 63 3a 20 57 69 6e 64 6f 77 2f 46 69 6c 74 65  nc: Window/Filte
1a1a0 72 20 64 65 66 6e 20 66 6f 72 20 61 20 66 75 6e  r defn for a fun
1a1b0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 73 74 72  ction */.    str
1a1c0 75 63 74 20 7b 20 20 20 20 20 20 20 20 20 20 20  uct {           
1a1d0 20 20 20 20 2f 2a 20 54 4b 5f 49 4e 2c 20 54 4b      /* TK_IN, TK
1a1e0 5f 53 45 4c 45 43 54 2c 20 61 6e 64 20 54 4b 5f  _SELECT, and TK_
1a1f0 45 58 49 53 54 53 20 2a 2f 0a 20 20 20 20 20 20  EXISTS */.      
1a200 69 6e 74 20 69 41 64 64 72 3b 20 20 20 20 20 20  int iAddr;      
1a210 20 20 20 20 20 20 20 2f 2a 20 53 75 62 72 6f 75         /* Subrou
1a220 74 69 6e 65 20 65 6e 74 72 79 20 61 64 64 72 65  tine entry addre
1a230 73 73 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20  ss */.      int 
1a240 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 20 20  regReturn;      
1a250 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75     /* Register u
1a260 73 65 64 20 74 6f 20 68 6f 6c 64 20 72 65 74 75  sed to hold retu
1a270 72 6e 20 61 64 64 72 65 73 73 20 2a 2f 0a 20 20  rn address */.  
1a280 20 20 7d 20 73 75 62 3b 0a 20 20 7d 20 79 3b 0a    } sub;.  } y;.
1a290 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
1a2a0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
1a2b0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
1a2c0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
1a2d0 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 20 56 61 6c  gs field..** Val
1a2e0 75 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73 3a  ue restrictions:
1a2f0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  .**.**          
1a300 45 50 5f 41 67 67 20 3d 3d 20 4e 43 5f 48 61 73  EP_Agg == NC_Has
1a310 41 67 67 20 3d 3d 20 53 46 5f 48 61 73 41 67 67  Agg == SF_HasAgg
1a320 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 45 50 5f  .**          EP_
1a330 57 69 6e 20 3d 3d 20 4e 43 5f 48 61 73 57 69 6e  Win == NC_HasWin
1a340 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46  .*/.#define EP_F
1a350 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30 30  romJoin   0x0000
1a360 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
1a370 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
1a380 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
1a390 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
1a3a0 44 69 73 74 69 6e 63 74 20 20 20 30 78 30 30 30  Distinct   0x000
1a3b0 30 30 32 20 2f 2a 20 41 67 67 72 65 67 61 74 65  002 /* Aggregate
1a3c0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
1a3d0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
1a3e0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 61  */.#define EP_Ha
1a3f0 73 46 75 6e 63 20 20 20 20 30 78 30 30 30 30 30  sFunc    0x00000
1a400 34 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e  4 /* Contains on
1a410 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 69  e or more functi
1a420 6f 6e 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20  ons of any kind 
1a430 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69  */.#define EP_Fi
1a440 78 65 64 43 6f 6c 20 20 20 30 78 30 30 30 30 30  xedCol   0x00000
1a450 38 20 2f 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20 77  8 /* TK_Column w
1a460 69 74 68 20 61 20 6b 6e 6f 77 6e 20 66 69 78 65  ith a known fixe
1a470 64 20 76 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69  d value */.#defi
1a480 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
1a490 20 30 78 30 30 30 30 31 30 20 2f 2a 20 43 6f 6e   0x000010 /* Con
1a4a0 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
1a4b0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
1a4c0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
1a4d0 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30   EP_VarSelect  0
1a4e0 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
1a4f0 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
1a500 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
1a510 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
1a520 51 75 6f 74 65 64 20 20 30 78 30 30 30 30 34 30  Quoted  0x000040
1a530 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20   /* token.z was 
1a540 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e  originally in ".
1a550 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  .." */.#define E
1a560 50 5f 49 6e 66 69 78 46 75 6e 63 20 20 30 78 30  P_InfixFunc  0x0
1a570 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f  00080 /* True fo
1a580 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74  r an infix funct
1a590 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c  ion: LIKE, GLOB,
1a5a0 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20   etc */.#define 
1a5b0 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 20 30 78  EP_Collate    0x
1a5c0 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
1a5d0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
1a5e0 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
1a5f0 0a 20 20 2f 2a 20 20 20 20 20 20 20 20 20 20 20  .  /*           
1a600 20 20 20 20 20 20 20 30 78 30 30 30 32 30 30 20         0x000200 
1a610 41 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 72 65  Available for re
1a620 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  use */.#define E
1a630 50 5f 49 6e 74 56 61 6c 75 65 20 20 20 30 78 30  P_IntValue   0x0
1a640 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72  00400 /* Integer
1a650 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
1a660 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a   in u.iValue */.
1a670 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65  #define EP_xIsSe
1a680 6c 65 63 74 20 20 30 78 30 30 30 38 30 30 20 2f  lect  0x000800 /
1a690 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  * x.pSelect is v
1a6a0 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20  alid (otherwise 
1a6b0 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23  x.pList is) */.#
1a6c0 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20  define EP_Skip  
1a6d0 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
1a6e0 20 4f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 6e   Operator does n
1a6f0 6f 74 20 63 6f 6e 74 72 69 62 75 74 65 20 74 6f  ot contribute to
1a700 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 23 64 65   affinity */.#de
1a710 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
1a720 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45     0x002000 /* E
1a730 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
1a740 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
1a750 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
1a760 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20  e EP_TokenOnly  
1a770 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72  0x004000 /* Expr
1a780 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b   struct EXPR_TOK
1a790 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73  ENONLYSIZE bytes
1a7a0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1a7b0 20 45 50 5f 57 69 6e 20 20 20 20 20 20 20 20 30   EP_Win        0
1a7c0 78 30 30 38 30 30 30 20 2f 2a 20 43 6f 6e 74 61  x008000 /* Conta
1a7d0 69 6e 73 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  ins window funct
1a7e0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
1a7f0 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 20 30 78  EP_MemToken   0x
1a800 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74  010000 /* Need t
1a810 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  o sqlite3DbFree(
1a820 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f  ) Expr.zToken */
1a830 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65  .#define EP_NoRe
1a840 64 75 63 65 20 20 20 30 78 30 32 30 30 30 30 20  duce   0x020000 
1a850 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55  /* Cannot EXPRDU
1a860 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78  P_REDUCE this Ex
1a870 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  pr */.#define EP
1a880 5f 55 6e 6c 69 6b 65 6c 79 20 20 20 30 78 30 34  _Unlikely   0x04
1a890 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
1a8a0 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
1a8b0 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
1a8c0 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
1a8d0 75 6e 63 20 20 30 78 30 38 30 30 30 30 20 2f 2a  unc  0x080000 /*
1a8e0 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43   A SQLITE_FUNC_C
1a8f0 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43  ONSTANT or _SLOC
1a900 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  HNG function */.
1a910 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
1a920 4e 75 6c 6c 20 20 30 78 31 30 30 30 30 30 20 2f  Null  0x100000 /
1a930 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65  * Can be null de
1a940 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63  spite NOT NULL c
1a950 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
1a960 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79  fine EP_Subquery
1a970 20 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54     0x200000 /* T
1a980 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
1a990 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f  K_SELECT operato
1a9a0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
1a9b0 41 6c 69 61 73 20 20 20 20 20 20 30 78 34 30 30  Alias      0x400
1a9c0 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69  000 /* Is an ali
1a9d0 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20  as for a result 
1a9e0 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  set column */.#d
1a9f0 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20 20 20  efine EP_Leaf   
1aa00 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20      0x800000 /* 
1aa10 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69  Expr.pLeft, .pRi
1aa20 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20  ght, .u.pSelect 
1aa30 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66  all NULL */.#def
1aa40 69 6e 65 20 45 50 5f 57 69 6e 46 75 6e 63 20 20  ine EP_WinFunc  
1aa50 20 30 78 31 30 30 30 30 30 30 20 2f 2a 20 54 4b   0x1000000 /* TK
1aa60 5f 46 55 4e 43 54 49 4f 4e 20 77 69 74 68 20 45  _FUNCTION with E
1aa70 78 70 72 2e 79 2e 70 57 69 6e 20 73 65 74 20 2a  xpr.y.pWin set *
1aa80 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62  /.#define EP_Sub
1aa90 72 74 6e 20 20 20 20 30 78 32 30 30 30 30 30 30  rtn    0x2000000
1aaa0 20 2f 2a 20 55 73 65 73 20 45 78 70 72 2e 79 2e   /* Uses Expr.y.
1aab0 73 75 62 2e 20 54 4b 5f 49 4e 2c 20 5f 53 45 4c  sub. TK_IN, _SEL
1aac0 45 43 54 2c 20 6f 72 20 5f 45 58 49 53 54 53 20  ECT, or _EXISTS 
1aad0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 51 75  */.#define EP_Qu
1aae0 6f 74 65 64 20 20 20 20 30 78 34 30 30 30 30 30  oted    0x400000
1aaf0 30 20 2f 2a 20 54 4b 5f 49 44 20 77 61 73 20 6f  0 /* TK_ID was o
1ab00 72 69 67 69 6e 61 6c 6c 79 20 71 75 6f 74 65 64  riginally quoted
1ab10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
1ab20 74 61 74 69 63 20 20 20 20 30 78 38 30 30 30 30  tatic    0x80000
1ab30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  00 /* Held in me
1ab40 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
1ab50 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
1ab60 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 73  */.#define EP_Is
1ab70 54 72 75 65 20 20 20 30 78 31 30 30 30 30 30 30  True   0x1000000
1ab80 30 20 2f 2a 20 41 6c 77 61 79 73 20 68 61 73 20  0 /* Always has 
1ab90 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 6f 66  boolean value of
1aba0 20 54 52 55 45 20 2a 2f 0a 23 64 65 66 69 6e 65   TRUE */.#define
1abb0 20 45 50 5f 49 73 46 61 6c 73 65 20 20 30 78 32   EP_IsFalse  0x2
1abc0 30 30 30 30 30 30 30 20 2f 2a 20 41 6c 77 61 79  0000000 /* Alway
1abd0 73 20 68 61 73 20 62 6f 6f 6c 65 61 6e 20 76 61  s has boolean va
1abe0 6c 75 65 20 6f 66 20 46 41 4c 53 45 20 2a 2f 0a  lue of FALSE */.
1abf0 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 64 69 72  #define EP_Indir
1ac00 65 63 74 20 30 78 34 30 30 30 30 30 30 30 20 2f  ect 0x40000000 /
1ac10 2a 20 43 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  * Contained with
1ac20 69 6e 20 61 20 54 52 49 47 47 45 52 20 6f 72 20  in a TRIGGER or 
1ac30 61 20 56 49 45 57 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  a VIEW */../*.**
1ac40 20 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74   The EP_Propagat
1ac50 65 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20  e mask is a set 
1ac60 6f 66 20 70 72 6f 70 65 72 74 69 65 73 20 74 68  of properties th
1ac70 61 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  at automatically
1ac80 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70   propagate.** up
1ac90 77 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e  wards into paren
1aca0 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66  t nodes..*/.#def
1acb0 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  ine EP_Propagate
1acc0 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f   (EP_Collate|EP_
1acd0 53 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46  Subquery|EP_HasF
1ace0 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  unc)../*.** Thes
1acf0 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
1ad00 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
1ad10 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
1ad20 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e   in the.** Expr.
1ad30 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
1ad40 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50  #define ExprHasP
1ad50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
1ad60 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
1ad70 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45  ))!=0).#define E
1ad80 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74  xprHasAllPropert
1ad90 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
1ada0 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
1adb0 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50  #define ExprSetP
1adc0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
1add0 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
1ade0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65  .#define ExprCle
1adf0 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  arProperty(E,P) 
1ae00 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28    (E)->flags&=~(
1ae10 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 41  P).#define ExprA
1ae20 6c 77 61 79 73 54 72 75 65 28 45 29 20 20 20 28  lwaysTrue(E)   (
1ae30 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 45 50 5f  ((E)->flags&(EP_
1ae40 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73 54 72  FromJoin|EP_IsTr
1ae50 75 65 29 29 3d 3d 45 50 5f 49 73 54 72 75 65 29  ue))==EP_IsTrue)
1ae60 0a 23 64 65 66 69 6e 65 20 45 78 70 72 41 6c 77  .#define ExprAlw
1ae70 61 79 73 46 61 6c 73 65 28 45 29 20 20 28 28 28  aysFalse(E)  (((
1ae80 45 29 2d 3e 66 6c 61 67 73 26 28 45 50 5f 46 72  E)->flags&(EP_Fr
1ae90 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73 46 61 6c 73  omJoin|EP_IsFals
1aea0 65 29 29 3d 3d 45 50 5f 49 73 46 61 6c 73 65 29  e))==EP_IsFalse)
1aeb0 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
1aec0 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
1aed0 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
1aee0 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
1aef0 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
1af00 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
1af10 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
1af20 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
1af30 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
1af40 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
1af50 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
1af60 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
1af70 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1af80 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
1af90 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
1afa0 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
1afb0 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
1afc0 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
1afd0 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
1afe0 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
1aff0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
1b000 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
1b010 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
1b020 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74  ormal Expr.** st
1b030 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
1b040 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
1b050 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
1b060 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a  t in Expr.flags.
1b070 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
1b080 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
1b090 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
1b0a0 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
1b0b0 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
1b0c0 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
1b0d0 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
1b0e0 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
1b0f0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
1b100 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
1b110 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
1b120 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
1b130 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
1b140 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
1b150 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
1b160 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
1b170 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
1b180 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
1b190 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
1b1a0 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
1b1b0 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
1b1c0 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
1b1d0 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73  mment.** above s
1b1e0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
1b1f0 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
1b200 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
1b210 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
1b220 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
1b230 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
1b240 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
1b250 20 54 72 75 65 20 69 66 20 74 68 65 20 65 78 70   True if the exp
1b260 72 65 73 73 69 6f 6e 20 70 61 73 73 65 64 20 61  ression passed a
1b270 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 77 61  s an argument wa
1b280 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  s a function wit
1b290 68 0a 2a 2a 20 61 6e 20 4f 56 45 52 28 29 20 63  h.** an OVER() c
1b2a0 6c 61 75 73 65 20 28 61 20 77 69 6e 64 6f 77 20  lause (a window 
1b2b0 66 75 6e 63 74 69 6f 6e 29 2e 0a 2a 2f 0a 23 69  function)..*/.#i
1b2c0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1b2d0 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 23 20 64 65  _WINDOWFUNC.# de
1b2e0 66 69 6e 65 20 49 73 57 69 6e 64 6f 77 46 75 6e  fine IsWindowFun
1b2f0 63 28 70 29 20 30 0a 23 65 6c 73 65 0a 23 20 64  c(p) 0.#else.# d
1b300 65 66 69 6e 65 20 49 73 57 69 6e 64 6f 77 46 75  efine IsWindowFu
1b310 6e 63 28 70 29 20 28 20 5c 0a 20 20 20 20 45 78  nc(p) ( \.    Ex
1b320 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 28 70  prHasProperty((p
1b330 29 2c 20 45 50 5f 57 69 6e 46 75 6e 63 29 20 26  ), EP_WinFunc) &
1b340 26 20 70 2d 3e 79 2e 70 57 69 6e 2d 3e 65 46 72  & p->y.pWin->eFr
1b350 6d 54 79 70 65 21 3d 54 4b 5f 46 49 4c 54 45 52  mType!=TK_FILTER
1b360 20 5c 0a 20 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a   \. ).#endif../*
1b370 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
1b380 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
1b390 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
1b3a0 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
1b3b0 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
1b3c0 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
1b3d0 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
1b3e0 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
1b3f0 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
1b400 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
1b410 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
1b420 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
1b430 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
1b440 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
1b450 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
1b460 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
1b470 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
1b480 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
1b490 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
1b4a0 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
1b4b0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
1b4c0 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
1b4d0 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
1b4e0 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
1b4f0 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
1b500 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
1b510 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
1b520 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
1b530 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
1b540 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
1b550 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
1b560 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1b570 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
1b580 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
1b590 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
1b5a0 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
1b5b0 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
1b5c0 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
1b5d0 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
1b5e0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1b5f0 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
1b600 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
1b610 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
1b620 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
1b630 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
1b640 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
1b650 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
1b660 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
1b670 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
1b680 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
1b690 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
1b6a0 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
1b6b0 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
1b6c0 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
1b6d0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
1b6e0 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
1b6f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1b700 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
1b710 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
1b720 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
1b730 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
1b740 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
1b750 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
1b760 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
1b770 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
1b780 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74 72   /* The parse tr
1b790 65 65 20 66 6f 72 20 74 68 69 73 20 65 78 70 72  ee for this expr
1b7a0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
1b7b0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1b7c0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61        /* Token a
1b7d0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1b7e0 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  his expression *
1b7f0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61  /.    char *zSpa
1b800 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
1b810 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
1b820 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
1b830 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 46   */.    u8 sortF
1b840 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
1b850 2f 2a 20 4d 61 73 6b 20 6f 66 20 4b 45 59 49 4e  /* Mask of KEYIN
1b860 46 4f 5f 4f 52 44 45 52 5f 2a 20 66 6c 61 67 73  FO_ORDER_* flags
1b870 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
1b880 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
1b890 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
1b8a0 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
1b8b0 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
1b8c0 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
1b8d0 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
1b8e0 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
1b8f0 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
1b900 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
1b910 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
1b920 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
1b930 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
1b940 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
1b950 64 20 62 53 6f 72 74 65 72 52 65 66 20 3a 31 3b  d bSorterRef :1;
1b960 20 2f 2a 20 44 65 66 65 72 20 65 76 61 6c 75 61   /* Defer evalua
1b970 74 69 6f 6e 20 75 6e 74 69 6c 20 61 66 74 65 72  tion until after
1b980 20 73 6f 72 74 69 6e 67 20 2a 2f 0a 20 20 20 20   sorting */.    
1b990 75 6e 73 69 67 6e 65 64 20 62 4e 75 6c 6c 73 3a  unsigned bNulls:
1b9a0 20 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20   1;     /* True 
1b9b0 69 66 20 65 78 70 6c 69 63 69 74 20 22 4e 55 4c  if explicit "NUL
1b9c0 4c 53 20 46 49 52 53 54 2f 4c 41 53 54 22 20 2a  LS FIRST/LAST" *
1b9d0 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
1b9e0 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
1b9f0 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
1ba00 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
1ba10 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
1ba20 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
1ba30 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
1ba40 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
1ba50 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1ba60 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
1ba70 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
1ba80 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
1ba90 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
1baa0 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
1bab0 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
1bac0 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
1bad0 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
1bae0 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  ;.  } a[1];     
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bb00 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63  One slot for eac
1bb10 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
1bb20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
1bb30 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1bb40 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
1bb50 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
1bb60 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
1bb70 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
1bb80 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
1bb90 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
1bba0 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
1bbb0 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
1bbc0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
1bbd0 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
1bbe0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
1bbf0 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
1bc00 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
1bc10 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
1bc20 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
1bc30 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
1bc40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
1bc50 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
1bc60 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
1bc70 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
1bc80 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
1bc90 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
1bca0 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
1bcb0 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
1bcc0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
1bcd0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
1bce0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1bcf0 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
1bd00 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
1bd10 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
1bd20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
1bd30 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
1bd40 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
1bd50 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
1bd60 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
1bd70 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1bd80 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
1bd90 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
1bda0 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
1bdb0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1bdc0 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
1bdd0 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
1bde0 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
1bdf0 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
1be00 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
1be10 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
1be20 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
1be30 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
1be40 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1be50 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
1be60 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
1be70 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
1be80 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
1be90 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
1bea0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
1beb0 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
1bec0 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
1bed0 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
1bee0 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
1bef0 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
1bf00 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
1bf10 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
1bf20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1bf30 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
1bf40 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
1bf50 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
1bf60 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
1bf70 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
1bf80 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
1bf90 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
1bfa0 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
1bfb0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
1bfc0 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
1bfd0 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
1bfe0 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
1bff0 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
1c000 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
1c010 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
1c020 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
1c030 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
1c040 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
1c050 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
1c060 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
1c070 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
1c080 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
1c090 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
1c0a0 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
1c0b0 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
1c0c0 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
1c0d0 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
1c0e0 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
1c0f0 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
1c100 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
1c110 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
1c120 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
1c130 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
1c140 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
1c150 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
1c160 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
1c170 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
1c180 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
1c190 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
1c1a0 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
1c1b0 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
1c1c0 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
1c1d0 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
1c1e0 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
1c1f0 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
1c200 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
1c210 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
1c220 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
1c230 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20  t {.  int nSrc; 
1c240 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c250 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
1c260 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
1c270 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1c280 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   u32 nAlloc;    
1c290 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1c2a0 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
1c2b0 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
1c2c0 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
1c2d0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68  t_item {.    Sch
1c2e0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f  ema *pSchema;  /
1c2f0 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63  * Schema to whic
1c300 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66  h this item is f
1c310 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  ixed */.    char
1c320 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
1c330 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
1c340 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
1c350 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
1c360 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
1c370 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
1c380 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
1c390 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
1c3a0 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
1c3b0 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
1c3c0 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
1c3d0 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
1c3e0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
1c3f0 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
1c400 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
1c410 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
1c420 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
1c430 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
1c440 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
1c450 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
1c460 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
1c470 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64  FillSub;  /* Add
1c480 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69  ress of subrouti
1c490 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61  ne to manifest a
1c4a0 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20   subquery */.   
1c4b0 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
1c4c0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1c4d0 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64  olding return ad
1c4e0 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c  dress of addrFil
1c4f0 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lSub */.    int 
1c500 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a  regResult;    /*
1c510 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   Registers holdi
1c520 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  ng results of a 
1c530 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1c540 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
1c550 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
1c560 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
1c570 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
1c580 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
1c590 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20  evious */.      
1c5a0 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
1c5b0 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
1c5c0 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
1c5d0 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
1c5e0 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  use */.      uns
1c5f0 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42  igned isIndexedB
1c600 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  y :1;   /* True 
1c610 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49  if there is an I
1c620 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
1c630 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1c640 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b  ed isTabFunc :1;
1c650 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1c660 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
1c670 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a  ction syntax */.
1c680 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1c690 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20  sCorrelated :1; 
1c6a0 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d   /* True if sub-
1c6b0 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61  query is correla
1c6c0 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ted */.      uns
1c6d0 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69  igned viaCorouti
1c6e0 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65  ne :1;  /* Imple
1c6f0 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72  mented as a co-r
1c700 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20  outine */.      
1c710 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72  unsigned isRecur
1c720 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72  sive :1;   /* Tr
1c730 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  ue for recursive
1c740 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49   reference in WI
1c750 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a  TH */.    } fg;.
1c760 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
1c770 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
1c780 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
1c790 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
1c7a0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
1c7b0 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
1c7c0 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
1c7d0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
1c7e0 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
1c7f0 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
1c800 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
1c810 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
1c820 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
1c830 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
1c840 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
1c850 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
1c860 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
1c870 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65     char *zIndexe
1c880 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74  dBy;    /* Ident
1c890 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45  ifier from "INDE
1c8a0 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22  XED BY <zIndex>"
1c8b0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1c8c0 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63   ExprList *pFunc
1c8d0 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e  Arg;  /* Argumen
1c8e0 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75  ts to table-valu
1c8f0 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ed-function */. 
1c900 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64     } u1;.    Ind
1c910 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f  ex *pIBIndex;  /
1c920 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  * Index structur
1c930 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1c940 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79  to u1.zIndexedBy
1c950 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
1c960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1c970 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
1c980 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
1c990 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
1c9a0 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
1c9b0 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
1c9c0 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
1c9d0 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
1c9e0 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
1c9f0 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
1ca00 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
1ca10 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
1ca20 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
1ca30 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
1ca40 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
1ca50 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
1ca60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
1ca70 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
1ca80 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
1ca90 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
1caa0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
1cab0 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
1cac0 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
1cad0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1cae0 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
1caf0 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
1cb00 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
1cb10 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
1cb20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
1cb30 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
1cb40 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
1cb50 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
1cb60 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
1cb70 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
1cb80 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
1cb90 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
1cba0 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
1cbb0 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
1cbc0 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
1cbd0 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
1cbe0 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
1cbf0 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
1cc00 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a  Flags member..**
1cc10 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1cc20 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
1cc30 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
1cc40 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f  *     WHERE_USE_
1cc50 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78  LIMIT  == SF_Fix
1cc60 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69  edLimit.*/.#defi
1cc70 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1cc80 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30  _NORMAL   0x0000
1cc90 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65   /* No-op */.#de
1cca0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1ccb0 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30  BY_MIN      0x00
1ccc0 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  01 /* ORDER BY p
1ccd0 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69  rocessing for mi
1cce0 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  n() func */.#def
1ccf0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1cd00 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30  Y_MAX      0x000
1cd10 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  2 /* ORDER BY pr
1cd20 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78  ocessing for max
1cd30 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
1cd40 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
1cd50 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34  _DESIRED  0x0004
1cd60 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f   /* Want to do o
1cd70 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44  ne-pass UPDATE/D
1cd80 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
1cd90 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d   WHERE_ONEPASS_M
1cda0 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f  ULTIROW 0x0008 /
1cdb0 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20  * ONEPASS is ok 
1cdc0 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f  with multiple ro
1cdd0 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ws */.#define WH
1cde0 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
1cdf0 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f  K    0x0010 /* O
1ce00 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
1ce10 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
1ce20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1ce30 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20  E_OR_SUBCLAUSE  
1ce40 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f     0x0020 /* Pro
1ce50 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48  cessing a sub-WH
1ce60 45 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20  ERE as part of. 
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce90 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f       ** the OR o
1cea0 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a  ptimization  */.
1ceb0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52  #define WHERE_GR
1cec0 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30  OUPBY          0
1ced0 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42  x0040 /* pOrderB
1cee0 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52  y is really a GR
1cef0 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
1cf00 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1cf10 42 59 20 20 20 20 20 20 20 30 78 30 30 38 30 20  BY       0x0080 
1cf20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72  /* pOrderby is r
1cf30 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54  eally a DISTINCT
1cf40 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
1cf50 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49  ne WHERE_WANT_DI
1cf60 53 54 49 4e 43 54 20 20 20 20 30 78 30 31 30 30  STINCT    0x0100
1cf70 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e   /* All output n
1cf80 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69  eeds to be disti
1cf90 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nct */.#define W
1cfa0 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50  HERE_SORTBYGROUP
1cfb0 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20        0x0200 /* 
1cfc0 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57  Support sqlite3W
1cfd0 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a  hereIsSorted() *
1cfe0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1cff0 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20  SEEK_TABLE      
1d000 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f   0x0400 /* Do no
1d010 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e  t defer seeks on
1d020 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23   main table */.#
1d030 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1d040 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78  ERBY_LIMIT    0x
1d050 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b  0800 /* ORDERBY+
1d060 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e  LIMIT on the inn
1d070 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69  er loop */.#defi
1d080 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e  ne WHERE_SEEK_UN
1d090 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30  IQ_TABLE  0x1000
1d0a0 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72   /* Do not defer
1d0b0 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65   seeks if unique
1d0c0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1d0d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
1d0e0 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74     0x2000    not
1d0f0 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20   currently used 
1d100 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1d110 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20  _USE_LIMIT      
1d120 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20    0x4000 /* Use 
1d130 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73  the LIMIT in cos
1d140 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20  t estimates */. 
1d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d160 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1d170 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  8000    not curr
1d180 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f  ently used */../
1d190 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
1d1a0 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
1d1b0 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
1d1c0 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  nct().*/.#define
1d1d0 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1d1e0 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20  NOOP      0  /* 
1d1f0 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
1d200 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65   not used */.#de
1d210 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1d220 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20  NCT_UNIQUE    1 
1d230 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65   /* No duplicate
1d240 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
1d250 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45  RE_DISTINCT_ORDE
1d260 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20  RED   2  /* All 
1d270 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61  duplicates are a
1d280 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69  djacent */.#defi
1d290 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1d2a0 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f  T_UNORDERED 3  /
1d2b0 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65  * Duplicates are
1d2c0 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f   scattered */../
1d2d0 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65  *.** A NameConte
1d2e0 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e  xt defines a con
1d2f0 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f  text in which to
1d300 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61   resolve table a
1d310 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d  nd column.** nam
1d320 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74  es.  The context
1d330 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c   consists of a l
1d340 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74  ist of tables (t
1d350 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65  he pSrcList) fie
1d360 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74  ld and.** a list
1d370 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73   of named expres
1d380 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20  sion (pEList).  
1d390 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73  The named expres
1d3a0 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a  sion list may.**
1d3b0 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70   be NULL.  The p
1d3c0 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  Src corresponds 
1d3d0 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  to the FROM clau
1d3e0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f  se of a SELECT o
1d3f0 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c  r.** to the tabl
1d400 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  e being operated
1d410 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55   on by INSERT, U
1d420 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45  PDATE, or DELETE
1d430 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74  .  The.** pEList
1d440 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1d450 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
1d460 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69  f a SELECT and i
1d470 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74  s NULL for.** ot
1d480 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  her statements..
1d490 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  **.** NameContex
1d4a0 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64  ts can be nested
1d4b0 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e  .  When resolvin
1d4c0 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e  g names, the inn
1d4d0 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65  er-most.** conte
1d4e0 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
1d4f0 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
1d500 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1d510 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
1d520 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
1d530 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
1d540 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
1d550 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
1d560 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
1d570 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
1d580 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
1d590 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
1d5a0 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
1d5b0 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
1d5c0 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
1d5d0 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
1d5e0 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
1d5f0 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
1d600 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
1d610 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
1d620 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  d..**.** Each su
1d630 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
1d640 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
1d650 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
1d660 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
1d670 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
1d680 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
1d690 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
1d6a0 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
1d6b0 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1d6c0 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
1d6d0 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
1d6e0 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
1d6f0 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
1d700 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
1d710 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
1d720 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
1d730 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
1d740 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
1d750 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
1d760 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1d770 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
1d780 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
1d790 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
1d7a0 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  s */.  union {. 
1d7b0 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c     ExprList *pEL
1d7c0 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
1d7d0 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75  nal list of resu
1d7e0 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt-set columns *
1d7f0 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f 20 2a 70  /.    AggInfo *p
1d800 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e  AggInfo;   /* In
1d810 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1d820 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68  aggregates at th
1d830 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  is level */.    
1d840 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74 3b  Upsert *pUpsert;
1d850 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46 4c       /* ON CONFL
1d860 49 43 54 20 63 6c 61 75 73 65 20 69 6e 66 6f 72  ICT clause infor
1d870 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20 75  mation from an u
1d880 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e 43  psert */.  } uNC
1d890 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  ;.  NameContext 
1d8a0 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
1d8b0 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
1d8c0 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
1d8d0 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e  utermost */.  in
1d8e0 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
1d8f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d900 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62  names resolved b
1d910 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  y this context *
1d920 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
1d930 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1d940 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63  er of errors enc
1d950 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72  ountered while r
1d960 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a  esolving names *
1d970 2f 0a 20 20 69 6e 74 20 6e 63 46 6c 61 67 73 3b  /.  int ncFlags;
1d980 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
1d990 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c   or more NC_* fl
1d9a0 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ags defined belo
1d9b0 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  w */.  Select *p
1d9c0 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20 53  WinSelect;  /* S
1d9d0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1d9e0 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77 20 66  for any window f
1d9f0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
1da00 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1da10 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
1da20 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
1da30 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56  s field..**.** V
1da40 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
1da50 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69   (all checked vi
1da60 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
1da70 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20     NC_HasAgg    
1da80 3d 3d 20 53 46 5f 48 61 73 41 67 67 20 20 20 20  == SF_HasAgg    
1da90 3d 3d 20 45 50 5f 41 67 67 0a 2a 2a 20 20 20 20  == EP_Agg.**    
1daa0 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  NC_MinMaxAgg == 
1dab0 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  SF_MinMaxAgg == 
1dac0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1dad0 41 58 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 57  AX.**    NC_HasW
1dae0 69 6e 20 20 20 20 3d 3d 20 45 50 5f 57 69 6e 0a  in    == EP_Win.
1daf0 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  **.*/.#define NC
1db00 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30  _AllowAgg  0x000
1db10 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  01  /* Aggregate
1db20 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
1db30 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
1db40 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64  define NC_PartId
1db50 78 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20  x   0x00002  /* 
1db60 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1db70 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  g a partial inde
1db80 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69  x WHERE */.#defi
1db90 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
1dba0 30 78 30 30 30 30 34 20 20 2f 2a 20 54 72 75 65  0x00004  /* True
1dbb0 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20   if resolving a 
1dbc0 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
1dbd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1dbe0 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 30 38  nAggFunc 0x00008
1dbf0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
1dc00 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
1dc10 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
1dc20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
1dc30 73 41 67 67 20 20 20 20 30 78 30 30 30 31 30 20  sAgg    0x00010 
1dc40 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1dc50 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1dc60 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
1dc70 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20  ine NC_IdxExpr  
1dc80 20 30 78 30 30 30 32 30 20 20 2f 2a 20 54 72 75   0x00020  /* Tru
1dc90 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63  e if resolving c
1dca0 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45  olumns of CREATE
1dcb0 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
1dcc0 65 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30  e NC_VarSelect 0
1dcd0 78 30 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72  x00040  /* A cor
1dce0 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79  related subquery
1dcf0 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a   has been seen *
1dd00 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 45 4c  /.#define NC_UEL
1dd10 69 73 74 20 20 20 20 30 78 30 30 30 38 30 20 20  ist    0x00080  
1dd20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70  /* True if uNC.p
1dd30 45 4c 69 73 74 20 69 73 20 75 73 65 64 20 2a 2f  EList is used */
1dd40 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 41 67 67  .#define NC_UAgg
1dd50 49 6e 66 6f 20 20 30 78 30 30 31 30 30 20 20 2f  Info  0x00100  /
1dd60 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70 41  * True if uNC.pA
1dd70 67 67 49 6e 66 6f 20 69 73 20 75 73 65 64 20 2a  ggInfo is used *
1dd80 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 55 70  /.#define NC_UUp
1dd90 73 65 72 74 20 20 20 30 78 30 30 32 30 30 20 20  sert   0x00200  
1dda0 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70  /* True if uNC.p
1ddb0 55 70 73 65 72 74 20 69 73 20 75 73 65 64 20 2a  Upsert is used *
1ddc0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
1ddd0 4d 61 78 41 67 67 20 30 78 30 31 30 30 30 20 20  MaxAgg 0x01000  
1dde0 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65  /* min/max aggre
1ddf0 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65  gates seen.  See
1de00 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23   note above */.#
1de10 64 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65  define NC_Comple
1de20 78 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a 20  x   0x02000  /* 
1de30 54 72 75 65 20 69 66 20 61 20 66 75 6e 63 74 69  True if a functi
1de40 6f 6e 20 6f 72 20 73 75 62 71 75 65 72 79 20 73  on or subquery s
1de50 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1de60 43 5f 41 6c 6c 6f 77 57 69 6e 20 20 30 78 30 34  C_AllowWin  0x04
1de70 30 30 30 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66  000  /* Window f
1de80 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c  unctions are all
1de90 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65  owed here */.#de
1dea0 66 69 6e 65 20 4e 43 5f 48 61 73 57 69 6e 20 20  fine NC_HasWin  
1deb0 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4f 6e    0x08000  /* On
1dec0 65 20 6f 72 20 6d 6f 72 65 20 77 69 6e 64 6f 77  e or more window
1ded0 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
1dee0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
1def0 44 44 4c 20 20 20 20 20 30 78 31 30 30 30 30 20  DDL     0x10000 
1df00 20 2f 2a 20 52 65 73 6f 6c 76 69 6e 67 20 6e 61   /* Resolving na
1df10 6d 65 73 20 69 6e 20 61 20 43 52 45 41 54 45 20  mes in a CREATE 
1df20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 23 64 65  statement */.#de
1df30 66 69 6e 65 20 4e 43 5f 47 65 6e 43 6f 6c 20 20  fine NC_GenCol  
1df40 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 54 72    0x20000  /* Tr
1df50 75 65 20 66 6f 72 20 61 20 47 45 4e 45 52 41 54  ue for a GENERAT
1df60 45 44 20 41 4c 57 41 59 53 20 41 53 20 63 6c 61  ED ALWAYS AS cla
1df70 75 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  use */../*.** An
1df80 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1df90 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 62 6a 65 63   following objec
1dfa0 74 20 64 65 73 63 72 69 62 65 73 20 61 20 73 69  t describes a si
1dfb0 6e 67 6c 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ngle ON CONFLICT
1dfc0 0a 2a 2a 20 63 6c 61 75 73 65 20 69 6e 20 61 6e  .** clause in an
1dfd0 20 75 70 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 54   upsert..**.** T
1dfe0 68 65 20 70 55 70 73 65 72 74 54 61 72 67 65 74  he pUpsertTarget
1dff0 20 66 69 65 6c 64 20 69 73 20 6f 6e 6c 79 20 73   field is only s
1e000 65 74 20 69 66 20 74 68 65 20 4f 4e 20 43 4f 4e  et if the ON CON
1e010 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 63  FLICT clause inc
1e020 6c 75 64 65 73 0a 2a 2a 20 63 6f 6e 66 6c 69 63  ludes.** conflic
1e030 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e  t-target clause.
1e040 20 20 28 49 6e 20 22 4f 4e 20 43 4f 4e 46 4c 49    (In "ON CONFLI
1e050 43 54 28 61 2c 62 29 22 20 74 68 65 20 22 28 61  CT(a,b)" the "(a
1e060 2c 62 29 22 20 69 73 20 74 68 65 0a 2a 2a 20 63  ,b)" is the.** c
1e070 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63  onflict-target c
1e080 6c 61 75 73 65 2e 29 20 20 54 68 65 20 70 55 70  lause.)  The pUp
1e090 73 65 72 74 54 61 72 67 65 74 57 68 65 72 65 20  sertTargetWhere 
1e0a0 69 73 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 0a  is the optional.
1e0b0 2a 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  ** WHERE clause 
1e0c0 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79  used to identify
1e0d0 20 70 61 72 74 69 61 6c 20 75 6e 69 71 75 65 20   partial unique 
1e0e0 69 6e 64 65 78 65 73 2e 0a 2a 2a 0a 2a 2a 20 70  indexes..**.** p
1e0f0 55 70 73 65 72 74 53 65 74 20 69 73 20 74 68 65  UpsertSet is the
1e100 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 3d   list of column=
1e110 65 78 70 72 20 74 65 72 6d 73 20 6f 66 20 74 68  expr terms of th
1e120 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
1e130 6e 74 2e 20 0a 2a 2a 20 54 68 65 20 70 55 70 73  nt. .** The pUps
1e140 65 72 74 53 65 74 20 66 69 65 6c 64 20 69 73 20  ertSet field is 
1e150 4e 55 4c 4c 20 66 6f 72 20 61 20 4f 4e 20 43 4f  NULL for a ON CO
1e160 4e 46 4c 49 43 54 20 44 4f 20 4e 4f 54 48 49 4e  NFLICT DO NOTHIN
1e170 47 2e 20 20 54 68 65 0a 2a 2a 20 70 55 70 73 65  G.  The.** pUpse
1e180 72 74 57 68 65 72 65 20 69 73 20 74 68 65 20 57  rtWhere is the W
1e190 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1e1a0 74 68 65 20 55 50 44 41 54 45 20 61 6e 64 20 69  the UPDATE and i
1e1b0 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 0a 2a 2a  s NULL if the.**
1e1c0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
1e1d0 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 72   omitted..*/.str
1e1e0 75 63 74 20 55 70 73 65 72 74 20 7b 0a 20 20 45  uct Upsert {.  E
1e1f0 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74  xprList *pUpsert
1e200 54 61 72 67 65 74 3b 20 20 2f 2a 20 4f 70 74 69  Target;  /* Opti
1e210 6f 6e 61 6c 20 64 65 73 63 72 69 70 74 69 6f 6e  onal description
1e220 20 6f 66 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20   of conflicting 
1e230 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
1e240 2a 70 55 70 73 65 72 74 54 61 72 67 65 74 57 68  *pUpsertTargetWh
1e250 65 72 65 3b 20 2f 2a 20 57 48 45 52 45 20 63 6c  ere; /* WHERE cl
1e260 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
1e270 20 69 6e 64 65 78 20 74 61 72 67 65 74 73 20 2a   index targets *
1e280 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 55  /.  ExprList *pU
1e290 70 73 65 72 74 53 65 74 3b 20 20 20 20 20 2f 2a  psertSet;     /*
1e2a0 20 54 68 65 20 53 45 54 20 63 6c 61 75 73 65 20   The SET clause 
1e2b0 66 72 6f 6d 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c  from an ON CONFL
1e2c0 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a 20 20  ICT UPDATE */.  
1e2d0 45 78 70 72 20 2a 70 55 70 73 65 72 74 57 68 65  Expr *pUpsertWhe
1e2e0 72 65 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45  re;       /* WHE
1e2f0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 74 68  RE clause for th
1e300 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50  e ON CONFLICT UP
1e310 44 41 54 45 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  DATE */.  /* The
1e320 20 66 69 65 6c 64 73 20 61 62 6f 76 65 20 63 6f   fields above co
1e330 6d 70 72 69 73 65 20 74 68 65 20 70 61 72 73 65  mprise the parse
1e340 20 74 72 65 65 20 66 6f 72 20 74 68 65 20 75 70   tree for the up
1e350 73 65 72 74 20 63 6c 61 75 73 65 2e 0a 20 20 2a  sert clause..  *
1e360 2a 20 54 68 65 20 66 69 65 6c 64 73 20 62 65 6c  * The fields bel
1e370 6f 77 20 61 72 65 20 75 73 65 64 20 74 6f 20 74  ow are used to t
1e380 72 61 6e 73 66 65 72 20 69 6e 66 6f 72 6d 61 74  ransfer informat
1e390 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 49 4e 53  ion from the INS
1e3a0 45 52 54 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73  ERT.  ** process
1e3b0 69 6e 67 20 64 6f 77 6e 20 69 6e 74 6f 20 74 68  ing down into th
1e3c0 65 20 55 50 44 41 54 45 20 70 72 6f 63 65 73 73  e UPDATE process
1e3d0 69 6e 67 20 77 68 69 6c 65 20 67 65 6e 65 72 61  ing while genera
1e3e0 74 69 6e 67 20 63 6f 64 65 2e 0a 20 20 2a 2a 20  ting code..  ** 
1e3f0 55 70 73 65 72 74 20 6f 77 6e 73 20 74 68 65 20  Upsert owns the 
1e400 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64  memory allocated
1e410 20 61 62 6f 76 65 2c 20 62 75 74 20 6e 6f 74 20   above, but not 
1e420 74 68 65 20 6d 65 6d 6f 72 79 20 62 65 6c 6f 77  the memory below
1e430 2e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 55  . */.  Index *pU
1e440 70 73 65 72 74 49 64 78 3b 20 20 20 20 20 20 20  psertIdx;       
1e450 20 2f 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 74   /* Constraint t
1e460 68 61 74 20 70 55 70 73 65 72 74 54 61 72 67 65  hat pUpsertTarge
1e470 74 20 69 64 65 6e 74 69 66 69 65 73 20 2a 2f 0a  t identifies */.
1e480 20 20 53 72 63 4c 69 73 74 20 2a 70 55 70 73 65    SrcList *pUpse
1e490 72 74 53 72 63 3b 20 20 20 20 20 20 2f 2a 20 54  rtSrc;      /* T
1e4a0 61 62 6c 65 20 74 6f 20 62 65 20 75 70 64 61 74  able to be updat
1e4b0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 44  ed */.  int regD
1e4c0 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
1e4d0 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
1e4e0 74 65 72 20 68 6f 6c 64 69 6e 67 20 61 72 72 61  ter holding arra
1e4f0 79 20 6f 66 20 56 41 4c 55 45 53 20 2a 2f 0a 20  y of VALUES */. 
1e500 20 69 6e 74 20 69 44 61 74 61 43 75 72 3b 20 20   int iDataCur;  
1e510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1e520 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 20  dex of the data 
1e530 63 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  cursor */.  int 
1e540 69 49 64 78 43 75 72 3b 20 20 20 20 20 20 20 20  iIdxCur;        
1e550 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1e560 66 20 74 68 65 20 66 69 72 73 74 20 69 6e 64 65  f the first inde
1e570 78 20 63 75 72 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a  x cursor */.};..
1e580 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1e590 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1e5a0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1e5b0 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
1e5c0 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
1e5d0 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
1e5e0 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
1e5f0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1e600 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 68 65  **.** See the he
1e610 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20  ader comment on 
1e620 74 68 65 20 63 6f 6d 70 75 74 65 4c 69 6d 69 74  the computeLimit
1e630 52 65 67 69 73 74 65 72 73 28 29 20 72 6f 75 74  Registers() rout
1e640 69 6e 65 20 66 6f 72 20 61 0a 2a 2a 20 64 65 74  ine for a.** det
1e650 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f  ailed descriptio
1e660 6e 20 6f 66 20 74 68 65 20 6d 65 61 6e 69 6e 67  n of the meaning
1e670 20 6f 66 20 74 68 65 20 69 4c 69 6d 69 74 20 61   of the iLimit a
1e680 6e 64 20 69 4f 66 66 73 65 74 20 66 69 65 6c 64  nd iOffset field
1e690 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
1e6a0 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
1e6b0 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
1e6c0 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
1e6d0 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
1e6e0 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
1e6f0 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
1e700 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
1e710 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
1e720 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
1e730 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
1e740 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
1e750 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
1e760 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
1e770 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1e780 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
1e790 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
1e7a0 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
1e7b0 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
1e7c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
1e7d0 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
1e7e0 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
1e7f0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
1e800 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1e810 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
1e820 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
1e830 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
1e840 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
1e850 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
1e860 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
1e870 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
1e880 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
1e890 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1e8a0 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
1e8b0 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
1e8c0 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
1e8d0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1e8e0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1e8f0 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
1e900 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
1e910 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
1e920 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
1e930 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1e940 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
1e950 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
1e960 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
1e970 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45  EXCEPT */.  LogE
1e980 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20  st nSelectRow;  
1e990 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
1e9a0 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
1e9b0 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73   rows */.  u32 s
1e9c0 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
1e9d0 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
1e9e0 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
1e9f0 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
1ea00 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
1ea10 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
1ea20 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
1ea30 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 75 33  counters */.  u3
1ea40 32 20 73 65 6c 49 64 3b 20 20 20 20 20 20 20 20  2 selId;        
1ea50 20 20 20 20 20 2f 2a 20 55 6e 69 71 75 65 20 69       /* Unique i
1ea60 64 65 6e 74 69 66 69 65 72 20 6e 75 6d 62 65 72  dentifier number
1ea70 20 66 6f 72 20 74 68 69 73 20 53 45 4c 45 43 54   for this SELECT
1ea80 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70   */.  int addrOp
1ea90 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20  enEphm[2];   /* 
1eaa0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63  OP_OpenEphem opc
1eab0 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  odes related to 
1eac0 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20  this select */. 
1ead0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
1eae0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
1eaf0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1eb00 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
1eb10 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1eb20 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
1eb30 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
1eb40 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
1eb50 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
1eb60 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
1eb70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1eb80 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
1eb90 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1eba0 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
1ebb0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1ebc0 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
1ebd0 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
1ebe0 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
1ebf0 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
1ec00 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
1ec10 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b    Select *pNext;
1ec20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1ec30 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c   select to the l
1ec40 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  eft in a compoun
1ec50 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69  d */.  Expr *pLi
1ec60 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  mit;          /*
1ec70 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
1ec80 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
1ec90 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74  t used. */.  Wit
1eca0 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
1ecb0 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75      /* WITH clau
1ecc0 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  se attached to t
1ecd0 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e  his select. Or N
1ece0 55 4c 4c 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  ULL. */.#ifndef 
1ecf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
1ed00 4f 57 46 55 4e 43 0a 20 20 57 69 6e 64 6f 77 20  OWFUNC.  Window 
1ed10 2a 70 57 69 6e 3b 20 20 20 20 20 20 20 20 20 20  *pWin;          
1ed20 2f 2a 20 4c 69 73 74 20 6f 66 20 77 69 6e 64 6f  /* List of windo
1ed30 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  w functions */. 
1ed40 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 44 65 66   Window *pWinDef
1ed50 6e 3b 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  n;      /* List 
1ed60 6f 66 20 6e 61 6d 65 64 20 77 69 6e 64 6f 77 20  of named window 
1ed70 64 65 66 69 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23  definitions */.#
1ed80 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
1ed90 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1eda0 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
1edb0 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
1edc0 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
1edd0 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
1ede0 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1edf0 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63  nstraints (all c
1ee00 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72  hecked via asser
1ee10 74 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48  t()).**     SF_H
1ee20 61 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f  asAgg     == NC_
1ee30 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46  HasAgg.**     SF
1ee40 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e  _MinMaxAgg  == N
1ee50 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
1ee60 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  == SQLITE_FUNC_M
1ee70 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f  INMAX.**     SF_
1ee80 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48  FixedLimit == WH
1ee90 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f  ERE_USE_LIMIT.*/
1eea0 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
1eeb0 69 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30  inct       0x000
1eec0 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
1eed0 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
1eee0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1eef0 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78  ll            0x
1ef00 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64  00002  /* Includ
1ef10 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f  es the ALL keywo
1ef20 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  rd */.#define SF
1ef30 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
1ef40 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e  0x00004  /* Iden
1ef50 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
1ef60 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
1ef70 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
1ef80 74 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20  te      0x00008 
1ef90 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1efa0 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20   functions or a 
1efb0 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1efc0 69 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20  ine SF_HasAgg   
1efd0 20 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f        0x00010  /
1efe0 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
1eff0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
1f000 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
1f010 73 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30  sEphemeral  0x00
1f020 30 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65  020  /* Uses the
1f030 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
1f040 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
1f050 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
1f060 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73     0x00040  /* s
1f070 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
1f080 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
1f090 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
1f0a0 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
1f0b0 20 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f   0x00080  /* FRO
1f0c0 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
1f0d0 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
1f0e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1f0f0 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78  ompound       0x
1f100 30 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00100  /* Part o
1f110 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
1f120 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
1f130 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
1f140 30 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74  0x00200  /* Synt
1f150 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
1f160 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
1f170 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61  efine SF_MultiVa
1f180 6c 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20  lue     0x00400 
1f190 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45   /* Single VALUE
1f1a0 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74  S term with mult
1f1b0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1f1c0 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
1f1d0 6f 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20  om     0x00800  
1f1e0 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
1f1f0 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
1f200 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1f210 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20  e SF_MinMaxAgg  
1f220 20 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20      0x01000  /* 
1f230 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69  Aggregate contai
1f240 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61  ning min() or ma
1f250 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  x() */.#define S
1f260 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20  F_Recursive     
1f270 20 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65   0x02000  /* The
1f280 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20   recursive part 
1f290 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43  of a recursive C
1f2a0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  TE */.#define SF
1f2b0 5f 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20  _FixedLimit     
1f2c0 30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c  0x04000  /* nSel
1f2d0 65 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20  ectRow set by a 
1f2e0 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a  constant LIMIT *
1f2f0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79  /.#define SF_May
1f300 62 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38  beConvert   0x08
1f310 30 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e  000  /* Need con
1f320 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1f330 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1f340 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e  /.#define SF_Con
1f350 76 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30  verted      0x10
1f360 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65  000  /* By conve
1f370 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1f380 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1f390 23 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75  #define SF_Inclu
1f3a0 64 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30  deHidden  0x2000
1f3b0 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69  0  /* Include hi
1f3c0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  dden columns in 
1f3d0 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e  output */.#defin
1f3e0 65 20 53 46 5f 43 6f 6d 70 6c 65 78 52 65 73 75  e SF_ComplexResu
1f3f0 6c 74 20 20 30 78 34 30 30 30 30 20 20 2f 2a 20  lt  0x40000  /* 
1f400 52 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20  Result contains 
1f410 73 75 62 71 75 65 72 79 20 6f 72 20 66 75 6e 63  subquery or func
1f420 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
1f430 53 46 5f 57 68 65 72 65 42 65 67 69 6e 20 20 20  SF_WhereBegin   
1f440 20 20 30 78 38 30 30 30 30 20 20 2f 2a 20 52 65    0x80000  /* Re
1f450 61 6c 6c 79 20 61 20 57 68 65 72 65 42 65 67 69  ally a WhereBegi
1f460 6e 28 29 20 63 61 6c 6c 2e 20 20 44 65 62 75 67  n() call.  Debug
1f470 20 4f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   Only */../*.** 
1f480 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
1f490 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
1f4a0 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
1f4b0 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
1f4c0 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
1f4d0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1f4e0 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
1f4f0 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
1f500 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
1f510 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
1f520 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
1f530 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1f540 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
1f550 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
1f560 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1f570 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69          identifi
1f580 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44  ed by pDest->iSD
1f590 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
1f5a0 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1f5b0 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66  Remove results f
1f5c0 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72  rom the temporar
1f5d0 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69  y index pDest->i
1f5e0 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1f5f0 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20    SRT_Exists    
1f600 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d    Store a 1 in m
1f610 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74  emory cell pDest
1f620 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65  ->iSDParm if the
1f630 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20   result.**      
1f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f650 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e  et is not empty.
1f660 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1f670 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77  iscard     Throw
1f680 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61   the results awa
1f690 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64  y.  This is used
1f6a0 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20   by SELECT.**   
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6c0 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
1f6d0 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f  hin triggers who
1f6e0 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20  se only purpose 
1f6f0 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  is.**           
1f700 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69            the si
1f710 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75  de-effects of fu
1f720 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41  nctions..**.** A
1f730 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1f740 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f  are free to igno
1f750 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42  re their ORDER B
1f760 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20  Y clause. Those 
1f770 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d  that.** follow m
1f780 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52  ust honor the OR
1f790 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1f7a0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74  *.**     SRT_Out
1f7b0 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74  put      Generat
1f7c0 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75  e a row of outpu
1f7d0 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  t (using the OP_
1f7e0 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20  ResultRow.**    
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f800 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63   opcode) for eac
1f810 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73  h row in the res
1f820 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20  ult set..**.**  
1f830 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20     SRT_Mem      
1f840 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66     Only valid if
1f850 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
1f860 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a   single column..
1f870 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1f880 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65         Store the
1f890 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66   first column of
1f8a0 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c   the first resul
1f8b0 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  t row.**        
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20               in 
1f8d0 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1f8e0 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61  iSDParm then aba
1f8f0 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a  ndon the rest.**
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f910 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72       of the quer
1f920 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61  y.  This destina
1f930 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49  tion implies "LI
1f940 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20  MIT 1"..**.**   
1f950 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20    SRT_Set       
1f960 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73    The result mus
1f970 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f  t be a single co
1f980 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63  lumn.  Store eac
1f990 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  h.**            
1f9a0 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20           row of 
1f9b0 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65  result as the ke
1f9c0 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74  y in table pDest
1f9d0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9f0 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
1fa00 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
1fa10 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
1fa20 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
1fa30 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1fa40 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
1fa50 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
1fa60 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
1fa70 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
1fa80 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
1fa90 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1faa0 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
1fab0 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
1fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1fad0 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
1fae0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
1faf0 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
1fb20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
1fb30 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
1fb40 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
1fb50 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
1fb60 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
1fb70 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1fb80 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
1fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fba0 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
1fbb0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1fbc0 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
1fbd0 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
1fbe0 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
1fbf0 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc10 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
1fc20 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
1fc30 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
1fc40 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
1fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1fc60 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
1fc70 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1fc80 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1fc90 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
1fca0 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
1fcb0 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
1fcc0 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
1fcd0 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
1fce0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1fcf0 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
1fd00 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
1fd10 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
1fd20 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
1fd30 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1fd40 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1fd50 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1fd60 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
1fd70 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
1fd80 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
1fd90 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
1fda0 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
1fdc0 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
1fdd0 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
1fde0 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe00 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
1fe10 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
1fe20 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
1fe30 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1fe40 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
1fe50 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
1fe60 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1fe70 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
1fe80 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
1fe90 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1fea0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fec0 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
1fed0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1fee0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1fef0 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1ff00 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
1ff10 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
1ff20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
1ff30 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
1ff40 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ff50 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
1ff60 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
1ff70 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
1ff80 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
1ff90 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1ffa0 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1ffb0 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1ffc0 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffe0 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
1fff0 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
20000 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
20010 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
20020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20030 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
20040 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
20050 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
20060 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
20070 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
20080 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
20090 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
200a0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
200b0 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
200c0 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
200d0 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
200e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200f0 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
20100 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
20110 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
20120 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
20130 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
20140 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
20150 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
20160 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
20170 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
20180 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
20190 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
201a0 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
201b0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
201c0 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
201d0 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
201e0 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
201f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
20200 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
20210 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
20220 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
20230 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
20240 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
20250 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
20260 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
20270 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
20280 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
20290 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
202a0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
202b0 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
202c0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
202d0 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
202e0 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
202f0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
20300 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
20310 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
20320 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
20330 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
20340 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
20350 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
20360 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
20370 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
20380 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
20390 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
203a0 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
203b0 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
203c0 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
203d0 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
203e0 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
203f0 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
20400 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
20410 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
20420 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
20430 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
20440 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
20450 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
20460 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
20470 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
20480 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
20490 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
204a0 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
204b0 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
204c0 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
204d0 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
204e0 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
204f0 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
20500 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
20510 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
20520 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
20530 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
20540 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
20550 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
20560 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
20570 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
20580 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
20590 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
205a0 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
205b0 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
205c0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
205d0 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
205e0 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
205f0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
20600 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
20610 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
20620 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
20630 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
20640 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61           /* A pa
20650 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
20660 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
20670 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
20680 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
20690 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
206a0 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
206b0 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
206c0 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
206d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
206e0 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
206f0 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63  allocated */.  c
20700 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20 20  har *zAffSdst;  
20710 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
20720 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
20730 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78  =SRT_Set */.  Ex
20740 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
20750 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
20760 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
20770 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
20780 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
20790 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
207a0 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
207b0 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
207c0 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
207d0 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73  REMENT.** tables
207e0 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
207f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
20800 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
20810 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
20820 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
20830 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
20840 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
20850 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
20860 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
20870 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
20880 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
20890 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
208a0 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
208b0 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
208c0 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
208d0 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68 69  s are done withi
208e0 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
208f0 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
20900 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
20910 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
20920 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
20930 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
20940 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
20950 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
20960 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
20970 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
20980 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
20990 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
209a0 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
209b0 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
209c0 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
209d0 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
209e0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
209f0 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
20a00 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
20a10 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
20a20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20a30 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
20a40 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
20a50 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
20a60 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
20a70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
20a80 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
20a90 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
20aa0 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
20ab0 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e  *.** At least on
20ac0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
20ad0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
20ae0 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64  cture is created
20af0 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69   for each.** tri
20b00 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65  gger that may be
20b10 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72   fired while par
20b20 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  sing an INSERT, 
20b30 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
20b40 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41  .** statement. A
20b50 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20  ll such objects 
20b60 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
20b70 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  e linked list he
20b80 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65  aded at.** Parse
20b90 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64  .pTriggerPrg and
20ba0 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74   deleted once st
20bb0 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74  atement compilat
20bc0 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ion has been.** 
20bd0 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  completed..**.**
20be0 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67   A Vdbe sub-prog
20bf0 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ram that impleme
20c00 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64  nts the body and
20c10 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
20c20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67  trigger.** Trigg
20c30 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20  erPrg.pTrigger, 
20c40 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75  assuming a defau
20c50 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  lt ON CONFLICT c
20c60 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67  lause of.** Trig
20c70 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69  gerPrg.orconf, i
20c80 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
20c90 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67  TriggerPrg.pProg
20ca0 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  ram variable..**
20cb0 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67   The Parse.pTrig
20cc0 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65  gerPrg list neve
20cd0 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65  r contains two e
20ce0 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
20cf0 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66  same.** values f
20d00 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72  or both pTrigger
20d10 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a   and orconf..**.
20d20 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72  ** The TriggerPr
20d30 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61  g.aColmask[0] va
20d40 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
20d50 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a   a mask of old.*
20d60 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65   columns.** acce
20d70 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20  ssed (or set to 
20d80 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66  0 for triggers f
20d90 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  ired as a result
20da0 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74   of INSERT.** st
20db0 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
20dc0 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
20dd0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
20de0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
20df0 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
20e00 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
20e10 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
20e20 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
20e30 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
20e40 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
20e50 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
20e60 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
20e70 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
20e80 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
20e90 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
20ea0 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
20eb0 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
20ec0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
20ed0 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
20ee0 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
20ef0 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
20f00 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
20f10 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
20f20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
20f30 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
20f40 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
20f50 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
20f60 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
20f70 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
20f80 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
20f90 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
20fa0 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
20fb0 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
20fc0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
20fd0 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
20fe0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
20ff0 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  30.  typedef uns
21000 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61  igned char yDbMa
21010 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41  sk[(SQLITE_MAX_A
21020 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23  TTACHED+9)/8];.#
21030 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
21040 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
21050 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29  [(I)/8]&(1<<((I)
21060 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  &7)))!=0).# defi
21070 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
21080 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29        memset((M)
21090 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20  ,0,sizeof(M)).# 
210a0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
210b0 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49  (M,I)     (M)[(I
210c0 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37  )/8]|=(1<<((I)&7
210d0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
210e0 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73  skAllZero(M)   s
210f0 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
21100 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20  ero(M).# define 
21110 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
21120 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73     (sqlite3DbMas
21130 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a  kAllZero(M)==0).
21140 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
21150 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
21160 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44  Mask;.# define D
21170 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
21180 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61    (((M)&(((yDbMa
21190 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29  sk)1)<<(I)))!=0)
211a0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
211b0 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29  Zero(M)      (M)
211c0 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
211d0 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
211e0 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31  M)|=(((yDbMask)1
211f0 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65  )<<(I)).# define
21200 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
21210 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66  )   (M)==0.# def
21220 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
21230 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65  o(M)   (M)!=0.#e
21240 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53  ndif../*.** An S
21250 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78  QL parser contex
21260 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68  t.  A copy of th
21270 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
21280 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
21290 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  * the parser and
212a0 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74   down into all t
212b0 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e  he parser action
212c0 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
212d0 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72  r to.** carry ar
212e0 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ound information
212f0 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20   that is global 
21300 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  to the entire pa
21310 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  rse..**.** The s
21320 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69  tructure is divi
21330 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72  ded into two par
21340 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61  ts.  When the pa
21350 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a  rser and code.**
21360 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74   generate call t
21370 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73  hemselves recurs
21380 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74  ively, the first
21390 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72   part of the str
213a0 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e  ucture.** is con
213b0 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65  stant but the se
213c0 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73  cond part is res
213d0 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  et at the beginn
213e0 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a  ing and end of.*
213f0 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
21400 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62  ..**.** The nTab
21410 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c  leLock and aTabl
21420 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20  eLock variables 
21430 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66  are only used if
21440 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
21450 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20  e.** feature is 
21460 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
21470 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
21480 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
21490 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
214a0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
214b0 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
214c0 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
214d0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
214e0 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
214f0 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
21500 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
21510 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
21520 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
21530 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
21540 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
21550 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
21560 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
21570 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
21580 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
21590 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
215a0 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
215b0 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
215c0 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
215d0 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
215e0 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
215f0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
21600 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
21610 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78  urn code from ex
21620 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ecution */.  u8 
21630 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
21640 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
21650 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
21660 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
21670 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
21680 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
21690 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
216a0 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
216b0 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
216c0 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
216d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
216e0 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
216f0 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
21700 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
21710 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
21720 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21730 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
21740 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
21750 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
21760 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
21770 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
21780 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
21790 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
217a0 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
217b0 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
217c0 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
217d0 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
217e0 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
217f0 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f  on */.  u8 hasCo
21800 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20  mpound;      /* 
21810 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63  Need to invoke c
21820 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
21830 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
21840 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74   */.  u8 okConst
21850 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b  Factor;    /* OK
21860 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63   to factor out c
21870 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38  onstants */.  u8
21880 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64   disableLookasid
21890 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  e; /* Number of 
218a0 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20  times lookaside 
218b0 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65  has been disable
218c0 64 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  d */.  u8 disabl
218d0 65 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 44  eVtab;      /* D
218e0 69 73 61 62 6c 65 20 61 6c 6c 20 76 69 72 74 75  isable all virtu
218f0 61 6c 20 74 61 62 6c 65 73 20 66 6f 72 20 74 68  al tables for th
21900 69 73 20 70 61 72 73 65 20 2a 2f 0a 20 20 69 6e  is parse */.  in
21910 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
21920 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
21930 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
21940 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
21950 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
21960 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
21970 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
21980 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
21990 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
219a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
219b0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
219c0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
219d0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
219e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
219f0 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
21a00 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
21a10 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
21a20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21a30 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
21a40 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
21a50 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f  /.  int szOpAllo
21a60 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65  c;       /* Byte
21a70 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  s of memory spac
21a80 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  e allocated for 
21a90 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
21aa0 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20 20  int iSelfTab;   
21ab0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 61 73       /* Table as
21ac0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 6e  sociated with an
21ad0 20 69 6e 64 65 78 20 6f 6e 20 65 78 70 72 2c 20   index on expr, 
21ae0 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20  or negative.    
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b00 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 62 61 73     ** of the bas
21b10 65 20 72 65 67 69 73 74 65 72 20 64 75 72 69 6e  e register durin
21b20 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69  g check-constrai
21b30 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74  nt eval */.  int
21b40 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20   nLabel;        
21b50 20 20 2f 2a 20 54 68 65 20 2a 6e 65 67 61 74 69    /* The *negati
21b60 76 65 2a 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  ve* of the numbe
21b70 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
21b80 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
21b90 41 6c 6c 6f 63 3b 20 20 20 20 20 2f 2a 20 4e 75  Alloc;     /* Nu
21ba0 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 69 6e  mber of slots in
21bb0 20 61 4c 61 62 65 6c 20 2a 2f 0a 20 20 69 6e 74   aLabel */.  int
21bc0 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20   *aLabel;       
21bd0 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f    /* Space to ho
21be0 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f  ld the labels */
21bf0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f  .  ExprList *pCo
21c00 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74  nstExpr;/* Const
21c10 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
21c20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74  */.  Token const
21c30 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d  raintName;/* Nam
21c40 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
21c50 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65  int currently be
21c60 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ing parsed */.  
21c70 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
21c80 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
21c90 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
21ca0 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
21cb0 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
21cc0 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
21cd0 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
21ce0 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
21cf0 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
21d00 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20  regRowid;       
21d10 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
21d20 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52  ding rowid of CR
21d30 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79  EATE TABLE entry
21d40 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f   */.  int regRoo
21d50 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  t;         /* Re
21d60 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
21d70 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
21d80 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20  for new objects 
21d90 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67  */.  int nMaxArg
21da0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  ;         /* Max
21db0 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20   args passed to 
21dc0 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79  user function by
21dd0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
21de0 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
21df0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21e00 20 6f 66 20 53 45 4c 45 43 54 20 73 74 6d 74 73   of SELECT stmts
21e10 2e 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 53 65  . Counter for Se
21e20 6c 65 63 74 2e 73 65 6c 49 64 20 2a 2f 0a 23 69  lect.selId */.#i
21e30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21e40 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
21e50 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b   int nTableLock;
21e60 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21e70 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54  r of locks in aT
21e80 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61  ableLock */.  Ta
21e90 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c  bleLock *aTableL
21ea0 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64  ock; /* Required
21eb0 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72   table locks for
21ec0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
21ed0 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41  de */.#endif.  A
21ee0 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e  utoincInfo *pAin
21ef0 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  c;  /* Informati
21f00 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43  on about AUTOINC
21f10 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20  REMENT counters 
21f20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
21f30 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
21f40 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
21f50 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
21f60 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
21f70 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
21f80 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
21f90 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
21fa0 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 50 61 72  ded for */.  Par
21fb0 73 65 20 2a 70 50 61 72 65 6e 74 50 61 72 73 65  se *pParentParse
21fc0 3b 20 2f 2a 20 50 61 72 65 6e 74 20 70 61 72 73  ; /* Parent pars
21fd0 65 72 20 69 66 20 74 68 69 73 20 70 61 72 73 65  er if this parse
21fe0 72 20 69 73 20 6e 65 73 74 65 64 20 2a 2f 0a 20  r is nested */. 
21ff0 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
22000 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
22010 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42 74 72   of OP_CreateBtr
22020 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  ee opcode on CRE
22030 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
22040 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
22050 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
22060 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
22070 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
22080 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
22090 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
220a0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
220b0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
220c0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
220d0 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
220e0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
220f0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
22100 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
22110 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
22120 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
22130 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
22140 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
22150 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
22160 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
22170 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
22180 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
22190 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
221a0 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
221b0 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
221c0 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
221d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
221e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
221f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22210 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73  ****.  ** Fields
22220 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69   above must be i
22230 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65  nitialized to ze
22240 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20  ro.  The fields 
22250 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a  that follow,.  *
22260 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65  * down to the be
22270 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72  ginning of the r
22280 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e  ecursive section
22290 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  , do not need to
222a0 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c   be.  ** initial
222b0 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69 6c  ized as they wil
222c0 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65 20  l be set before 
222d0 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65  being used.  The
222e0 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a   boundary is.  *
222f0 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
22300 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
22310 54 65 6d 70 52 65 67 29 2e 0a 20 20 2a 2a 2a 2a  TempReg)..  ****
22320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22360 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 61  ******/..  int a
22370 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20  TempReg[8];     
22380 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
22390 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
223a0 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
223b0 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
223c0 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e  ;       /* Token
223d0 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
223e0 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
223f0 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  name */..  /****
22400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22440 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
22450 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
22460 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
22470 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
22480 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
22490 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
224a0 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
224b0 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
224c0 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
224d0 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
224e0 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
224f0 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e  Parse,sLastToken
22500 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74 54 6f  ) so the sLastTo
22510 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74 20 62  ken field must b
22520 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72 73 74  e the.  ** first
22530 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65   field in the re
22540 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
22550 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
22560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
22590 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54  **********/..  T
225a0 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
225b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
225c0 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
225d0 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b  */.  ynVar nVar;
225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
225f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
22600 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
22610 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
22620 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
22630 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
22640 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
22650 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
22660 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65  RY KEY */.  u8 e
22670 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
22680 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
22690 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
226a0 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
226b0 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 20 21  e query */.#if !
226c0 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
226d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
226e0 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  E) && defined(SQ
226f0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
22700 41 42 4c 45 29 29 0a 20 20 75 38 20 65 50 61 72  ABLE)).  u8 ePar
22710 73 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  seMode;         
22720 20 20 20 2f 2a 20 50 41 52 53 45 5f 4d 4f 44 45     /* PARSE_MODE
22730 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 20 2a 2f  _XXX constant */
22740 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
22750 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
22760 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
22770 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
22780 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
22790 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  f virtual tables
227a0 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64   to lock */.#end
227b0 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  if.  int nHeight
227c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
227d0 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
227e0 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
227f0 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
22800 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
22810 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
22820 69 6e 74 20 61 64 64 72 45 78 70 6c 61 69 6e 3b  int addrExplain;
22830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64            /* Add
22840 72 65 73 73 20 6f 66 20 63 75 72 72 65 6e 74 20  ress of current 
22850 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  OP_Explain opcod
22860 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c  e */.#endif.  VL
22870 69 73 74 20 2a 70 56 4c 69 73 74 3b 20 20 20 20  ist *pVList;    
22880 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69          /* Mappi
22890 6e 67 20 62 65 74 77 65 65 6e 20 76 61 72 69 61  ng between varia
228a0 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75  ble names and nu
228b0 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20  mbers */.  Vdbe 
228c0 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20  *pReprepare;    
228d0 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67       /* VM being
228e0 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c   reprepared (sql
228f0 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29  ite3Reprepare())
22900 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
22910 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20   *zTail;        
22920 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20  /* All SQL text 
22930 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65  past the last se
22940 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a  micolon parsed *
22950 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54  /.  Table *pNewT
22960 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  able;         /*
22970 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63   A table being c
22980 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
22990 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
229a0 49 6e 64 65 78 20 2a 70 4e 65 77 49 6e 64 65 78  Index *pNewIndex
229b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
229c0 69 6e 64 65 78 20 62 65 69 6e 67 20 63 6f 6e 73  index being cons
229d0 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
229e0 45 20 49 4e 44 45 58 2e 0a 20 20 20 20 20 20 20  E INDEX..       
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a00 20 20 20 20 20 2a 2a 20 41 6c 73 6f 20 75 73 65       ** Also use
22a10 64 20 74 6f 20 68 6f 6c 64 20 72 65 64 75 6e 64  d to hold redund
22a20 61 6e 74 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  ant UNIQUE const
22a30 72 61 69 6e 74 73 0a 20 20 20 20 20 20 20 20 20  raints.         
22a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a50 20 20 20 2a 2a 20 64 75 72 69 6e 67 20 61 20 52     ** during a R
22a60 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 2a 2f 0a  ENAME COLUMN */.
22a70 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54    Trigger *pNewT
22a80 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54  rigger;     /* T
22a90 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e  rigger under con
22aa0 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41  struct by a CREA
22ab0 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20  TE TRIGGER */.  
22ac0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
22ad0 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65  hContext; /* The
22ae0 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74   6th parameter t
22af0 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c  o db->xAuth call
22b00 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66  backs */.#ifndef
22b10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
22b20 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65  TUALTABLE.  Toke
22b30 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  n sArg;         
22b40 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
22b50 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75  e text of a modu
22b60 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20  le argument */. 
22b70 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c   Table **apVtabL
22b80 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f  ock;       /* Po
22b90 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c  inter to virtual
22ba0 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20   tables needing 
22bb0 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  locking */.#endi
22bc0 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62  f.  Table *pZomb
22bd0 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  ieTab;        /*
22be0 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f   List of Table o
22bf0 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65  bjects to delete
22c00 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20   after code gen 
22c10 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
22c20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f  *pTriggerPrg;  /
22c30 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
22c40 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20   coded triggers 
22c50 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
22c60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
22c70 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20 63  * Current WITH c
22c80 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a  lause, or NULL *
22c90 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 54  /.  With *pWithT
22ca0 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a  oFree;        /*
22cb0 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48 20   Free this WITH 
22cc0 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e  object at the en
22cd0 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a  d of the parse *
22ce0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
22cf0 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
22d00 0a 20 20 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 2a  .  RenameToken *
22d10 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 2f 2a 20  pRename;     /* 
22d20 54 6f 6b 65 6e 73 20 73 75 62 6a 65 63 74 20 74  Tokens subject t
22d30 6f 20 72 65 6e 61 6d 69 6e 67 20 62 79 20 41 4c  o renaming by AL
22d40 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a 23 65 6e  TER TABLE */.#en
22d50 64 69 66 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20  dif.};..#define 
22d60 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d 41  PARSE_MODE_NORMA
22d70 4c 20 20 20 20 20 20 20 20 30 0a 23 64 65 66 69  L        0.#defi
22d80 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45  ne PARSE_MODE_DE
22d90 43 4c 41 52 45 5f 56 54 41 42 20 20 31 0a 23 64  CLARE_VTAB  1.#d
22da0 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45  efine PARSE_MODE
22db0 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 20 32  _RENAME_COLUMN 2
22dc0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d  .#define PARSE_M
22dd0 4f 44 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45  ODE_RENAME_TABLE
22de0 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73    3../*.** Sizes
22df0 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f 66   and pointers of
22e00 20 76 61 72 69 6f 75 73 20 70 61 72 74 73 20 6f   various parts o
22e10 66 20 74 68 65 20 50 61 72 73 65 20 6f 62 6a 65  f the Parse obje
22e20 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50  ct..*/.#define P
22e30 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73  ARSE_HDR_SZ offs
22e40 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65 6d 70  etof(Parse,aTemp
22e50 52 65 67 29 20 2f 2a 20 52 65 63 75 72 73 69 76  Reg) /* Recursiv
22e60 65 20 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43  e part w/o aColC
22e70 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50  ache*/.#define P
22e80 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20  ARSE_RECURSE_SZ 
22e90 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73  offsetof(Parse,s
22ea0 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a  LastToken)    /*
22eb0 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20   Recursive part 
22ec0 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  */.#define PARSE
22ed0 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66  _TAIL_SZ (sizeof
22ee0 28 50 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45  (Parse)-PARSE_RE
22ef0 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e  CURSE_SZ) /* Non
22f00 2d 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20  -recursive part 
22f10 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45  */.#define PARSE
22f20 5f 54 41 49 4c 28 58 29 20 28 28 28 63 68 61 72  _TAIL(X) (((char
22f30 2a 29 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43  *)(X))+PARSE_REC
22f40 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69  URSE_SZ)  /* Poi
22f50 6e 74 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a  nter to tail */.
22f60 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
22f70 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  ue if currently 
22f80 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65  inside an sqlite
22f90 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
22fa0 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66   call..*/.#ifdef
22fb0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
22fc0 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66  TUALTABLE.  #def
22fd0 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
22fe0 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  TAB 0.#else.  #d
22ff0 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
23000 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 65  _VTAB (pParse->e
23010 50 61 72 73 65 4d 6f 64 65 3d 3d 50 41 52 53 45  ParseMode==PARSE
23020 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54  _MODE_DECLARE_VT
23030 41 42 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  AB).#endif..#if 
23040 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
23050 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a  MIT_ALTERTABLE).
23060 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52 45 4e    #define IN_REN
23070 41 4d 45 5f 4f 42 4a 45 43 54 20 30 0a 23 65 6c  AME_OBJECT 0.#el
23080 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
23090 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 28 70  RENAME_OBJECT (p
230a0 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64  Parse->eParseMod
230b0 65 3e 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45  e>=PARSE_MODE_RE
230c0 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 0a 23 65 6e  NAME_COLUMN).#en
230d0 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
230e0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
230f0 54 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65  TUALTABLE) && de
23100 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
23110 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a 20 20  T_ALTERTABLE).  
23120 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45 43 49  #define IN_SPECI
23130 41 4c 5f 50 41 52 53 45 20 30 0a 23 65 6c 73 65  AL_PARSE 0.#else
23140 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50  .  #define IN_SP
23150 45 43 49 41 4c 5f 50 41 52 53 45 20 28 70 50 61  ECIAL_PARSE (pPa
23160 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65 21  rse->eParseMode!
23170 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52 4d  =PARSE_MODE_NORM
23180 41 4c 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  AL).#endif../*.*
23190 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
231a0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
231b0 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
231c0 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
231d0 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
231e0 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
231f0 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
23200 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
23210 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
23220 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
23230 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
23240 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
23250 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
23260 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
23270 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
23280 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
23290 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
232a0 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
232b0 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
232c0 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
232d0 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
232e0 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
232f0 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  codes..**.** Val
23300 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
23310 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
23320 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50  ert()):.**    OP
23330 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
23340 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
23350 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50  _LENGTH.**    OP
23360 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20  FLAG_TYPEOFARG  
23370 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
23380 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50  _TYPEOF.**    OP
23390 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
233a0 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c    == BTREE_BULKL
233b0 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  OAD.**    OPFLAG
233c0 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d  _SEEKEQ       ==
233d0 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a   BTREE_SEEK_EQ.*
233e0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44  *    OPFLAG_FORD
233f0 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45  ELETE    == BTRE
23400 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20  E_FORDELETE.**  
23410 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53    OPFLAG_SAVEPOS
23420 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53  ITION == BTREE_S
23430 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20  AVEPOSITION.**  
23440 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45    OPFLAG_AUXDELE
23450 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41  TE    == BTREE_A
23460 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66  UXDELETE.*/.#def
23470 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  ine OPFLAG_NCHAN
23480 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  GE       0x01   
23490 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53   /* OP_Insert: S
234a0 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
234b0 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20  >nChange */.    
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234e0 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e   /* Also used in
234f0 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20   P2 (not P5) of 
23500 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65  OP_Delete */.#de
23510 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48  fine OPFLAG_NOCH
23520 4e 47 20 20 20 20 20 20 20 20 30 78 30 31 20 20  NG        0x01  
23530 20 20 2f 2a 20 4f 50 5f 56 43 6f 6c 75 6d 6e 20    /* OP_VColumn 
23540 6e 6f 63 68 61 6e 67 65 20 66 6f 72 20 55 50 44  nochange for UPD
23550 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
23560 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20  PFLAG_EPHEM     
23570 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
23580 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65  P_Column: Epheme
23590 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b  ral output is ok
235a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
235b0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20  AG_LASTROWID    
235c0 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74 20   0x20    /* Set 
235d0 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
235e0 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
235f0 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
23600 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20  TE      0x04    
23610 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
23620 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
23630 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
23640 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20  FLAG_APPEND     
23650 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68     0x08    /* Th
23660 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  is is likely to 
23670 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a  be an append */.
23680 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55  #define OPFLAG_U
23690 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31  SESEEKRESULT 0x1
236a0 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61  0    /* Try to a
236b0 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42  void a seek in B
236c0 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a  treeInsert() */.
236d0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
236e0 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34  SNOOP        0x4
236f0 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  0    /* OP_Delet
23700 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74  e does pre-updat
23710 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  e-hook only */.#
23720 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
23730 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
23740 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
23750 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
23760 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
23770 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
23780 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
23790 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
237a0 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
237b0 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
237c0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
237d0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
237e0 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
237f0 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
23800 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
23810 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
23820 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
23830 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73  Open** cursor us
23840 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20  es EQ seek only 
23850 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
23860 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20  G_FORDELETE     
23870 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x08    /* OP_Op
23880 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54  en should use BT
23890 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f  REE_FORDELETE */
238a0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
238b0 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
238c0 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  10    /* P2 to O
238d0 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
238e0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
238f0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
23900 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
23910 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
23920 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
23930 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mutation */.#def
23940 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  ine OPFLAG_SAVEP
23950 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20  OSITION  0x02   
23960 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e   /* OP_Delete/In
23970 73 65 72 74 3a 20 73 61 76 65 20 63 75 72 73 6f  sert: save curso
23980 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65  r pos */.#define
23990 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
239a0 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a  E     0x04    /*
239b0 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65   OP_Delete: inde
239c0 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f 70  x in a DELETE op
239d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
239e0 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20  AG_NOCHNG_MAGIC 
239f0 20 30 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d   0x6d    /* OP_M
23a00 61 6b 65 52 65 63 6f 72 64 3a 20 73 65 72 69 61  akeRecord: seria
23a10 6c 74 79 70 65 20 31 30 20 69 73 20 6f 6b 20 2a  ltype 10 is ok *
23a20 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72  /../*. * Each tr
23a30 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  igger present in
23a40 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
23a50 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61  hema is stored a
23a60 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
23a70 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67  . * struct Trigg
23a80 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65  er.. *. * Pointe
23a90 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20  rs to instances 
23aa0 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
23ab0 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  r are stored in 
23ac0 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20  two ways.. * 1. 
23ad0 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68  In the "trigHash
23ae0 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61  " hash table (pa
23af0 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  rt of the sqlite
23b00 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e  3* that represen
23b10 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74  ts the. *    dat
23b20 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
23b30 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
23b40 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
23b50 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
23b60 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
23b70 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
23b80 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
23b90 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
23ba0 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
23bb0 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
23bc0 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
23bd0 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
23be0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
23bf0 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
23c00 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
23c10 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
23c20 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
23c30 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
23c40 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
23c50 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
23c60 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
23c70 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
23c80 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
23c90 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
23ca0 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
23cb0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
23cc0 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
23cd0 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
23ce0 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
23cf0 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
23d00 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
23d10 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
23d20 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
23d50 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
23d60 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
23d70 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
23d80 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
23d90 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23db0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
23dc0 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
23dd0 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
23de0 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
23df0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23e00 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
23e10 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
23e20 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
23e30 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
23e40 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
23e50 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
23e60 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
23e70 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
23e80 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
23e90 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
23ea0 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
23eb0 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
23ec0 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
23ef0 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
23f00 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
23f10 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
23f20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
23f30 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
23f40 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
23f50 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
23f60 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
23f70 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
23f80 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
23f90 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
23fa0 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
23fb0 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
23fc0 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
23fd0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
23fe0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
23ff0 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
24000 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
24010 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
24020 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
24030 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
24040 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
24050 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
24060 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
24070 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
24080 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20  .**.** If there 
24090 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69  are multiple tri
240a0 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74  ggers, you might
240b0 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20   of some BEFORE 
240c0 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a  and some AFTER..
240d0 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73  ** In that cases
240e0 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20  , the constants 
240f0 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65  below can be ORe
24100 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23  d together..*/.#
24110 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42  define TRIGGER_B
24120 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65  EFORE  1.#define
24130 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20   TRIGGER_AFTER  
24140 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73   2../*. * An ins
24150 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
24160 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75  TriggerStep is u
24170 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73  sed to store a s
24180 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
24190 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61  ent. * that is a
241a0 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
241b0 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
241c0 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
241d0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
241e0 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
241f0 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
24200 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
24210 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
24220 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
24230 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
24240 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
24250 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61  f the. * associa
24260 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
24270 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
24280 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
24290 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
242a0 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
242b0 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
242c0 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
242d0 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65  *. * The "op" me
242e0 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
242f0 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
24300 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
24310 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
24320 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
24330 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
24340 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
24350 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
24360 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20  ermined by the. 
24370 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20  * value of "op" 
24380 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20  as follows:. *. 
24390 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45  * (op == TK_INSE
243a0 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20  RT). * orconf   
243b0 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f   -> stores the O
243c0 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
243d0 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20  ithm. * pSelect 
243e0 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
243f0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
24400 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74  .. SELECT ... st
24410 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
24430 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e  is stores a poin
24440 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43  ter to the SELEC
24450 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68  T statement. Oth
24460 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
24470 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
24480 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
24490 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
244a0 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
244b0 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
244c0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
244d0 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
244e0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
244f0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
24500 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
24510 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
24520 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
24530 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
24540 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
24550 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
24560 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
24570 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a  >) VALUES .... *
24580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
24590 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
245a0 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
245b0 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
245c0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
245d0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
245e0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
245f0 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67  DELETE). * zTarg
24600 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
24610 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
24620 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
24630 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
24640 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
24650 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
24660 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
24670 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
24680 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
24690 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
246a0 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
246b0 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72  _UPDATE). * zTar
246c0 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
246d0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
246e0 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20  ble to update.. 
246f0 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
24700 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
24710 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
24720 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
24730 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
24740 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
24750 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
24760 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c  pExprList -> A l
24770 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ist of the colum
24780 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64  ns to update and
24790 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
247a0 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20   to update. *   
247b0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20             them 
247c0 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55  to. See sqlite3U
247d0 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74  pdate() document
247e0 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67  ation of "pChang
247f0 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20  es". *          
24800 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a      argument.. *
24810 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
24820 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f  gerStep {.  u8 o
24830 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
24840 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
24850 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
24860 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53   TK_INSERT, TK_S
24870 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72  ELECT */.  u8 or
24880 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
24890 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65  /* OE_Rollback e
248a0 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  tc. */.  Trigger
248b0 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a   *pTrig;      /*
248c0 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61   The trigger tha
248d0 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61  t this step is a
248e0 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65   part of */.  Se
248f0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
24900 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61     /* SELECT sta
24910 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66  tement or RHS of
24920 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c   INSERT INTO SEL
24930 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61  ECT ... */.  cha
24940 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20  r *zTarget;     
24950 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
24960 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
24970 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
24980 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
24990 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
249a0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
249b0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
249c0 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
249d0 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
249e0 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
249f0 72 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 49 64  r UPDATE */.  Id
24a00 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
24a10 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
24a20 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
24a30 0a 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65  .  Upsert *pUpse
24a40 72 74 3b 20 20 20 20 20 2f 2a 20 55 70 73 65 72  rt;     /* Upser
24a50 74 20 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20  t clauses on an 
24a60 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61 72  INSERT */.  char
24a70 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
24a80 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c   /* Original SQL
24a90 20 74 65 78 74 20 6f 66 20 74 68 69 73 20 63 6f   text of this co
24aa0 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67  mmand */.  Trigg
24ab0 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
24ac0 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
24ad0 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
24ae0 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
24af0 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
24b00 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
24b10 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
24b20 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
24b30 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
24b40 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
24b50 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
24b60 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
24b70 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
24b80 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
24b90 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
24ba0 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
24bb0 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
24bc0 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a  ** explicit..*/.
24bd0 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
24be0 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
24bf0 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
24c00 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
24c10 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
24c20 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
24c30 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
24c40 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
24c50 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
24c60 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
24c70 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
24c80 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
24c90 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
24ca0 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
24cb0 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
24cc0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
24cd0 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
24ce0 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
24cf0 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
24d00 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
24d10 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
24d20 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
24d30 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
24d40 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
24d50 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
24d60 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
24d70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
24d80 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
24d90 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
24da0 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
24db0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
24dc0 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
24dd0 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
24de0 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
24df0 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
24e00 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
24e10 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
24e20 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
24e30 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  end..*/.struct s
24e40 71 6c 69 74 65 33 5f 73 74 72 20 7b 0a 20 20 73  qlite3_str {.  s
24e50 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
24e60 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
24e70 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
24e80 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
24e90 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
24ea0 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
24eb0 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
24ec0 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
24ed0 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20  .  u32  nAlloc; 
24ee0 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
24ef0 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
24f00 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
24f10 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b  .  u32  mxAlloc;
24f20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
24f30 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63  um allowed alloc
24f40 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f  ation.  0 for no
24f50 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f   malloc usage */
24f60 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20  .  u32  nChar;  
24f70 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
24f80 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
24f90 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20  so far */.  u8  
24fa0 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
24fb0 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   /* SQLITE_NOMEM
24fc0 20 6f 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49   or SQLITE_TOOBI
24fd0 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e  G */.  u8   prin
24fe0 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53  tfFlags;    /* S
24ff0 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61  QLITE_PRINTF fla
25000 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23  gs below */.};.#
25010 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
25020 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
25030 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d  01  /* Internal-
25040 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74  use-only convert
25050 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  ers allowed */.#
25060 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
25070 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
25080 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74  02  /* SQL funct
25090 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ion arguments to
250a0 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65   VXPrintf */.#de
250b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
250c0 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34  TF_MALLOCED 0x04
250d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65    /* True if xTe
250e0 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  xt is allocated 
250f0 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e  space */..#defin
25100 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20  e isMalloced(X) 
25110 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c   (((X)->printfFl
25120 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49  ags & SQLITE_PRI
25130 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30  NTF_MALLOCED)!=0
25140 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e  ).../*.** A poin
25150 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
25160 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
25170 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
25180 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
25190 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
251a0 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
251b0 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
251c0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
251d0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
251e0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
251f0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
25200 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
25210 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63  itialized */.  c
25220 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
25230 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
25240 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
25250 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
25260 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
25270 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
25280 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
25290 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
252a0 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
252b0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
252c0 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
252d0 72 65 20 2a 2f 0a 20 20 75 33 32 20 6d 49 6e 69  re */.  u32 mIni
252e0 74 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46  tFlags;     /* F
252f0 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67  lags controlling
25300 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
25310 2a 2f 0a 20 20 75 33 32 20 6e 49 6e 69 74 52 6f  */.  u32 nInitRo
25320 77 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  w;       /* Numb
25330 65 72 20 6f 66 20 72 6f 77 73 20 70 72 6f 63 65  er of rows proce
25340 73 73 65 64 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  ssed */.} InitDa
25350 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  ta;../*.** Allow
25360 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 6d 49  ed values for mI
25370 6e 69 74 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  nitFlags.*/.#def
25380 69 6e 65 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74  ine INITFLAG_Alt
25390 65 72 54 61 62 6c 65 20 20 20 30 78 30 30 30 31  erTable   0x0001
253a0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61 20 72    /* This is a r
253b0 65 70 61 72 73 65 20 61 66 74 65 72 20 41 4c 54  eparse after ALT
253c0 45 52 20 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a  ER TABLE */../*.
253d0 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
253e0 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
253f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
25400 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
25410 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
25420 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
25430 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
25440 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
25450 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
25460 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
25470 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25490 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
254a0 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
254b0 75 73 20 2a 2f 0a 20 20 75 38 20 62 43 6f 72 65  us */.  u8 bCore
254c0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
254d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
254e0 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
254f0 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 75   mutexing */.  u
25500 38 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  8 bFullMutex;   
25510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25520 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
25530 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
25540 20 2a 2f 0a 20 20 75 38 20 62 4f 70 65 6e 55 72   */.  u8 bOpenUr
25550 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
25560 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
25570 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
25580 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
25590 2f 0a 20 20 75 38 20 62 55 73 65 43 69 73 3b 20  /.  u8 bUseCis; 
255a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255b0 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
255c0 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
255d0 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
255e0 20 20 75 38 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f    u8 bSmallMallo
255f0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
25600 20 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72      /* Avoid lar
25610 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ge memory alloca
25620 74 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f  tions if true */
25630 0a 20 20 75 38 20 62 45 78 74 72 61 53 63 68 65  .  u8 bExtraSche
25640 6d 61 43 68 65 63 6b 73 3b 20 20 20 20 20 20 20  maChecks;       
25650 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74       /* Verify t
25660 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d  ype,name,tbl_nam
25670 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20  e in schema */. 
25680 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20   int mxStrlen;  
25690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256a0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74     /* Maximum st
256b0 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
256c0 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70   int neverCorrup
256d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
256e0 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69     /* Database i
256f0 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f  s always well-fo
25700 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  rmed */.  int sz
25710 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
25720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
25730 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
25740 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a   buffer size */.
25750 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65    int nLookaside
25760 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25770 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
25780 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
25790 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  count */.  int n
257a0 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20  StmtSpill;      
257b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
257c0 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69  Stmt-journal spi
257d0 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73  ll-to-disk thres
257e0 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65  hold */.  sqlite
257f0 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b  3_mem_methods m;
25800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
25810 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
25820 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72  allocation inter
25830 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
25840 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
25850 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c  mutex;      /* L
25860 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69  ow-level mutex i
25870 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
25880 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
25890 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20  hods2 pcache2;  
258a0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67  /* Low-level pag
258b0 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63  e-cache interfac
258c0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65  e */.  void *pHe
258d0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
258e0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70           /* Heap
258f0 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a   storage space *
25900 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20  /.  int nHeap;  
25910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25920 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
25930 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e   pHeap[] */.  in
25940 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20  t mnReq, mxReq; 
25950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25960 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68  /* Min and max h
25970 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a  eap requests siz
25980 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  es */.  sqlite3_
25990 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20  int64 szMmap;   
259a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61            /* mma
259b0 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70  p() space per op
259c0 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c  en file */.  sql
259d0 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61  ite3_int64 mxMma
259e0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
259f0 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  * Maximum value 
25a00 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20  for szMmap */.  
25a10 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a30 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
25a40 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
25a50 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25a70 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
25a80 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
25a90 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ab0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
25ac0 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
25ad0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
25ae0 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
25af0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
25b00 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
25b10 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
25b20 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
25b30 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
25b40 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
25b50 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
25b60 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
25b70 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20  u32 szPma;      
25b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b90 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72    /* Maximum Sor
25ba0 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a  ter PMA size */.
25bb0 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
25bc0 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
25bd0 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
25be0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
25bf0 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
25c00 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
25c10 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
25c20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
25c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c40 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
25c50 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
25c60 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
25c70 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
25c80 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
25c90 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
25ca0 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
25cb0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
25cc0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
25cd0 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
25ce0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
25cf0 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
25d00 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
25d10 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
25d20 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
25d30 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
25d40 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
25d50 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
25d60 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d80 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
25d90 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
25da0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
25db0 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
25dc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
25dd0 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
25de0 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
25df0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
25e00 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
25e10 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
25e20 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
25e30 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
25e40 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
25e50 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
25e60 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
25e70 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
25e80 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ea0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
25eb0 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
25ec0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
25ed0 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
25ee0 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
25ef0 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
25f00 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
25f10 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
25f20 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
25f30 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
25f40 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
25f50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
25f60 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
25f70 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
25f80 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
25f90 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
25fa0 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
25fb0 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
25fc0 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
25fd0 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
25fe0 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
25ff0 61 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69  anch)(void*,unsi
26000 67 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75 38  gned iSrcLine,u8
26010 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
26020 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
26030 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
26040 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
26050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
26070 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
26080 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
26090 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52  ITE_ENABLE_DESER
260a0 49 41 4c 49 5a 45 0a 20 20 73 71 6c 69 74 65 33  IALIZE.  sqlite3
260b0 5f 69 6e 74 36 34 20 6d 78 4d 65 6d 64 62 53 69  _int64 mxMemdbSi
260c0 7a 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ze;        /* De
260d0 66 61 75 6c 74 20 6d 61 78 20 6d 65 6d 64 62 20  fault max memdb 
260e0 73 69 7a 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  size */.#endif.#
260f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
26100 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28  TESTABLE.  int (
26110 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28  *xTestCallback)(
26120 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  int);        /* 
26130 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74  Invoked by sqlit
26140 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a  e3FaultSim() */.
26150 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f  #endif.  int bLo
26160 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
26170 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
26180 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
26190 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
261a0 20 20 69 6e 74 20 62 49 6e 74 65 72 6e 61 6c 46    int bInternalF
261b0 75 6e 63 74 69 6f 6e 73 3b 20 20 20 20 20 20 20  unctions;       
261c0 20 20 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 20      /* Internal 
261d0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  SQL functions ar
261e0 65 20 76 69 73 69 62 6c 65 20 2a 2f 0a 20 20 69  e visible */.  i
261f0 6e 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72  nt iOnceResetThr
26200 65 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20  eshold;         
26210 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65   /* When to rese
26220 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65  t OP_Once counte
26230 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 7a 53 6f  rs */.  u32 szSo
26240 72 74 65 72 52 65 66 3b 20 20 20 20 20 20 20 20  rterRef;        
26250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e            /* Min
26260 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 74   size in bytes t
26270 6f 20 75 73 65 20 73 6f 72 74 65 72 2d 72 65 66  o use sorter-ref
26280 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
26290 69 6e 74 20 69 50 72 6e 67 53 65 65 64 3b 20 20  int iPrngSeed;  
262a0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 74 65           /* Alte
262b0 72 6e 61 74 69 76 65 20 66 69 78 65 64 20 73 65  rnative fixed se
262c0 65 64 20 66 6f 72 20 74 68 65 20 50 52 4e 47 20  ed for the PRNG 
262d0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
262e0 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
262f0 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74  inside of assert
26300 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
26310 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a   indicate that.*
26320 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20  * the assert is 
26330 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20  only valid on a 
26340 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
26350 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f  base.  Instead o
26360 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  f:.**.**     ass
26370 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20  ert( X );.**.** 
26380 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a  One writes:.**.*
26390 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
263a0 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
263b0 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44  .**.** CORRUPT_D
263c0 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67  B is true during
263d0 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f   normal operatio
263e0 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64  n.  CORRUPT_DB d
263f0 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65  oes not indicate
26400 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
26410 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74  abase is definit
26420 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c  ely corrupt, onl
26430 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20  y that it might 
26440 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46  be corrupt..** F
26450 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73  or most test cas
26460 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69  es, CORRUPT_DB i
26470 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75  s set to false u
26480 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a  sing a special.*
26490 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
264a0 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20  ontrol().  This 
264b0 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29  enables assert()
264c0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70   statements to p
264d0 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74  rove.** things t
264e0 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74  hat are always t
264f0 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72  rue for well-for
26500 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  med databases..*
26510 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50  /.#define CORRUP
26520 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f  T_DB  (sqlite3Co
26530 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70  nfig.neverCorrup
26540 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  t==0)../*.** Con
26550 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73  text pointer pas
26560 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68  sed down through
26570 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a   the tree-walk..
26580 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72  */.struct Walker
26590 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
265a0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
265c0 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74  * Parser context
265d0 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45  .  */.  int (*xE
265e0 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
265f0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
26600 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
26610 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
26620 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
26630 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
26640 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
26650 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
26660 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ECTs */.  void (
26670 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
26680 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  2)(Walker*,Selec
26690 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61  t*);/* Second ca
266a0 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
266b0 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b  Ts */.  int walk
266c0 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20  erDepth;        
266d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
266f0 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75  ubqueries */.  u
26700 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20  8 eCode;        
26710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26720 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d           /* A sm
26730 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63  all processing c
26740 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
26750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26770 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
26780 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
26790 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
267a0 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
267c0 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74  * Naming context
267d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20   */.    int n;  
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26800 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a    /* A counter *
26810 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20  /.    int iCur; 
26820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26840 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62  /* A cursor numb
26850 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73  er */.    SrcLis
26860 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20  t *pSrcList;    
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75      /* FROM clau
26890 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
268a0 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43   SrcCount *pSrcC
268b0 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ount;           
268c0 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
268d0 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
268e0 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
268f0 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48  CCurHint *pCCurH
26900 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
26910 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f     /* Used by co
26920 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a  deCursorHint() *
26930 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c  /.    int *aiCol
26940 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26960 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c 75  /* array of colu
26970 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20  mn indexes */.  
26980 20 20 73 74 72 75 63 74 20 49 64 78 43 6f 76 65    struct IdxCove
26990 72 20 2a 70 49 64 78 43 6f 76 65 72 3b 20 20 20  r *pIdxCover;   
269a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
269b0 68 65 63 6b 20 66 6f 72 20 69 6e 64 65 78 20 63  heck for index c
269c0 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20 20 20 73  overage */.    s
269d0 74 72 75 63 74 20 49 64 78 45 78 70 72 54 72 61  truct IdxExprTra
269e0 6e 73 20 2a 70 49 64 78 54 72 61 6e 73 3b 20 20  ns *pIdxTrans;  
269f0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76           /* Conv
26a00 65 72 74 20 69 64 78 65 64 20 65 78 70 72 20 74  ert idxed expr t
26a10 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20  o column */.    
26a20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
26a30 42 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  By;             
26a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f            /* GRO
26a50 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
26a60 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
26a70 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26a90 20 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45   HAVING to WHERE
26aa0 20 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20   clause ctx */. 
26ab0 20 20 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77     struct Window
26ac0 52 65 77 72 69 74 65 20 2a 70 52 65 77 72 69 74  Rewrite *pRewrit
26ad0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
26ae0 57 69 6e 64 6f 77 20 72 65 77 72 69 74 65 20 63  Window rewrite c
26af0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 73 74  ontext */.    st
26b00 72 75 63 74 20 57 68 65 72 65 43 6f 6e 73 74 20  ruct WhereConst 
26b10 2a 70 43 6f 6e 73 74 3b 20 20 20 20 20 20 20 20  *pConst;        
26b20 20 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45          /* WHERE
26b30 20 63 6c 61 75 73 65 20 63 6f 6e 73 74 61 6e 74   clause constant
26b40 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
26b50 52 65 6e 61 6d 65 43 74 78 20 2a 70 52 65 6e 61  RenameCtx *pRena
26b60 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
26b70 20 20 20 2f 2a 20 52 45 4e 41 4d 45 20 43 4f 4c     /* RENAME COL
26b80 55 4d 4e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  UMN context */. 
26b90 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72   } u;.};../* For
26ba0 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e  ward declaration
26bb0 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s */.int sqlite3
26bc0 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a  WalkExpr(Walker*
26bd0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
26be0 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73  lite3WalkExprLis
26bf0 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c  t(Walker*, ExprL
26c00 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
26c10 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c  e3WalkSelect(Wal
26c20 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
26c30 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
26c40 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72  electExpr(Walker
26c50 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
26c60 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
26c70 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20  ctFrom(Walker*, 
26c80 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
26c90 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f  lite3ExprWalkNoo
26ca0 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  p(Walker*, Expr*
26cb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
26cc0 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  lectWalkNoop(Wal
26cd0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
26ce0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
26cf0 74 57 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72  tWalkFail(Walker
26d00 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66  *, Select*);.#if
26d10 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
26d20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
26d30 65 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57  ectWalkAssert2(W
26d40 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
26d50 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
26d60 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
26d70 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
26d80 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
26d90 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
26da0 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
26db0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
26dc0 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
26dd0 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
26de0 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
26df0 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
26e00 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
26e10 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
26e20 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
26e30 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
26e40 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
26e50 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
26e60 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
26e70 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
26e80 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
26e90 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
26ea0 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
26eb0 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
26ec0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
26ed0 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
26ee0 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
26ef0 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
26f00 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
26f10 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26f30 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
26f40 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
26f50 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
26f60 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
26f70 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
26f80 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
26f90 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
26fa0 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
26fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fc0 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
26fd0 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
26fe0 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
26ff0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
27010 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
27020 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
27030 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
27040 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
27050 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
27060 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
27070 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
27080 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
27090 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
270a0 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
270b0 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
270c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45  onst char *zCteE
270d0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
270e0 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
270f0 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
27100 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
27110 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  [1];.};..#ifdef 
27120 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
27130 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
27140 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f  f the TreeView o
27150 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f  bject is used fo
27160 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63  r printing the c
27170 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74  ontent of.** dat
27180 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20  a structures on 
27190 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
271a0 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65  tf() using a tre
271b0 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a  e-like view..*/.
271c0 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20  struct TreeView 
271d0 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20  {.  int iLevel; 
271e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
271f0 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68  hich level of th
27200 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e  e tree we are on
27210 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b   */.  u8  bLine[
27220 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a  100];         /*
27230 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69   Draw vertical i
27240 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c  n column i if bL
27250 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a  ine[i] is true *
27260 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  /.};.#endif /* S
27270 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a  QLITE_DEBUG */..
27280 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63  /*.** This objec
27290 74 20 69 73 20 75 73 65 64 20 69 6e 20 76 61 72  t is used in var
272a0 69 6f 75 73 20 77 61 79 73 2c 20 6d 6f 73 74 20  ious ways, most 
272b0 28 62 75 74 20 6e 6f 74 20 61 6c 6c 29 20 72 65  (but not all) re
272c0 6c 61 74 65 64 20 74 6f 20 77 69 6e 64 6f 77 0a  lated to window.
272d0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
272e0 0a 2a 2a 20 20 20 28 31 29 20 41 20 73 69 6e 67  .**   (1) A sing
272f0 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  le instance of t
27300 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
27310 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
27320 0a 2a 2a 20 20 20 20 20 20 20 74 68 65 20 45 78  .**       the Ex
27330 70 72 2e 79 2e 70 57 69 6e 20 66 69 65 6c 64 20  pr.y.pWin field 
27340 66 6f 72 20 65 61 63 68 20 77 69 6e 64 6f 77 20  for each window 
27350 66 75 6e 63 74 69 6f 6e 20 69 6e 20 61 6e 20 65  function in an e
27360 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 2e 0a  xpression tree..
27370 2a 2a 20 20 20 20 20 20 20 54 68 69 73 20 6f 62  **       This ob
27380 6a 65 63 74 20 68 6f 6c 64 73 20 74 68 65 20 69  ject holds the i
27390 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 6f 6e 74 61  nformation conta
273a0 69 6e 65 64 20 69 6e 20 74 68 65 20 4f 56 45 52  ined in the OVER
273b0 20 63 6c 61 75 73 65 2c 0a 2a 2a 20 20 20 20 20   clause,.**     
273c0 20 20 70 6c 75 73 20 61 64 64 69 74 69 6f 6e 61    plus additiona
273d0 6c 20 66 69 65 6c 64 73 20 75 73 65 64 20 64 75  l fields used du
273e0 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
273f0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 32  tion..**.**   (2
27400 29 20 41 6c 6c 20 77 69 6e 64 6f 77 20 66 75 6e  ) All window fun
27410 63 74 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67  ctions in a sing
27420 6c 65 20 53 45 4c 45 43 54 20 66 6f 72 6d 20 61  le SELECT form a
27430 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 0a 2a 2a 20   linked-list.** 
27440 20 20 20 20 20 20 61 74 74 61 63 68 65 64 20 74        attached t
27450 6f 20 53 65 6c 65 63 74 2e 70 57 69 6e 2e 20 20  o Select.pWin.  
27460 54 68 65 20 57 69 6e 64 6f 77 2e 70 46 75 6e 63  The Window.pFunc
27470 20 61 6e 64 20 57 69 6e 64 6f 77 2e 70 45 78 70   and Window.pExp
27480 72 0a 2a 2a 20 20 20 20 20 20 20 66 69 65 6c 64  r.**       field
27490 73 20 70 6f 69 6e 74 20 62 61 63 6b 20 74 6f 20  s point back to 
274a0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
274b0 68 61 74 20 69 73 20 74 68 65 20 77 69 6e 64 6f  hat is the windo
274c0 77 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  w function..**.*
274d0 2a 20 20 20 28 33 29 20 54 68 65 20 74 65 72 6d  *   (3) The term
274e0 73 20 6f 66 20 74 68 65 20 57 49 4e 44 4f 57 20  s of the WINDOW 
274f0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
27500 43 54 20 61 72 65 20 69 6e 73 74 61 6e 63 65 73  CT are instances
27510 20 6f 66 20 74 68 69 73 0a 2a 2a 20 20 20 20 20   of this.**     
27520 20 20 6f 62 6a 65 63 74 20 6f 6e 20 61 20 6c 69    object on a li
27530 6e 6b 65 64 20 6c 69 73 74 20 61 74 74 61 63 68  nked list attach
27540 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70 57 69  ed to Select.pWi
27550 6e 44 65 66 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28  nDefn..**.**   (
27560 34 29 20 46 6f 72 20 61 6e 20 61 67 67 72 65 67  4) For an aggreg
27570 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
27580 68 20 61 20 46 49 4c 54 45 52 20 63 6c 61 75 73  h a FILTER claus
27590 65 2c 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  e, an instance.*
275a0 2a 20 20 20 20 20 20 20 6f 66 20 74 68 69 73 20  *       of this 
275b0 6f 62 6a 65 63 74 20 69 73 20 73 74 6f 72 65 64  object is stored
275c0 20 69 6e 20 45 78 70 72 2e 79 2e 70 57 69 6e 20   in Expr.y.pWin 
275d0 77 69 74 68 20 65 46 72 6d 54 79 70 65 20 73 65  with eFrmType se
275e0 74 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 54 4b  t to.**       TK
275f0 5f 46 49 4c 54 45 52 2e 20 49 6e 20 74 68 69 73  _FILTER. In this
27600 20 63 61 73 65 20 74 68 65 20 6f 6e 6c 79 20 66   case the only f
27610 69 65 6c 64 20 75 73 65 64 20 69 73 20 57 69 6e  ield used is Win
27620 64 6f 77 2e 70 46 69 6c 74 65 72 2e 0a 2a 2a 0a  dow.pFilter..**.
27630 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31 29 20  ** The uses (1) 
27640 61 6e 64 20 28 32 29 20 61 72 65 20 72 65 61 6c  and (2) are real
27650 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64  ly the same Wind
27660 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a  ow object that j
27670 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74  ust happens.** t
27680 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c 65 20  o be accessible 
27690 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74  in two different
276a0 20 77 61 79 73 2e 20 20 55 73 65 20 63 61 73 65   ways.  Use case
276b0 20 28 33 29 20 61 72 65 20 73 65 70 61 72 61 74   (3) are separat
276c0 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  e objects..*/.st
276d0 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20  ruct Window {.  
276e0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
276f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
27700 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62  of window (may b
27710 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 63 68 61  e NULL) */.  cha
27720 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20  r *zBase;       
27730 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
27740 62 61 73 65 20 77 69 6e 64 6f 77 20 66 6f 72 20  base window for 
27750 63 68 61 69 6e 69 6e 67 20 28 6d 61 79 20 62 65  chaining (may be
27760 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72   NULL) */.  Expr
27770 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e  List *pPartition
27780 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e  ;   /* PARTITION
27790 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
277a0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
277b0 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52  By;     /* ORDER
277c0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
277d0 75 38 20 65 46 72 6d 54 79 70 65 3b 20 20 20 20  u8 eFrmType;    
277e0 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41          /* TK_RA
277f0 4e 47 45 2c 20 54 4b 5f 47 52 4f 55 50 53 2c 20  NGE, TK_GROUPS, 
27800 54 4b 5f 52 4f 57 53 2c 20 6f 72 20 30 20 2a 2f  TK_ROWS, or 0 */
27810 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20 20 20  .  u8 eStart;   
27820 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e             /* UN
27830 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54  BOUNDED, CURRENT
27840 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46  , PRECEDING or F
27850 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38  OLLOWING */.  u8
27860 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20   eEnd;          
27870 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44        /* UNBOUND
27880 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45  ED, CURRENT, PRE
27890 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57  CEDING or FOLLOW
278a0 49 4e 47 20 2a 2f 0a 20 20 75 38 20 62 49 6d 70  ING */.  u8 bImp
278b0 6c 69 63 69 74 46 72 61 6d 65 3b 20 20 20 20 20  licitFrame;     
278c0 20 2f 2a 20 54 72 75 65 20 69 66 20 66 72 61 6d   /* True if fram
278d0 65 20 77 61 73 20 69 6d 70 6c 69 63 69 74 6c 79  e was implicitly
278e0 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 20 20   specified */.  
278f0 75 38 20 65 45 78 63 6c 75 64 65 3b 20 20 20 20  u8 eExclude;    
27900 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 4e 4f          /* TK_NO
27910 2c 20 54 4b 5f 43 55 52 52 45 4e 54 2c 20 54 4b  , TK_CURRENT, TK
27920 5f 54 49 45 53 2c 20 54 4b 5f 47 52 4f 55 50 2c  _TIES, TK_GROUP,
27930 20 6f 72 20 30 20 2a 2f 0a 20 20 45 78 70 72 20   or 0 */.  Expr 
27940 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
27950 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
27960 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45   for "<expr> PRE
27970 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70  CEDING" */.  Exp
27980 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  r *pEnd;        
27990 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
279a0 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46  on for "<expr> F
279b0 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57  OLLOWING" */.  W
279c0 69 6e 64 6f 77 20 2a 2a 70 70 54 68 69 73 3b 20  indow **ppThis; 
279d0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
279e0 72 20 74 6f 20 74 68 69 73 20 6f 62 6a 65 63 74  r to this object
279f0 20 69 6e 20 53 65 6c 65 63 74 2e 70 57 69 6e 20   in Select.pWin 
27a00 6c 69 73 74 20 2a 2f 0a 20 20 57 69 6e 64 6f 77  list */.  Window
27a10 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20 20 20 20   *pNextWin;     
27a20 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e 64 6f 77    /* Next window
27a30 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c 6f 6e 67   function belong
27a40 69 6e 67 20 74 6f 20 74 68 69 73 20 53 45 4c 45  ing to this SELE
27a50 43 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 46  CT */.  Expr *pF
27a60 69 6c 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  ilter;          
27a70 2f 2a 20 54 68 65 20 46 49 4c 54 45 52 20 65 78  /* The FILTER ex
27a80 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 46 75  pression */.  Fu
27a90 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
27aa0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 75 6e        /* The fun
27ab0 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  ction */.  int i
27ac0 45 70 68 43 73 72 3b 20 20 20 20 20 20 20 20 20  EphCsr;         
27ad0 20 20 20 2f 2a 20 50 61 72 74 69 74 69 6f 6e 20     /* Partition 
27ae0 62 75 66 66 65 72 20 6f 72 20 50 65 65 72 20 62  buffer or Peer b
27af0 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 72  uffer */.  int r
27b00 65 67 41 63 63 75 6d 3b 20 20 20 20 20 20 20 20  egAccum;        
27b10 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74 6f     /* Accumulato
27b20 72 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 65  r */.  int regRe
27b30 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 2f  sult;          /
27b40 2a 20 49 6e 74 65 72 69 6d 20 72 65 73 75 6c 74  * Interim result
27b50 20 2a 2f 0a 20 20 69 6e 74 20 63 73 72 41 70 70   */.  int csrApp
27b60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
27b70 20 46 75 6e 63 74 69 6f 6e 20 63 75 72 73 6f 72   Function cursor
27b80 20 28 75 73 65 64 20 62 79 20 6d 69 6e 2f 6d 61   (used by min/ma
27b90 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 41  x) */.  int regA
27ba0 70 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pp;             
27bb0 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 72 65 67 69  /* Function regi
27bc0 73 74 65 72 20 28 61 6c 73 6f 20 75 73 65 64 20  ster (also used 
27bd0 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20  by min/max) */. 
27be0 20 69 6e 74 20 72 65 67 50 61 72 74 3b 20 20 20   int regPart;   
27bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61           /* Arra
27c00 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 66  y of registers f
27c10 6f 72 20 50 41 52 54 49 54 49 4f 4e 20 42 59 20  or PARTITION BY 
27c20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 45 78 70 72  values */.  Expr
27c30 20 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20 20 20   *pOwner;       
27c40 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
27c50 6e 20 6f 62 6a 65 63 74 20 74 68 69 73 20 77 69  n object this wi
27c60 6e 64 6f 77 20 69 73 20 61 74 74 61 63 68 65 64  ndow is attached
27c70 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75   to */.  int nBu
27c80 66 66 65 72 43 6f 6c 3b 20 20 20 20 20 20 20 20  fferCol;        
27c90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
27ca0 6c 75 6d 6e 73 20 69 6e 20 62 75 66 66 65 72 20  lumns in buffer 
27cb0 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69  table */.  int i
27cc0 41 72 67 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  ArgCol;         
27cd0 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20     /* Offset of 
27ce0 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66  first argument f
27cf0 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
27d00 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 4f 6e 65   */.  int regOne
27d10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
27d20 20 52 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69   Register contai
27d30 6e 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 76 61  ning constant va
27d40 6c 75 65 20 31 20 2a 2f 0a 20 20 69 6e 74 20 72  lue 1 */.  int r
27d50 65 67 53 74 61 72 74 52 6f 77 69 64 3b 0a 20 20  egStartRowid;.  
27d60 69 6e 74 20 72 65 67 45 6e 64 52 6f 77 69 64 3b  int regEndRowid;
27d70 0a 20 20 75 38 20 62 45 78 70 72 41 72 67 73 3b  .  u8 bExprArgs;
27d80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
27d90 66 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f  fer evaluation o
27da0 66 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  f window functio
27db0 6e 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 20 20  n arguments.    
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27dd0 20 20 20 20 20 20 2a 2a 20 64 75 65 20 74 6f 20        ** due to 
27de0 74 68 65 20 53 51 4c 49 54 45 5f 53 55 42 54 59  the SQLITE_SUBTY
27df0 50 45 20 66 6c 61 67 20 2a 2f 0a 7d 3b 0a 0a 23  PE flag */.};..#
27e00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27e10 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 76 6f  IT_WINDOWFUNC.vo
27e20 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
27e30 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
27e40 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20   Window*);.void 
27e50 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 55 6e 6c  sqlite3WindowUnl
27e60 69 6e 6b 46 72 6f 6d 53 65 6c 65 63 74 28 57 69  inkFromSelect(Wi
27e70 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndow*);.void sql
27e80 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 65  ite3WindowListDe
27e90 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 64 62  lete(sqlite3 *db
27ea0 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a 57 69  , Window *p);.Wi
27eb0 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e  ndow *sqlite3Win
27ec0 64 6f 77 41 6c 6c 6f 63 28 50 61 72 73 65 2a 2c  dowAlloc(Parse*,
27ed0 20 69 6e 74 2c 20 69 6e 74 2c 20 45 78 70 72 2a   int, int, Expr*
27ee0 2c 20 69 6e 74 20 2c 20 45 78 70 72 2a 2c 20 75  , int , Expr*, u
27ef0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
27f00 57 69 6e 64 6f 77 41 74 74 61 63 68 28 50 61 72  WindowAttach(Par
27f10 73 65 2a 2c 20 45 78 70 72 2a 2c 20 57 69 6e 64  se*, Expr*, Wind
27f20 6f 77 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ow*);.void sqlit
27f30 65 33 57 69 6e 64 6f 77 4c 69 6e 6b 28 53 65 6c  e3WindowLink(Sel
27f40 65 63 74 20 2a 70 53 65 6c 2c 20 57 69 6e 64 6f  ect *pSel, Windo
27f50 77 20 2a 70 57 69 6e 29 3b 0a 69 6e 74 20 73 71  w *pWin);.int sq
27f60 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61  lite3WindowCompa
27f70 72 65 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f  re(Parse*, Windo
27f80 77 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 69 6e 74  w*, Window*, int
27f90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
27fa0 69 6e 64 6f 77 43 6f 64 65 49 6e 69 74 28 50 61  indowCodeInit(Pa
27fb0 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a  rse*, Window*);.
27fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64  void sqlite3Wind
27fd0 6f 77 43 6f 64 65 53 74 65 70 28 50 61 72 73 65  owCodeStep(Parse
27fe0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72  *, Select*, Wher
27ff0 65 49 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74  eInfo*, int, int
28000 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69  );.int sqlite3Wi
28010 6e 64 6f 77 52 65 77 72 69 74 65 28 50 61 72 73  ndowRewrite(Pars
28020 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  e*, Select*);.in
28030 74 20 73 71 6c 69 74 65 33 45 78 70 61 6e 64 53  t sqlite3ExpandS
28040 75 62 71 75 65 72 79 28 50 61 72 73 65 2a 2c 20  ubquery(Parse*, 
28050 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
28060 74 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  tem*);.void sqli
28070 74 65 33 57 69 6e 64 6f 77 55 70 64 61 74 65 28  te3WindowUpdate(
28080 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c  Parse*, Window*,
28090 20 57 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65   Window*, FuncDe
280a0 66 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c  f*);.Window *sql
280b0 69 74 65 33 57 69 6e 64 6f 77 44 75 70 28 73 71  ite3WindowDup(sq
280c0 6c 69 74 65 33 20 2a 64 62 2c 20 45 78 70 72 20  lite3 *db, Expr 
280d0 2a 70 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20  *pOwner, Window 
280e0 2a 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c  *p);.Window *sql
280f0 69 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 75  ite3WindowListDu
28100 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57  p(sqlite3 *db, W
28110 69 6e 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20  indow *p);.void 
28120 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e  sqlite3WindowFun
28130 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
28140 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
28150 43 68 61 69 6e 28 50 61 72 73 65 2a 2c 20 57 69  Chain(Parse*, Wi
28160 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  ndow*, Window*);
28170 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33  .Window *sqlite3
28180 57 69 6e 64 6f 77 41 73 73 65 6d 62 6c 65 28 50  WindowAssemble(P
28190 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20  arse*, Window*, 
281a0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
281b0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 23  ist*, Token*);.#
281c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
281d0 6c 69 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74  lite3WindowDelet
281e0 65 28 61 2c 62 29 0a 23 20 64 65 66 69 6e 65 20  e(a,b).# define 
281f0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e  sqlite3WindowFun
28200 63 74 69 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e  ctions().# defin
28210 65 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41  e sqlite3WindowA
28220 74 74 61 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e  ttach(a,b,c).#en
28230 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d  dif../*.** Assum
28240 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74  ing zIn points t
28250 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
28260 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72   of a UTF-8 char
28270 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63  acter,.** advanc
28280 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74  e zIn to point t
28290 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
282a0 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46   of the next UTF
282b0 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f  -8 character..*/
282c0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
282d0 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b  SKIP_UTF8(zIn) {
282e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282f0 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20          \.  if( 
28300 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30  (*(zIn++))>=0xc0
28310 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20   ){             
28320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28330 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a   \.    while( (*
28340 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38  zIn & 0xc0)==0x8
28350 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20  0 ){ zIn++; }   
28360 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20            \.  } 
28370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283a0 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68     \.}../*.** Th
283b0 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20  e SQLITE_*_BKPT 
283c0 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74  macros are subst
283d0 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65  itutes for the e
283e0 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a  rror codes with.
283f0 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ** the same name
28400 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65   but without the
28410 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20   _BKPT suffix.  
28420 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76  These macros inv
28430 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  oke.** routines 
28440 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20  that report the 
28450 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77  line-number on w
28460 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f  hich the error o
28470 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69  riginated.** usi
28480 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  ng sqlite3_log()
28490 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20  .  The routines 
284a0 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63  also provide a c
284b0 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a  onvenient place.
284c0 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ** to set a debu
284d0 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
284e0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  .*/.int sqlite3R
284f0 65 70 6f 72 74 45 72 72 6f 72 28 69 6e 74 20 69  eportError(int i
28500 45 72 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c  Err, int lineno,
28510 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
28520 70 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pe);.int sqlite3
28530 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
28540 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
28550 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
28560 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
28570 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
28580 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
28590 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
285a0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
285b0 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
285c0 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
285d0 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
285e0 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
285f0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
28600 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
28610 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
28620 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66  or(__LINE__).#if
28630 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
28640 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f  .  int sqlite3No
28650 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
28660 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72   int sqlite3Ioer
28670 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  rnomemError(int)
28680 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  ;.  int sqlite3C
28690 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28  orruptPgnoError(
286a0 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66  int,Pgno);.# def
286b0 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
286c0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d  _BKPT sqlite3Nom
286d0 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
286e0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
286f0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
28700 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e  PT sqlite3Ioerrn
28710 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  omemError(__LINE
28720 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  __).# define SQL
28730 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f  ITE_CORRUPT_PGNO
28740 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75  (P) sqlite3Corru
28750 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49  ptPgnoError(__LI
28760 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a  NE__,(P)).#else.
28770 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
28780 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54  NOMEM_BKPT SQLIT
28790 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65  E_NOMEM.# define
287a0 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
287b0 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
287c0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65  IOERR_NOMEM.# de
287d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
287e0 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69  UPT_PGNO(P) sqli
287f0 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
28800 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66  __LINE__).#endif
28810 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64  ../*.** FTS3 and
28820 20 46 54 53 34 20 62 6f 74 68 20 72 65 71 75 69   FTS4 both requi
28830 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  re virtual table
28840 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20   support.*/.#if 
28850 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
28860 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
28870 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
28880 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75  _ENABLE_FTS3.# u
28890 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
288a0 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a  LE_FTS4.#endif..
288b0 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
288c0 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
288d0 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
288e0 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
288f0 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
28900 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
28910 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
28920 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
28930 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
28940 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
28950 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
28960 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
28970 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
28980 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
28990 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
289a0 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
289b0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
289c0 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
289d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
289e0 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  S3 1.#endif../*.
289f0 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
28a00 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
28a10 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
28a20 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
28a30 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
28a40 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
28a50 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
28a60 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
28a70 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
28a80 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
28a90 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
28aa0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
28ab0 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
28ac0 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
28ad0 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
28ae0 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
28af0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
28b00 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
28b10 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
28b20 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
28b30 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
28b40 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
28b50 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
28b60 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
28b70 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
28b80 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
28b90 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
28ba0 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
28bb0 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
28bc0 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
28bd0 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
28be0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28bf0 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
28c00 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
28c10 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
28c20 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
28c30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
28c40 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
28c50 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
28c60 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
28c70 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
28c80 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
28c90 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
28ca0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
28cb0 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
28cc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
28cd0 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
28ce0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
28cf0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
28d00 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
28d10 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
28d20 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
28d30 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
28d40 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
28d50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
28d60 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
28d70 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
28d80 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
28d90 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
28da0 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
28db0 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
28dc0 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
28dd0 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20  ed char)(x)]).# 
28de0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
28df0 71 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69  quote(x)   (sqli
28e00 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
28e10 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
28e20 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  0x80).#else.# de
28e30 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
28e40 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
28e50 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
28e60 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
28e70 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
28e80 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
28e90 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
28ea0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
28eb0 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
28ec0 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
28ed0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
28ee0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
28ef0 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
28f00 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
28f10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28f20 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
28f30 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
28f40 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
28f50 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
28f60 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
28f70 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
28f80 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
28f90 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
28fa0 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
28fb0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
28fc0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
28fd0 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27  ote(x)   ((x)=='
28fe0 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28  "'||(x)=='\''||(
28ff0 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60  x)=='['||(x)=='`
29000 27 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  ').#endif.int sq
29010 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
29020 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  );../*.** Intern
29030 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
29040 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71  otypes.*/.int sq
29050 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e  lite3StrICmp(con
29060 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
29070 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
29080 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
29090 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
290a0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
290b0 4e 4e 28 43 29 20 28 73 74 72 6c 65 6e 28 43 29  NN(C) (strlen(C)
290c0 26 30 78 33 66 66 66 66 66 66 66 29 0a 63 68 61  &0x3fffffff).cha
290d0 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  r *sqlite3Column
290e0 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61  Type(Column*,cha
290f0 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
29100 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c  ite3StrNICmp sql
29110 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69  ite3_strnicmp..i
29120 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
29130 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  Init(void);.void
29140 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e   sqlite3MallocEn
29150 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73  d(void);.void *s
29160 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34  qlite3Malloc(u64
29170 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
29180 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b  MallocZero(u64);
29190 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
291a0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74  MallocZero(sqlit
291b0 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
291c0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
291d0 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  Raw(sqlite3*, u6
291e0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
291f0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73  3DbMallocRawNN(s
29200 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63  qlite3*, u64);.c
29210 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
29220 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  rDup(sqlite3*,co
29230 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
29240 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44   *sqlite3DbStrND
29250 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
29260 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63  t char*, u64);.c
29270 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 70  har *sqlite3DbSp
29280 61 6e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  anDup(sqlite3*,c
29290 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
292a0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73   char*);.void *s
292b0 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
292c0 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  id*, u64);.void 
292d0 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
292e0 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
292f0 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
29300 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
29310 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
29320 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
29330 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
29340 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
29350 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
29360 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c 69 74  e3DbFreeNN(sqlit
29370 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74  e3*, void*);.int
29380 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69   sqlite3MallocSi
29390 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  ze(void*);.int s
293a0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69  qlite3DbMallocSi
293b0 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ze(sqlite3*, voi
293c0 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
293d0 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74  e3PageMalloc(int
293e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
293f0 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  ageFree(void*);.
29400 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53  void sqlite3MemS
29410 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b  etDefault(void);
29420 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29430 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20  UNTESTABLE.void 
29440 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
29450 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
29460 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
29470 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66  )(void));.#endif
29480 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70  .int sqlite3Heap
29490 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29  NearlyFull(void)
294a0 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74  ;../*.** On syst
294b0 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73  ems with ample s
294c0 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74  tack space and t
294d0 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f  hat support allo
294e0 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73  ca(), make.** us
294f0 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f  e of alloca() to
29500 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f   obtain space fo
29510 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69  r large automati
29520 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64  c objects.  By d
29530 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69  efault,.** obtai
29540 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c  n space from mal
29550 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  loc()..**.** The
29560 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e   alloca() routin
29570 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20  e never returns 
29580 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c  NULL.  This will
29590 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68   cause code path
295a0 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77  s.** that deal w
295b0 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ith sqlite3Stack
295c0 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73  Alloc() failures
295d0 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62   to be unreachab
295e0 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
295f0 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a  LITE_USE_ALLOCA.
29600 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29610 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
29620 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23  N)   alloca(N).#
29630 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
29640 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
29650 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63  N)  memset(alloc
29660 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65  a(N), 0, N).# de
29670 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
29680 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65  kFree(D,P).#else
29690 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
296a0 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
296b0 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  ,N)   sqlite3DbM
296c0 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20  allocRaw(D,N).# 
296d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
296e0 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
296f0 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  )  sqlite3DbMall
29700 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65  ocZero(D,N).# de
29710 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
29720 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
29730 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44   sqlite3DbFree(D
29740 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ,P).#endif../* D
29750 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68  o not allow both
29760 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d   MEMSYS5 and MEM
29770 53 59 53 33 20 74 6f 20 62 65 20 64 65 66 69 6e  SYS3 to be defin
29780 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20 49 66  ed together.  If
29790 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69   they.** are, di
297a0 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f  sable MEMSYS3.*/
297b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
297c0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f  NABLE_MEMSYS5.co
297d0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
297e0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
297f0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f  MemGetMemsys5(vo
29800 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49  id);.#undef SQLI
29810 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
29820 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  3.#endif.#ifdef 
29830 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
29840 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS3.const sqli
29850 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
29860 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
29870 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e  msys3(void);.#en
29880 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
29890 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
298a0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
298b0 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
298c0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
298d0 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
298e0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
298f0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
29900 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
29910 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
29920 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
29930 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
29940 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
29950 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
29960 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
29970 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  id);.#endif.#if 
29980 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
29990 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21  MUTEX_OMIT) && !
299a0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
299b0 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69  UTEX_NOOP).  voi
299c0 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42  d sqlite3MemoryB
299d0 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65  arrier(void);.#e
299e0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
299f0 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
29a00 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69  r().#endif..sqli
29a10 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
29a20 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74  3StatusValue(int
29a30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
29a40 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74  tatusUp(int, int
29a50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
29a60 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69  tatusDown(int, i
29a70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29a80 33 53 74 61 74 75 73 48 69 67 68 77 61 74 65 72  3StatusHighwater
29a90 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  (int, int);.int 
29aa0 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65  sqlite3Lookaside
29ab0 55 73 65 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Used(sqlite3*,in
29ac0 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20  t*);../* Access 
29ad0 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20  to mutexes used 
29ae0 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75  by sqlite3_statu
29af0 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d  s() */.sqlite3_m
29b00 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61  utex *sqlite3Pca
29b10 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b  che1Mutex(void);
29b20 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
29b30 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74  sqlite3MallocMut
29b40 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64  ex(void);..#if d
29b50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
29b60 41 42 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41 44  ABLE_MULTITHREAD
29b70 45 44 5f 43 48 45 43 4b 53 29 20 26 26 20 21 64  ED_CHECKS) && !d
29b80 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
29b90 54 45 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73  TEX_OMIT).void s
29ba0 71 6c 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f  qlite3MutexWarnO
29bb0 6e 43 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69  nContention(sqli
29bc0 74 65 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c  te3_mutex*);.#el
29bd0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
29be0 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f  te3MutexWarnOnCo
29bf0 6e 74 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64  ntention(x).#end
29c00 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
29c10 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
29c20 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20  _POINT.# define 
29c30 45 58 50 37 35 34 20 28 28 28 75 36 34 29 30 78  EXP754 (((u64)0x
29c40 37 66 66 29 3c 3c 35 32 29 0a 23 20 64 65 66 69  7ff)<<52).# defi
29c50 6e 65 20 4d 41 4e 37 35 34 20 28 28 28 28 75 36  ne MAN754 ((((u6
29c60 34 29 31 29 3c 3c 35 32 29 2d 31 29 0a 23 20 64  4)1)<<52)-1).# d
29c70 65 66 69 6e 65 20 49 73 4e 61 4e 28 58 29 20 28  efine IsNaN(X) (
29c80 28 28 58 29 26 45 58 50 37 35 34 29 3d 3d 45 58  ((X)&EXP754)==EX
29c90 50 37 35 34 20 26 26 20 28 28 58 29 26 4d 41 4e  P754 && ((X)&MAN
29ca0 37 35 34 29 21 3d 30 29 0a 20 20 69 6e 74 20 73  754)!=0).  int s
29cb0 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62  qlite3IsNaN(doub
29cc0 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  le);.#else.# def
29cd0 69 6e 65 20 49 73 4e 61 4e 28 58 29 20 20 20 20  ine IsNaN(X)    
29ce0 20 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20       0.# define 
29cf0 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20  sqlite3IsNaN(X) 
29d00 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
29d10 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
29d20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
29d30 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
29d40 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
29d50 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  SQL.** functions
29d60 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
29d70 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65  are the paramete
29d80 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66  rs to the printf
29d90 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  () function..*/.
29da0 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
29db0 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e  uments {.  int n
29dc0 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
29dd0 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d      /* Total num
29de0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
29df0 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b   */.  int nUsed;
29e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29e10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
29e20 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61  ments used so fa
29e30 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  r */.  sqlite3_v
29e40 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20  alue **apArg;   
29e50 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  /* The argument 
29e60 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68  values */.};..ch
29e70 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
29e80 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
29e90 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
29ea0 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
29eb0 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
29ec0 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
29ed0 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  st);.#if defined
29ee0 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
29ef0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
29f00 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a  _HAVE_OS_TRACE).
29f10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
29f20 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  bugPrintf(const 
29f30 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
29f40 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
29f50 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76  SQLITE_TEST).  v
29f60 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74  oid *sqlite3Test
29f70 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20  TextToPtr(const 
29f80 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
29f90 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
29fa0 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
29fb0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
29fc0 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20  Expr(TreeView*, 
29fd0 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29  const Expr*, u8)
29fe0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29ff0 54 72 65 65 56 69 65 77 42 61 72 65 45 78 70 72  TreeViewBareExpr
2a000 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
2a010 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c  const ExprList*,
2a020 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
2a030 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
2a040 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72  eViewExprList(Tr
2a050 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
2a060 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f  xprList*, u8, co
2a070 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2a080 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
2a090 65 77 53 72 63 4c 69 73 74 28 54 72 65 65 56 69  ewSrcList(TreeVi
2a0a0 65 77 2a 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69  ew*, const SrcLi
2a0b0 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
2a0c0 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65  ite3TreeViewSele
2a0d0 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ct(TreeView*, co
2a0e0 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29  nst Select*, u8)
2a0f0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2a100 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65  TreeViewWith(Tre
2a110 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
2a120 74 68 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65  th*, u8);.#ifnde
2a130 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
2a140 4e 44 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20  NDOWFUNC.  void 
2a150 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
2a160 69 6e 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c  indow(TreeView*,
2a170 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20   const Window*, 
2a180 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
2a190 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 46 75  te3TreeViewWinFu
2a1a0 6e 63 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  nc(TreeView*, co
2a1b0 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29  nst Window*, u8)
2a1c0 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
2a1d0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
2a1e0 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
2a1f0 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
2a200 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2a210 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61  lite3ErrorMsg(Pa
2a220 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
2a230 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c  *, ...);.int sql
2a240 69 74 65 33 45 72 72 6f 72 54 6f 50 61 72 73 65  ite3ErrorToParse
2a250 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
2a260 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71  .void sqlite3Deq
2a270 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69  uote(char*);.voi
2a280 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  d sqlite3Dequote
2a290 45 78 70 72 28 45 78 70 72 2a 29 3b 0a 76 6f 69  Expr(Expr*);.voi
2a2a0 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e  d sqlite3TokenIn
2a2b0 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29  it(Token*,char*)
2a2c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  ;.int sqlite3Key
2a2d0 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75  wordCode(const u
2a2e0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69  nsigned char*, i
2a2f0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a300 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a  RunParser(Parse*
2a310 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2a320 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  har **);.void sq
2a330 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e  lite3FinishCodin
2a340 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  g(Parse*);.int s
2a350 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67  qlite3GetTempReg
2a360 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
2a370 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
2a380 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29  pReg(Parse*,int)
2a390 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
2a3a0 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
2a3b0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2a3c0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61  te3ReleaseTempRa
2a3d0 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
2a3e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a3f0 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63  3ClearTempRegCac
2a400 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  he(Parse*);.#ifd
2a410 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2a420 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d  int sqlite3NoTem
2a430 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a  psInRange(Parse*
2a440 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  ,int,int);.#endi
2a450 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  f.Expr *sqlite3E
2a460 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  xprAlloc(sqlite3
2a470 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65  *,int,const Toke
2a480 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  n*,int);.Expr *s
2a490 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74  qlite3Expr(sqlit
2a4a0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
2a4b0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2a4c0 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74  e3ExprAttachSubt
2a4d0 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78  rees(sqlite3*,Ex
2a4e0 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  pr*,Expr*,Expr*)
2a4f0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50  ;.Expr *sqlite3P
2a500 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74  Expr(Parse*, int
2a510 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
2a520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78  .void sqlite3PEx
2a530 70 72 41 64 64 53 65 6c 65 63 74 28 50 61 72 73  prAddSelect(Pars
2a540 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63  e*, Expr*, Selec
2a550 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  t*);.Expr *sqlit
2a560 65 33 45 78 70 72 41 6e 64 28 50 61 72 73 65 2a  e3ExprAnd(Parse*
2a570 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  ,Expr*, Expr*);.
2a580 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2a590 72 53 69 6d 70 6c 69 66 69 65 64 41 6e 64 4f 72  rSimplifiedAndOr
2a5a0 28 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  (Expr*);.Expr *s
2a5b0 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69  qlite3ExprFuncti
2a5c0 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  on(Parse*,ExprLi
2a5d0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  st*, Token*, int
2a5e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a5f0 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
2a600 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
2a610 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
2a620 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
2a630 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
2a640 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2a650 72 55 6e 6d 61 70 41 6e 64 44 65 6c 65 74 65 28  rUnmapAndDelete(
2a660 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2a670 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
2a680 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
2a690 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
2a6a0 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73  ,Expr*);.ExprLis
2a6b0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
2a6c0 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50  stAppendVector(P
2a6d0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
2a6e0 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  IdList*,Expr*);.
2a6f0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a700 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72  ListSetSortOrder
2a710 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69  (ExprList*,int,i
2a720 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2a730 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
2a740 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
2a750 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
2a760 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
2a770 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
2a780 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73  *,ExprList*,cons
2a790 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2a7a0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2a7b0 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  e3ExprListDelete
2a7c0 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c  (sqlite3*, ExprL
2a7d0 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  ist*);.u32 sqlit
2a7e0 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28  e3ExprListFlags(
2a7f0 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29  const ExprList*)
2a800 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2a810 65 78 48 61 73 44 75 70 6c 69 63 61 74 65 52 6f  exHasDuplicateRo
2a820 6f 74 50 61 67 65 28 49 6e 64 65 78 2a 29 3b 0a  otPage(Index*);.
2a830 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28  int sqlite3Init(
2a840 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a  sqlite3*, char**
2a850 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2a860 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a  itCallback(void*
2a870 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63  , int, char**, c
2a880 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
2a890 74 65 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69 74  te3InitOne(sqlit
2a8a0 65 33 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a  e3*, int, char**
2a8b0 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
2a8c0 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65  ite3Pragma(Parse
2a8d0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
2a8e0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66  Token*,int);.#if
2a8f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2a900 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f  _VIRTUALTABLE.Mo
2a910 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61  dule *sqlite3Pra
2a920 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28  gmaVtabRegister(
2a930 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
2a940 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e  har *zName);.#en
2a950 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2a960 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
2a970 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
2a980 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
2a990 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
2a9a0 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
2a9b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
2a9c0 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
2a9d0 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
2a9e0 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
2a9f0 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
2aa00 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2aa10 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c  sqlite3DeleteCol
2aa20 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33  umnNames(sqlite3
2aa30 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  *,Table*);.int s
2aa40 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f  qlite3ColumnsFro
2aa50 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
2aa60 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c  ,ExprList*,i16*,
2aa70 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20  Column**);.void 
2aa80 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64  sqlite3SelectAdd
2aa90 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c  ColumnTypeAndCol
2aaa0 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  lation(Parse*,Ta
2aab0 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 2c 63 68 61  ble*,Select*,cha
2aac0 72 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  r);.Table *sqlit
2aad0 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
2aae0 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
2aaf0 74 2a 2c 63 68 61 72 29 3b 0a 76 6f 69 64 20 73  t*,char);.void s
2ab00 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
2ab10 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
2ab20 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  nt);.Index *sqli
2ab30 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
2ab40 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20  ex(Table*);.i16 
2ab50 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49  sqlite3ColumnOfI
2ab60 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36  ndex(Index*, i16
2ab70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2ab80 5f 4f 4d 49 54 5f 47 45 4e 45 52 41 54 45 44 5f  _OMIT_GENERATED_
2ab90 43 4f 4c 55 4d 4e 53 0a 23 20 64 65 66 69 6e 65  COLUMNS.# define
2aba0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
2abb0 54 61 62 6c 65 28 54 2c 58 29 20 28 58 29 20 20  Table(T,X) (X)  
2abc0 2f 2a 20 4e 6f 2d 6f 70 20 70 61 73 73 2d 74 68  /* No-op pass-th
2abd0 72 6f 75 67 68 20 2a 2f 0a 23 65 6c 73 65 0a 20  rough */.#else. 
2abe0 20 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75   i16 sqlite3Colu
2abf0 6d 6e 4f 66 54 61 62 6c 65 28 54 61 62 6c 65 2a  mnOfTable(Table*
2ac00 2c 20 69 31 36 29 3b 0a 23 65 6e 64 69 66 0a 76  , i16);.#endif.v
2ac10 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
2ac20 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
2ac30 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
2ac40 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66  nt,int,int);.#if
2ac50 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
2ac60 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20  IDDEN_COLUMNS.  
2ac70 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
2ac80 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
2ac90 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c  Name(Table*, Col
2aca0 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  umn*);.#else.# d
2acb0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c  efine sqlite3Col
2acc0 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
2acd0 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f  mName(T,C) /* no
2ace0 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f  -op */.#endif.vo
2acf0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
2ad00 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  umn(Parse*,Token
2ad10 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
2ad20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
2ad30 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
2ad40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
2ad50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
2ad60 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2ad70 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2ad80 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
2ad90 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
2ada0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
2adb0 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
2adc0 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
2add0 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  xpr*,const char*
2ade0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
2adf0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
2ae00 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a  llateType(Parse*
2ae10 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2ae20 73 71 6c 69 74 65 33 41 64 64 47 65 6e 65 72 61  sqlite3AddGenera
2ae30 74 65 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ted(Parse*,Expr*
2ae40 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
2ae50 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
2ae60 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
2ae70 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b  en*,u8,Select*);
2ae80 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
2ae90 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
2aea0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
2aeb0 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
2aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aed0 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
2aee0 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 23  ar**,char **);.#
2aef0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53  ifdef SQLITE_HAS
2af00 5f 43 4f 44 45 43 0a 20 20 69 6e 74 20 73 71 6c  _CODEC.  int sql
2af10 69 74 65 33 43 6f 64 65 63 51 75 65 72 79 50 61  ite3CodecQueryPa
2af20 72 61 6d 65 74 65 72 73 28 73 71 6c 69 74 65 33  rameters(sqlite3
2af30 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
2af40 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
2af50 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2af60 65 33 43 6f 64 65 63 51 75 65 72 79 50 61 72 61  e3CodecQueryPara
2af70 6d 65 74 65 72 73 28 41 2c 42 2c 43 29 20 30 0a  meters(A,B,C) 0.
2af80 23 65 6e 64 69 66 0a 42 74 72 65 65 20 2a 73 71  #endif.Btree *sq
2af90 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
2afa0 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
2afb0 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65  t char*);..#ifde
2afc0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2afd0 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  BLE.# define sql
2afe0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20  ite3FaultSim(X) 
2aff0 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a  SQLITE_OK.#else.
2b000 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75    int sqlite3Fau
2b010 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64  ltSim(int);.#end
2b020 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  if..Bitvec *sqli
2b030 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
2b040 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
2b050 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
2b060 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
2b070 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
2b080 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c  NotNull(Bitvec*,
2b090 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
2b0a0 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
2b0b0 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
2b0c0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
2b0d0 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
2b0e0 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
2b0f0 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
2b100 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
2b110 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
2b120 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66  ze(Bitvec*);.#if
2b130 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
2b140 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74  STABLE.int sqlit
2b150 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
2b160 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23  est(int,int*);.#
2b170 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73  endif..RowSet *s
2b180 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
2b190 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
2b1a0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 44 65   sqlite3RowSetDe
2b1b0 6c 65 74 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  lete(void*);.voi
2b1c0 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43  d sqlite3RowSetC
2b1d0 6c 65 61 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  lear(void*);.voi
2b1e0 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
2b1f0 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
2b200 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2b210 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
2b220 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20  t*, int iBatch, 
2b230 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2b240 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53  3RowSetNext(RowS
2b250 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69  et*, i64*);..voi
2b260 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56  d sqlite3CreateV
2b270 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  iew(Parse*,Token
2b280 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
2b290 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
2b2a0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66  *,int,int);..#if
2b2b0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2b2c0 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21  _OMIT_VIEW) || !
2b2d0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2b2e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2b2f0 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  ).  int sqlite3V
2b300 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
2b310 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  s(Parse*,Table*)
2b320 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2b330 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
2b340 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20  olumnNames(A,B) 
2b350 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51  0.#endif..#if SQ
2b360 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
2b370 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  D>30.  int sqlit
2b380 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
2b390 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66  yDbMask);.#endif
2b3a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
2b3b0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
2b3c0 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
2b3d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b3e0 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61  CodeDropTable(Pa
2b3f0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2b400 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2b410 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65  lite3DeleteTable
2b420 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
2b430 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b440 46 72 65 65 49 6e 64 65 78 28 73 71 6c 69 74 65  FreeIndex(sqlite
2b450 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66  3*, Index*);.#if
2b460 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2b470 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
2b480 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
2b490 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
2b4a0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
2b4b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2b4c0 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50  toincrementEnd(P
2b4d0 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23  arse *pParse);.#
2b4e0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2b4f0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
2b500 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66  ntBegin(X).# def
2b510 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
2b520 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23  ncrementEnd(X).#
2b530 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2b540 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c  e3Insert(Parse*,
2b550 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63   SrcList*, Selec
2b560 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
2b570 2c 20 55 70 73 65 72 74 2a 29 3b 0a 23 69 66 6e  , Upsert*);.#ifn
2b580 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b590 47 45 4e 45 52 41 54 45 44 5f 43 4f 4c 55 4d 4e  GENERATED_COLUMN
2b5a0 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  S.  void sqlite3
2b5b0 43 6f 6d 70 75 74 65 53 74 6f 72 65 64 43 6f 6c  ComputeStoredCol
2b5c0 75 6d 6e 73 28 50 61 72 73 65 2a 2c 20 69 6e 74  umns(Parse*, int
2b5d0 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 65 6e 64 69  , Table*);.#endi
2b5e0 66 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  f.void *sqlite3A
2b5f0 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
2b600 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
2b610 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
2b620 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
2b630 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20  tAppend(Parse*, 
2b640 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
2b650 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
2b660 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
2b670 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
2b680 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
2b690 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 50 61  rcListEnlarge(Pa
2b6a0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2b6b0 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
2b6c0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2b6d0 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
2b6e0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2b6f0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
2b700 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
2b710 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
2b720 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
2b730 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
2b740 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
2b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b760 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
2b770 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
2b780 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
2b790 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
2b7a0 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
2b7b0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
2b7c0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2b7d0 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72  te3SrcListFuncAr
2b7e0 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  gs(Parse*, SrcLi
2b7f0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  st*, ExprList*);
2b800 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
2b810 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
2b820 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
2b830 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
2b840 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
2b850 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
2b860 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
2b870 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
2b880 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
2b890 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
2b8a0 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
2b8b0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
2b8c0 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
2b8d0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
2b8e0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
2b8f0 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
2b900 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
2b910 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
2b920 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
2b930 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2b940 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72  3CreateIndex(Par
2b950 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
2b960 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c  *,SrcList*,ExprL
2b970 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c  ist*,int,Token*,
2b980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b990 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
2b9a0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
2b9b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
2b9c0 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53  pIndex(Parse*, S
2b9d0 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  rcList*, int);.i
2b9e0 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
2b9f0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2ba00 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a  , SelectDest*);.
2ba10 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
2ba20 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c  electNew(Parse*,
2ba30 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73  ExprList*,SrcLis
2ba40 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
2ba50 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
2ba70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32  r*,ExprList*,u32
2ba80 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
2ba90 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
2baa0 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
2bab0 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
2bac0 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
2bad0 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
2bae0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2baf0 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
2bb00 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
2bb10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
2bb20 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
2bb30 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
2bb40 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2bb50 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2bb60 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
2bb70 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
2bb80 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2bb90 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
2bba0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
2bbb0 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
2bbc0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
2bbd0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63  xprList*,Expr*,c
2bbe0 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
2bbf0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2bc00 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
2bc10 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78  List*, Expr*, Ex
2bc20 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  prList*, Expr*);
2bc30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
2bc40 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
2bc50 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
2bc60 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69  Expr*,int,ExprLi
2bc70 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20  st*,Expr*,.     
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 70                Up
2bc90 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66  sert*);.WhereInf
2bca0 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42  o *sqlite3WhereB
2bcb0 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c  egin(Parse*,SrcL
2bcc0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2bcd0 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  ist*,ExprList*,u
2bce0 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  16,int);.void sq
2bcf0 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68  lite3WhereEnd(Wh
2bd00 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73  ereInfo*);.LogEs
2bd10 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  t sqlite3WhereOu
2bd20 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
2bd30 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2bd40 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
2bd50 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
2bd60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
2bd70 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
2bd80 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2bd90 69 74 65 33 57 68 65 72 65 4f 72 64 65 72 42 79  ite3WhereOrderBy
2bda0 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28 57 68  LimitOptLabel(Wh
2bdb0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2bdc0 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
2bdd0 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
2bde0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2bdf0 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
2be00 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2be10 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
2be20 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
2be30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2be40 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
2be50 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
2be60 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
2be70 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20  _OFF      0     
2be80 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45     /* Use of ONE
2be90 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  PASS not allowed
2bea0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
2beb0 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20  ASS_SINGLE   1  
2bec0 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
2bed0 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e   valid for a sin
2bee0 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a  gle row update *
2bef0 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  /.#define ONEPAS
2bf00 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20  S_MULTI    2    
2bf10 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69      /* ONEPASS i
2bf20 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74  s valid for mult
2bf30 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69  iple rows */.voi
2bf40 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
2bf50 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e  eLoadIndexColumn
2bf60 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
2bf70 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2bf80 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2bf90 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
2bfa0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2bfb0 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
2bfc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2bfd0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
2bfe0 66 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54  fTable(Parse*, T
2bff0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
2c000 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2c010 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
2c020 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
2c030 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2c040 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
2c050 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2c060 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2c070 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65  prCodeCopy(Parse
2c080 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2c090 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2c0a0 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50  CodeFactorable(P
2c0b0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2c0c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2c0d0 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61  xprCodeAtInit(Pa
2c0e0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2c0f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2c100 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
2c110 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
2c120 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c130 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
2c140 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2c150 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2c160 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
2c170 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2c180 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2c190 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
2c1a0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2c1b0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
2c1c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2c1d0 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
2c1e0 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
2c1f0 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
2c200 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2c210 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
2c220 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
2c230 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
2c240 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
2c250 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20  ITE_ECEL_REF    
2c260 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45    0x04  /* Use E
2c270 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
2c280 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69  erByCol */.#defi
2c290 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f  ne SQLITE_ECEL_O
2c2a0 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a  MITREF  0x08  /*
2c2b0 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73   Omit if ExprLis
2c2c0 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
2c2d0 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
2c2e0 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
2c2f0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2c300 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2c310 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
2c320 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2c330 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2c340 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
2c350 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
2c360 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
2c370 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
2c380 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
2c390 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2c3a0 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
2c3b0 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20   LOCATE_VIEW    
2c3c0 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43  0x01.#define LOC
2c3d0 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32  ATE_NOERR   0x02
2c3e0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
2c3f0 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
2c400 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73  *,u32 flags,cons
2c410 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2c420 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
2c430 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
2c440 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20  Item(Parse*,u32 
2c450 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63  flags,struct Src
2c460 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
2c470 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
2c480 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
2c490 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2c4a0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2c4b0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2c4c0 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
2c4d0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
2c4e0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2c4f0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2c500 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
2c510 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2c520 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2c530 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65  cuum(Parse*,Toke
2c540 6e 2a 2c 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  n*,Expr*);.int s
2c550 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
2c560 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
2c570 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2c580 61 6c 75 65 2a 29 3b 0a 63 68 61 72 20 2a 73 71  alue*);.char *sq
2c590 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b  lite3NameFromTok
2c5a0 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  en(sqlite3*, Tok
2c5b0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2c5c0 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72  3ExprCompare(Par
2c5d0 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  se*,Expr*, Expr*
2c5e0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2c5f0 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b  te3ExprCompareSk
2c600 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  ip(Expr*, Expr*,
2c610 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2c620 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
2c630 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
2c640 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  rList*, int);.in
2c650 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
2c660 6c 69 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c  liesExpr(Parse*,
2c670 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
2c680 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2c690 78 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c  xprImpliesNonNul
2c6a0 6c 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b  lRow(Expr*,int);
2c6b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2c6c0 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
2c6d0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
2c6e0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2c6f0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
2c700 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
2c710 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
2c720 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2c730 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45  CoveredByIndex(E
2c740 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  xpr*, int iCur, 
2c750 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e  Index *pIdx);.in
2c760 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
2c770 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
2c780 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
2c790 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
2c7a0 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  dbe(Parse*);.#if
2c7b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
2c7c0 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
2c7d0 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
2c7e0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
2c7f0 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
2c800 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64  tate(void);.#end
2c810 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
2c820 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
2c830 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
2c840 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
2c850 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69  Schema(Parse*, i
2c860 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c870 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64  3CodeVerifyNamed
2c880 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63  Schema(Parse*, c
2c890 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b  onst char *zDb);
2c8a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
2c8b0 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  inTransaction(Pa
2c8c0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
2c8d0 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73   sqlite3EndTrans
2c8e0 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e  action(Parse*,in
2c8f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2c900 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
2c910 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
2c920 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
2c930 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
2c940 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
2c950 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
2c960 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
2c970 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2c980 74 65 33 45 78 70 72 49 64 54 6f 54 72 75 65 46  te3ExprIdToTrueF
2c990 61 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  alse(Expr*);.int
2c9a0 20 73 71 6c 69 74 65 33 45 78 70 72 54 72 75 74   sqlite3ExprTrut
2c9b0 68 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70  hValue(const Exp
2c9c0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2c9d0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
2c9e0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2c9f0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
2ca00 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
2ca10 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2ca20 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
2ca30 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a  ion(Expr*, u8);.
2ca40 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
2ca50 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70  sConstantOrGroup
2ca60 42 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  By(Parse*, Expr*
2ca70 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
2ca80 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
2ca90 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
2caa0 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  r*,int);.#ifdef 
2cab0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
2cac0 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73  RSOR_HINTS.int s
2cad0 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69  qlite3ExprContai
2cae0 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a  nsSubquery(Expr*
2caf0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2cb00 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
2cb10 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
2cb20 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2cb30 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
2cb40 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2cb50 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
2cb60 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
2cb70 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
2cb80 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
2cb90 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
2cba0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
2cbb0 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
2cbc0 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c  .    Parse*,Tabl
2cbd0 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
2cbe0 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
2cbf0 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  8,u8,int);.void 
2cc00 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
2cc10 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
2cc20 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2cc30 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2cc40 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
2cc50 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
2cc60 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
2cc70 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
2cc80 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
2cc90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2cca0 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
2ccb0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
2ccc0 74 20 73 71 6c 69 74 65 33 45 78 70 72 52 65 66  t sqlite3ExprRef
2ccd0 65 72 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f  erencesUpdatedCo
2cce0 6c 75 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c  lumn(Expr*,int*,
2ccf0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2cd00 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  e3GenerateConstr
2cd10 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
2cd20 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e  *,Table*,int*,in
2cd30 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20  t,int,int,int,. 
2cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd60 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e      u8,u8,int,in
2cd70 74 2a 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29  t*,int*,Upsert*)
2cd80 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2cd90 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
2cda0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53  .  void sqlite3S
2cdb0 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56  etMakeRecordP5(V
2cdc0 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  dbe*,Table*);.#e
2cdd0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2cde0 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
2cdf0 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  dP5(A,B).#endif.
2ce00 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
2ce10 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
2ce20 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
2ce30 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  int,int,int*,int
2ce40 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ,int,int);.int s
2ce50 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
2ce60 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
2ce70 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75  , Table*, int, u
2ce80 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74  8, int, u8*, int
2ce90 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  *, int*);.void s
2cea0 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
2ceb0 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a  Operation(Parse*
2cec0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2ced0 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72  d sqlite3MultiWr
2cee0 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ite(Parse*);.voi
2cef0 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72  d sqlite3MayAbor
2cf00 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
2cf10 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74  sqlite3HaltConst
2cf20 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
2cf30 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69  t, int, char*, i
2cf40 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  8, u8);.void sql
2cf50 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72  ite3UniqueConstr
2cf60 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2cf70 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
2cf80 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73  sqlite3RowidCons
2cf90 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
2cfa0 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70  nt, Table*);.Exp
2cfb0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
2cfc0 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
2cfd0 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20  ,int);.ExprList 
2cfe0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
2cff0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
2d000 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63  rList*,int);.Src
2d010 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
2d020 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
2d030 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ,SrcList*,int);.
2d040 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
2d050 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  dListDup(sqlite3
2d060 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65  *,IdList*);.Sele
2d070 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
2d080 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  tDup(sqlite3*,Se
2d090 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  lect*,int);.Func
2d0a0 44 65 66 20 2a 73 71 6c 69 74 65 33 46 75 6e 63  Def *sqlite3Func
2d0b0 74 69 6f 6e 53 65 61 72 63 68 28 69 6e 74 2c 63  tionSearch(int,c
2d0c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2d0d0 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42  d sqlite3InsertB
2d0e0 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63  uiltinFuncs(Func
2d0f0 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44  Def*,int);.FuncD
2d100 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
2d110 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
2d120 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2d130 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71  ,u8,u8);.void sq
2d140 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69  lite3RegisterBui
2d150 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f  ltinFunctions(vo
2d160 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
2d170 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
2d180 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
2d190 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2d1a0 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74  gisterPerConnect
2d1b0 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  ionBuiltinFuncti
2d1c0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ons(sqlite3*);.i
2d1d0 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
2d1e0 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
2d1f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
2d200 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
2d210 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
2d220 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
2d230 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
2d240 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
2d250 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
2d260 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
2d270 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2d280 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
2d290 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
2d2a0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2d2b0 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
2d2c0 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65  *,Expr*,int);.#e
2d2d0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2d2e0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2d2f0 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
2d300 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
2d310 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
2d320 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
2d330 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
2d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d350 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
2d360 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
2d370 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
2d380 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
2d390 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
2d3a0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2d3b0 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
2d3c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2d3d0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2d3e0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
2d3f0 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
2d400 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
2d410 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
2d420 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
2d430 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
2d440 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
2d450 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
2d460 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
2d470 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
2d480 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
2d490 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2d4a0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
2d4b0 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
2d4c0 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
2d4d0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2d4f0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
2d500 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
2d510 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
2d520 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
2d530 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
2d540 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
2d550 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
2d560 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
2d570 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
2d580 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
2d590 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
2d5a0 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
2d5b0 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
2d5c0 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
2d5d0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
2d5e0 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
2d5f0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
2d600 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d620 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2d630 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2d640 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ar*);.  TriggerS
2d650 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2d660 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 50 61  gerInsertStep(Pa
2d670 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  rse*,Token*, IdL
2d680 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
2d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
2d6b0 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a  lect*,u8,Upsert*
2d6c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6e0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2d6f0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2d700 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2d710 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2d720 72 55 70 64 61 74 65 53 74 65 70 28 50 61 72 73  rUpdateStep(Pars
2d730 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  e*,Token*,ExprLi
2d740 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a  st*, Expr*, u8,.
2d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d770 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2d780 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2d790 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2d7a0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
2d7b0 65 6c 65 74 65 53 74 65 70 28 50 61 72 73 65 2a  eleteStep(Parse*
2d7c0 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a  ,Token*, Expr*,.
2d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7f0 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2d800 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2d810 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2d820 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
2d830 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
2d840 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2d850 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2d860 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
2d870 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
2d880 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
2d890 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
2d8a0 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
2d8b0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
2d8c0 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
2d8d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
2d8e0 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
2d8f0 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
2d900 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
2d910 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20  : (p)).# define 
2d920 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
2d930 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
2d940 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  evel==0).#else.#
2d950 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2d960 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43  riggersExist(B,C
2d970 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69  ,D,E,F) 0.# defi
2d980 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  ne sqlite3Delete
2d990 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64  Trigger(A,B).# d
2d9a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f  efine sqlite3Dro
2d9b0 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29  pTriggerPtr(A,B)
2d9c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d9d0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2d9e0 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23  Trigger(A,B,C).#
2d9f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2da00 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c  odeRowTrigger(A,
2da10 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29  B,C,D,E,F,G,H,I)
2da20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2da30 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
2da40 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  irect(A,B,C,D,E,
2da50 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  F).# define sqli
2da60 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58  te3TriggerList(X
2da70 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20  , Y) 0.# define 
2da80 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
2da90 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69  evel(p) p.# defi
2daa0 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c  ne sqlite3IsTopl
2dab0 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69  evel(p) 1.# defi
2dac0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
2dad0 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44  rColmask(A,B,C,D
2dae0 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66  ,E,F,G) 0.#endif
2daf0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69  ..int sqlite3Joi
2db00 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  nType(Parse*, To
2db10 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
2db20 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2db30 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e  te3CreateForeign
2db40 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
2db50 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45  List*, Token*, E
2db60 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
2db70 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65  void sqlite3Defe
2db80 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  rForeignKey(Pars
2db90 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65  e*, int);.#ifnde
2dba0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
2dbb0 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f  THORIZATION.  vo
2dbc0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  id sqlite3AuthRe
2dbd0 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ad(Parse*,Expr*,
2dbe0 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a  Schema*,SrcList*
2dbf0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2dc00 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a  AuthCheck(Parse*
2dc10 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  ,int, const char
2dc20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2dc30 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2dc40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2dc50 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73  ContextPush(Pars
2dc60 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a  e*, AuthContext*
2dc70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2dc80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2dc90 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74  thContextPop(Aut
2dca0 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e  hContext*);.  in
2dcb0 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  t sqlite3AuthRea
2dcc0 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e  dCol(Parse*, con
2dcd0 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
2dce0 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23   char *, int);.#
2dcf0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2dd00 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c  lite3AuthRead(a,
2dd10 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20  b,c,d).# define 
2dd20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
2dd30 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
2dd40 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
2dd50 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
2dd60 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
2dd70 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2dd80 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
2dd90 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
2dda0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2ddb0 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
2ddc0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
2ddd0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2dde0 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
2ddf0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2de00 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62  qlite3FixInit(Db
2de10 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20  Fixer*, Parse*, 
2de20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2de30 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
2de40 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
2de50 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  rcList(DbFixer*,
2de60 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
2de70 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74  sqlite3FixSelect
2de80 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63  (DbFixer*, Selec
2de90 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2dea0 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a  FixExpr(DbFixer*
2deb0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
2dec0 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74  lite3FixExprList
2ded0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c  (DbFixer*, ExprL
2dee0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2def0 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70  e3FixTriggerStep
2df00 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67  (DbFixer*, Trigg
2df10 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71  erStep*);.int sq
2df20 6c 69 74 65 33 52 65 61 6c 53 61 6d 65 41 73 49  lite3RealSameAsI
2df30 6e 74 28 64 6f 75 62 6c 65 2c 73 71 6c 69 74 65  nt(double,sqlite
2df40 33 5f 69 6e 74 36 34 29 3b 0a 69 6e 74 20 73 71  3_int64);.int sq
2df50 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
2df60 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a  char *z, double*
2df70 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
2df80 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
2df90 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
2dfa0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2dfb0 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  Atoi(const char*
2dfc0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2dfd0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74  E_OMIT_UTF16.int
2dfe0 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74   sqlite3Utf16Byt
2dff0 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20  eLen(const void 
2e000 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61  *pData, int nCha
2e010 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  r);.#endif.int s
2e020 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65  qlite3Utf8CharLe
2e030 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44  n(const char *pD
2e040 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b  ata, int nByte);
2e050 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38  .u32 sqlite3Utf8
2e060 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29  Read(const u8**)
2e070 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
2e080 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67  LogEst(u64);.Log
2e090 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2e0a0 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45  tAdd(LogEst,LogE
2e0b0 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  st);.#ifndef SQL
2e0c0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2e0d0 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c  TABLE.LogEst sql
2e0e0 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f  ite3LogEstFromDo
2e0f0 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65  uble(double);.#e
2e100 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2e110 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
2e120 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20  TMT_SCANSTATUS) 
2e130 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
2e140 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
2e150 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64  TAT4) || \.    d
2e160 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58  efined(SQLITE_EX
2e170 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f  PLAIN_ESTIMATED_
2e180 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65  ROWS).u64 sqlite
2e190 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67  3LogEstToInt(Log
2e1a0 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69  Est);.#endif.VLi
2e1b0 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74  st *sqlite3VList
2e1c0 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69  Add(sqlite3*,VLi
2e1d0 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  st*,const char*,
2e1e0 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20  int,int);.const 
2e1f0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4c 69  char *sqlite3VLi
2e200 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73  stNumToName(VLis
2e210 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t*,int);.int sql
2e220 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e  ite3VListNameToN
2e230 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  um(VList*,const 
2e240 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a  char*,int);../*.
2e250 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72  ** Routines to r
2e260 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61  ead and write va
2e270 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
2e280 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75  tegers.  These u
2e290 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66  sed to.** be def
2e2a0 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75  ined locally, bu
2e2b0 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65  t now we use the
2e2c0 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73   varint routines
2e2d0 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a   in the util.c.*
2e2e0 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  * file..*/.int s
2e2f0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
2e300 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
2e310 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  u64);.u8 sqlite3
2e320 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20  GetVarint(const 
2e330 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2e340 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69   u64 *);.u8 sqli
2e350 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
2e360 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2e370 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e  ar *, u32 *);.in
2e380 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t sqlite3VarintL
2e390 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a  en(u64 v);../*.*
2e3a0 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  * The common cas
2e3b0 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e  e is for a varin
2e3c0 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65  t to be a single
2e3d0 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c   byte.  They fol
2e3e0 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73  lowing.** macros
2e3f0 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d   handle the comm
2e400 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74 20  on case without 
2e410 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c  a procedure call
2e420 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a  , but then call.
2e430 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  ** the procedure
2e440 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69   for larger vari
2e450 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  nts..*/.#define 
2e460 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  getVarint32(A,B)
2e470 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29    \.  (u8)((*(A)
2e480 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d  <(u8)0x80)?((B)=
2e490 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c  (u32)*(A)),1:sql
2e4a0 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
2e4b0 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29  (A),(u32 *)&(B))
2e4c0 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  ).#define putVar
2e4d0 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
2e4e0 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28  (u8)(((u32)(B)<(
2e4f0 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d  u32)0x80)?(*(A)=
2e500 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
2e510 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65  B)),1:\.  sqlite
2e520 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28  3PutVarint((A),(
2e530 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74  B))).#define get
2e540 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
2e550 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69  3GetVarint.#defi
2e560 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20  ne putVarint    
2e570 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2e580 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ...const char *s
2e590 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
2e5a0 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c  ityStr(sqlite3*,
2e5b0 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
2e5c0 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e  qlite3TableAffin
2e5d0 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ity(Vdbe*, Table
2e5e0 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  *, int);.char sq
2e5f0 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69  lite3CompareAffi
2e600 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
2e610 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e  , char aff2);.in
2e620 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66  t sqlite3IndexAf
2e630 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70  finityOk(Expr *p
2e640 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61  Expr, char idx_a
2e650 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73  ffinity);.char s
2e660 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d  qlite3TableColum
2e670 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c 65 2a  nAffinity(Table*
2e680 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69  ,int);.char sqli
2e690 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28  te3ExprAffinity(
2e6a0 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e  Expr *pExpr);.in
2e6b0 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28  t sqlite3Atoi64(
2e6c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
2e6d0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
2e6e0 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
2e6f0 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72  ToI64(const char
2e700 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73  *, i64*);.void s
2e710 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d  qlite3ErrorWithM
2e720 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  sg(sqlite3*, int
2e730 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  , const char*,..
2e740 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
2e750 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
2e760 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2e770 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71 6c  3SystemError(sql
2e780 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2e790 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c   *sqlite3HexToBl
2e7a0 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  ob(sqlite3*, con
2e7b0 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
2e7c0 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65  n);.u8 sqlite3He
2e7d0 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69  xToInt(int h);.i
2e7e0 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72  nt sqlite3TwoPar
2e7f0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54  tName(Parse *, T
2e800 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  oken *, Token *,
2e810 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66   Token **);..#if
2e820 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2e830 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63  NEED_ERR_NAME).c
2e840 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2e850 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a  e3ErrName(int);.
2e860 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2e870 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45 53  QLITE_ENABLE_DES
2e880 45 52 49 41 4c 49 5a 45 0a 69 6e 74 20 73 71 6c  ERIALIZE.int sql
2e890 69 74 65 33 4d 65 6d 64 62 49 6e 69 74 28 76 6f  ite3MemdbInit(vo
2e8a0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e  id);.#endif..con
2e8b0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2e8c0 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74  ErrStr(int);.int
2e8d0 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
2e8e0 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ma(Parse *pParse
2e8f0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2e900 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73  te3FindCollSeq(s
2e910 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20  qlite3*,u8 enc, 
2e920 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2e930 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 42  ;.int sqlite3IsB
2e940 69 6e 61 72 79 28 63 6f 6e 73 74 20 43 6f 6c 6c  inary(const Coll
2e950 53 65 71 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Seq*);.CollSeq *
2e960 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
2e970 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2e980 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
2e990 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
2e9a0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
2e9b0 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2e9c0 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
2e9d0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2e9e0 45 78 70 72 4e 4e 43 6f 6c 6c 53 65 71 28 50 61  ExprNNCollSeq(Pa
2e9f0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2ea00 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
2ea10 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
2ea20 71 4d 61 74 63 68 28 50 61 72 73 65 2a 2c 45 78  qMatch(Parse*,Ex
2ea30 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
2ea40 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
2ea50 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
2ea60 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2ea70 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  *, const Token*,
2ea80 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
2ea90 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
2eaa0 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c  teString(Parse*,
2eab0 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
2eac0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2ead0 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
2eae0 28 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  (Expr*);.Expr *s
2eaf0 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
2eb00 6c 6c 61 74 65 41 6e 64 4c 69 6b 65 6c 79 28 45  llateAndLikely(E
2eb10 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2eb20 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
2eb30 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
2eb40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
2eb50 72 69 74 61 62 6c 65 53 63 68 65 6d 61 28 73 71  ritableSchema(sq
2eb60 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2eb70 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e  ite3CheckObjectN
2eb80 61 6d 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ame(Parse*, cons
2eb90 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2eba0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2ebb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
2ebc0 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
2ebd0 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
2ebe0 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
2ebf0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2ec00 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
2ec10 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2ec20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
2ec30 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2ec40 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
2ec50 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
2ec60 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
2ec70 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
2ec80 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
2ec90 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
2eca0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2ecb0 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2ecc0 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
2ecd0 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
2ece0 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
2ecf0 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
2ed00 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
2ed10 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
2ed20 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
2ed30 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
2ed40 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2ed50 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2ed60 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
2ed70 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
2ed80 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
2ed90 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
2eda0 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
2edb0 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
2edc0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2edd0 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c  Null(sqlite3_val
2ede0 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ue*);.void sqlit
2edf0 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
2ee00 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 23 69 66  te3_value*);.#if
2ee10 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
2ee20 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
2ee30 74 65 33 52 65 73 75 6c 74 49 6e 74 52 65 61 6c  te3ResultIntReal
2ee40 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2ee50 2a 29 3b 0a 23 65 6e 64 69 66 0a 73 71 6c 69 74  *);.#endif.sqlit
2ee60 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65  e3_value *sqlite
2ee70 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65  3ValueNew(sqlite
2ee80 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  3 *);.#ifndef SQ
2ee90 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
2eea0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
2eeb0 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
2eec0 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2eed0 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69  t, u8);.#endif.i
2eee0 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  nt sqlite3ValueF
2eef0 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20  romExpr(sqlite3 
2ef00 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75  *, Expr *, u8, u
2ef10 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
2ef20 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
2ef30 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
2ef40 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c  nity(sqlite3_val
2ef50 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23  ue *, u8, u8);.#
2ef60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2ef70 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72  ALGAMATION.exter
2ef80 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2ef90 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63   char sqlite3Opc
2efa0 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65  odeProperty[];.e
2efb0 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72  xtern const char
2efc0 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52   sqlite3StrBINAR
2efd0 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  Y[];.extern cons
2efe0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2eff0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
2f000 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
2f010 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2f020 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
2f030 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  p[];.extern SQLI
2f040 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71  TE_WSD struct Sq
2f050 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69  lite3Config sqli
2f060 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72  te3Config;.exter
2f070 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  n FuncDefHash sq
2f080 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63  lite3BuiltinFunc
2f090 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
2f0a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
2f0b0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
2f0c0 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
2f0d0 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64  ndif.#endif.#ifd
2f0e0 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
2f0f0 65 78 74 65 72 6e 20 73 71 6c 69 74 65 33 5f 75  extern sqlite3_u
2f100 69 6e 74 36 34 20 73 71 6c 69 74 65 33 4e 50 72  int64 sqlite3NPr
2f110 6f 66 69 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66  ofileCnt;.#endif
2f120 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
2f130 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
2f140 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
2f150 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2f160 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
2f170 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2f180 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2f190 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
2f1a0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2f1b0 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
2f1c0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2f1d0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2f1e0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
2f1f0 61 6d 65 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  ameColumn(Parse*
2f200 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2f210 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
2f220 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
2f230 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2f240 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
2f250 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
2f260 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
2f270 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
2f280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2f290 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
2f2a0 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
2f2b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2f2c0 69 74 65 33 43 6f 64 65 52 68 73 4f 66 49 4e 28  ite3CodeRhsOfIN(
2f2d0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
2f2e0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2f2f0 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61  CodeSubselect(Pa
2f300 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
2f310 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2f320 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
2f330 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
2f340 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2f350 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54  3SelectWrongNumT
2f360 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20  ermsError(Parse 
2f370 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20  *pParse, Select 
2f380 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  *p);.int sqlite3
2f390 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
2f3a0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2f3b0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2f3c0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2f3d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2f3e0 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
2f3f0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2f400 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2f410 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e  ResolveExprListN
2f420 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
2f430 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76  *, ExprList*);.v
2f440 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2f450 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
2f460 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
2f470 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  ameContext*);.in
2f480 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2f490 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61  SelfReference(Pa
2f4a0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
2f4b0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29  Expr*,ExprList*)
2f4c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2f4d0 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79  olveOrderGroupBy
2f4e0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2f4f0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
2f500 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2f510 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
2f520 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
2f530 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
2f540 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2f550 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
2f560 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
2f570 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2f580 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
2f590 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
2f5a0 63 4c 69 73 74 20 2a 29 3b 0a 76 6f 69 64 20 2a  cList *);.void *
2f5b0 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b  sqlite3RenameTok
2f5c0 65 6e 4d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f  enMap(Parse*, vo
2f5d0 69 64 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  id*, Token*);.vo
2f5e0 69 64 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65  id sqlite3Rename
2f5f0 54 6f 6b 65 6e 52 65 6d 61 70 28 50 61 72 73 65  TokenRemap(Parse
2f600 2a 2c 20 76 6f 69 64 20 2a 70 54 6f 2c 20 76 6f  *, void *pTo, vo
2f610 69 64 20 2a 70 46 72 6f 6d 29 3b 0a 76 6f 69 64  id *pFrom);.void
2f620 20 73 71 6c 69 74 65 33 52 65 6e 61 6d 65 45 78   sqlite3RenameEx
2f630 70 72 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20  prUnmap(Parse*, 
2f640 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2f650 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72 6c 69  ite3RenameExprli
2f660 73 74 55 6e 6d 61 70 28 50 61 72 73 65 2a 2c 20  stUnmap(Parse*, 
2f670 45 78 70 72 4c 69 73 74 2a 29 3b 0a 43 6f 6c 6c  ExprList*);.Coll
2f680 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
2f690 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
2f6a0 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
2f6b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
2f6c0 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
2f6d0 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
2f6e0 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64  , Column*);.void
2f6f0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
2f700 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2f710 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2f720 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
2f730 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
2f740 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  r*, sqlite3_file
2f750 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2f760 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
2f770 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2f780 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
2f790 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2f7a0 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2f7b0 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
2f7c0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
2f7d0 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
2f7e0 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
2f7f0 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
2f800 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2f810 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
2f820 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2f830 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
2f840 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
2f850 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
2f860 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
2f870 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
2f880 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
2f890 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
2f8a0 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
2f8b0 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
2f8c0 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
2f8d0 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
2f8e0 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
2f8f0 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
2f900 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
2f910 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2f920 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
2f930 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
2f940 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
2f950 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
2f960 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
2f970 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
2f980 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
2f990 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2f9a0 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
2f9b0 20 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49 6e 66   Index*);.KeyInf
2f9c0 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2f9d0 6f 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61  oFromExprList(Pa
2f9e0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2f9f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
2fa00 73 71 6c 69 74 65 33 48 61 73 45 78 70 6c 69 63  sqlite3HasExplic
2fa10 69 74 4e 75 6c 6c 73 28 50 61 72 73 65 2a 2c 20  itNulls(Parse*, 
2fa20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 0a 23 69 66  ExprList*);..#if
2fa30 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2fa40 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49  .int sqlite3KeyI
2fa50 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b  nfoIsWriteable(K
2fa60 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66  eyInfo*);.#endif
2fa70 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61  .int sqlite3Crea
2fa80 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a  teFunc(sqlite3 *
2fa90 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2faa0 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a  int, int, void *
2fab0 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
2fac0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
2fad0 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
2fae0 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  **),.  void (*)(
2faf0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2fb00 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
2fb10 75 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69 64 20  ue **), .  void 
2fb20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2fb30 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ext*),.  void (*
2fb40 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2fb50 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  t*),.  void (*)(
2fb60 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2fb70 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
2fb80 75 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e 63 44  ue **), .  FuncD
2fb90 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
2fba0 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73  ructor.);.void s
2fbb0 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74 72 75  qlite3NoopDestru
2fbc0 63 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  ctor(void*);.voi
2fbd0 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c  d sqlite3OomFaul
2fbe0 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  t(sqlite3*);.voi
2fbf0 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61  d sqlite3OomClea
2fc00 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  r(sqlite3*);.int
2fc10 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
2fc20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
2fc30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
2fc40 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50  enTempDatabase(P
2fc50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  arse *);..void s
2fc60 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
2fc70 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71  it(StrAccum*, sq
2fc80 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69  lite3*, char*, i
2fc90 6e 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  nt, int);.char *
2fca0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
2fcb0 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29  inish(StrAccum*)
2fcc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2fcd0 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
2fce0 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
2fcf0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2fd00 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
2fd10 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
2fd20 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
2fd30 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
2fd40 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
2fd50 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
2fd60 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
2fd70 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
2fd80 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
2fd90 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
2fda0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2fdb0 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74 20  IT_SUBQUERY.int 
2fdc0 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2fdd0 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  IN(Parse*, Expr*
2fde0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2fdf0 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
2fe00 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54 45  ckIN(x,y) SQLITE
2fe10 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  _OK.#endif..#ifd
2fe20 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2fe30 5f 53 54 41 54 34 0a 69 6e 74 20 73 71 6c 69 74  _STAT4.int sqlit
2fe40 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
2fe50 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a  alue(.    Parse*
2fe60 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64  ,Index*,Unpacked
2fe70 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69  Record**,Expr*,i
2fe80 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e  nt,int,int*);.in
2fe90 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61  t sqlite3Stat4Va
2fea0 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73  lueFromExpr(Pars
2feb0 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73  e*, Expr*, u8, s
2fec0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2fed0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
2fee0 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61  t4ProbeFree(Unpa
2fef0 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e  ckedRecord*);.in
2ff00 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f  t sqlite3Stat4Co
2ff10 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63  lumn(sqlite3*, c
2ff20 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
2ff30 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61   int, sqlite3_va
2ff40 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c  lue**);.char sql
2ff50 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41  ite3IndexColumnA
2ff60 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a  ffinity(sqlite3*
2ff70 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a  , Index*, int);.
2ff80 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2ff90 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
2ffa0 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74  he LEMON-generat
2ffb0 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66  ed parser.*/.#if
2ffc0 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
2ffd0 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  GAMATION.  void 
2ffe0 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c  *sqlite3ParserAl
2fff0 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34  loc(void*(*)(u64
30000 29 2c 20 50 61 72 73 65 2a 29 3b 0a 20 20 76 6f  ), Parse*);.  vo
30010 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
30020 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
30030 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e  (*)(void*));.#en
30040 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
30050 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
30060 74 2c 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73  t, Token);.int s
30070 71 6c 69 74 65 33 50 61 72 73 65 72 46 61 6c 6c  qlite3ParserFall
30080 62 61 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64 65  back(int);.#ifde
30090 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43  f YYTRACKMAXSTAC
300a0 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c  KDEPTH.  int sql
300b0 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50  ite3ParserStackP
300c0 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64  eak(void*);.#end
300d0 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
300e0 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  AutoLoadExtensio
300f0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69  ns(sqlite3*);.#i
30100 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30110 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
30120 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
30130 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73  loseExtensions(s
30140 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a  qlite3*);.#else.
30150 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
30160 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
30170 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  X).#endif..#ifnd
30180 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
30190 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f  HARED_CACHE.  vo
301a0 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  id sqlite3TableL
301b0 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ock(Parse *, int
301c0 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74  , int, u8, const
301d0 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a   char *);.#else.
301e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
301f0 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78  3TableLock(v,w,x
30200 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ,y,z).#endif..#i
30210 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
30220 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74  .  int sqlite3Ut
30230 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63  f8To8(unsigned c
30240 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
30250 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
30260 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
30270 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
30280 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20  VtabClear(Y).#  
30290 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
302a0 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49  abSync(X,Y) SQLI
302b0 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
302c0 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
302d0 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ack(X).#  define
302e0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
302f0 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  it(X).#  define 
30300 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
30310 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e  c(db) 0.#  defin
30320 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  e sqlite3VtabLoc
30330 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
30340 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
30350 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
30360 6c 69 74 65 33 56 74 61 62 4d 6f 64 75 6c 65 55  lite3VtabModuleU
30370 6e 72 65 66 28 44 2c 58 29 0a 23 20 20 64 65 66  nref(D,X).#  def
30380 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
30390 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
303a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
303b0 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
303c0 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
303d0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
303e0 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
303f0 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
30400 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
30410 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
30420 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
30430 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
30440 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
30450 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
30460 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
30470 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
30480 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65  qlite3 *db, Vdbe
30490 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
304a0 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73  e3VtabRollback(s
304b0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
304c0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
304d0 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64  ommit(sqlite3 *d
304e0 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  b);.   void sqli
304f0 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62  te3VtabLock(VTab
30500 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
30510 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
30520 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
30530 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
30540 6f 64 75 6c 65 55 6e 72 65 66 28 73 71 6c 69 74  oduleUnref(sqlit
30550 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 20 20  e3*,Module*);.  
30560 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
30570 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
30580 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
30590 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
305a0 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
305b0 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
305c0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
305d0 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
305e0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
305f0 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
30600 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
30610 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  te3*, Table*);. 
30620 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65    Module *sqlite
30630 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c  3VtabCreateModul
30640 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a  e(.     sqlite3*
30650 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ,.     const cha
30660 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73  r*,.     const s
30670 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a  qlite3_module*,.
30680 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20       void*,.    
30690 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a   void(*)(void*).
306a0 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20     );.#  define 
306b0 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
306c0 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
306d0 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
306e0 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
306f0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
30700 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
30710 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
30720 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
30730 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
30740 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
30750 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
30760 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
30770 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
30780 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
30790 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
307a0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
307b0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
307c0 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
307d0 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
307e0 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
307f0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
30800 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
30810 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
30820 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
30830 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
30840 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
30850 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
30860 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
30870 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
30880 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
30890 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
308a0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
308b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
308c0 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
308d0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
308e0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
308f0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
30900 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
30910 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
30920 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
30930 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
30940 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
30950 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
30960 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
30970 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74  lite3StmtCurrent
30980 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Time(sqlite3_con
30990 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
309a0 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72  te3VdbeParameter
309b0 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e  Index(Vdbe*, con
309c0 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
309d0 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73  int sqlite3Trans
309e0 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69  ferBindings(sqli
309f0 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69  te3_stmt *, sqli
30a00 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69  te3_stmt *);.voi
30a10 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52  d sqlite3ParserR
30a20 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 23 69  eset(Parse*);.#i
30a30 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
30a40 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68 61  LE_NORMALIZE.cha
30a50 72 20 2a 73 71 6c 69 74 65 33 4e 6f 72 6d 61 6c  r *sqlite3Normal
30a60 69 7a 65 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  ize(Vdbe*, const
30a70 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
30a80 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
30a90 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
30aa0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
30ab0 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
30ac0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
30ad0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
30ae0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
30af0 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
30b00 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
30b10 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
30b20 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
30b30 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
30b40 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
30b50 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
30b60 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
30b70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30b80 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
30b90 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
30ba0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
30bb0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
30bc0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
30bd0 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
30be0 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
30bf0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
30c00 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
30c10 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69  TE_OMIT_CTE.  Wi
30c20 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41  th *sqlite3WithA
30c30 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c  dd(Parse*,With*,
30c40 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
30c50 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69  ,Select*);.  voi
30c60 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  d sqlite3WithDel
30c70 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74  ete(sqlite3*,Wit
30c80 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  h*);.  void sqli
30c90 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73  te3WithPush(Pars
30ca0 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  e*, With*, u8);.
30cb0 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
30cc0 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c  lite3WithPush(x,
30cd0 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  y,z).#define sql
30ce0 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78  ite3WithDelete(x
30cf0 2c 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  ,y).#endif.#ifnd
30d00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
30d10 50 53 45 52 54 0a 20 20 55 70 73 65 72 74 20 2a  PSERT.  Upsert *
30d20 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65 77  sqlite3UpsertNew
30d30 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
30d40 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
30d50 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76 6f  st*,Expr*);.  vo
30d60 69 64 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  id sqlite3Upsert
30d70 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
30d80 55 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73 65  Upsert*);.  Upse
30d90 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72  rt *sqlite3Upser
30da0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55 70  tDup(sqlite3*,Up
30db0 73 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  sert*);.  int sq
30dc0 6c 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c 79  lite3UpsertAnaly
30dd0 7a 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  zeTarget(Parse*,
30de0 53 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74 2a  SrcList*,Upsert*
30df0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
30e00 33 55 70 73 65 72 74 44 6f 55 70 64 61 74 65 28  3UpsertDoUpdate(
30e10 50 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c 54  Parse*,Upsert*,T
30e20 61 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74  able*,Index*,int
30e30 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65  );.#else.#define
30e40 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65   sqlite3UpsertNe
30e50 77 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28 55  w(v,w,x,y,z) ((U
30e60 70 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69 6e  psert*)0).#defin
30e70 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 44  e sqlite3UpsertD
30e80 65 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66 69  elete(x,y).#defi
30e90 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  ne sqlite3Upsert
30ea0 44 75 70 28 78 2c 79 29 20 20 20 20 20 20 20 28  Dup(x,y)       (
30eb0 28 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e 64  (Upsert*)0).#end
30ec0 69 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  if.../* Declarat
30ed0 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
30ee0 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
30ef0 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
30f00 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
30f10 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
30f20 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
30f30 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
30f40 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
30f50 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
30f60 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
30f70 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
30f80 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
30f90 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
30fa0 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
30fb0 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
30fc0 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
30fd0 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
30fe0 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
30ff0 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
31000 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
31010 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a  unctionality is.
31020 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66  ** provided (enf
31030 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63  orcement of FK c
31040 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69  onstraints requi
31050 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73  res the triggers
31060 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f   sub-system)..*/
31070 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
31080 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
31090 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
310a0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
310b0 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73  RIGGER).  void s
310c0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61  qlite3FkCheck(Pa
310d0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
310e0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
310f0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
31100 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
31110 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
31120 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
31130 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
31140 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
31150 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
31160 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
31170 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71  int sqlite3FkReq
31180 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61  uired(Parse*, Ta
31190 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29  ble*, int*, int)
311a0 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46  ;.  u32 sqlite3F
311b0 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c  kOldmask(Parse*,
311c0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79   Table*);.  FKey
311d0 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72   *sqlite3FkRefer
311e0 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a  ences(Table *);.
311f0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
31200 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
31210 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
31220 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
31230 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  kCheck(a,b,c,d,e
31240 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
31250 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
31260 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
31270 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
31280 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20  sk(a,b)         
31290 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
312a0 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
312b0 62 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64  b,c,d)    0.  #d
312c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
312d0 65 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20  eferences(a)    
312e0 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66      0.#endif.#if
312f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
31300 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76  _FOREIGN_KEY.  v
31310 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  oid sqlite3FkDel
31320 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54  ete(sqlite3 *, T
31330 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71  able*);.  int sq
31340 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
31350 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ex(Parse*,Table*
31360 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69  ,FKey*,Index**,i
31370 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt**);.#else.  #
31380 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
31390 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64  Delete(a,b).  #d
313a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c  efine sqlite3FkL
313b0 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63  ocateIndex(a,b,c
313c0 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ,d,e).#endif.../
313d0 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66  *.** Available f
313e0 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20  ault injectors. 
313f0 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65   Should be numbe
31400 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
31410 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  th 0..*/.#define
31420 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
31430 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20  ECTOR_MALLOC    
31440 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
31450 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
31460 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a  COUNT      1../*
31470 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
31480 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e  e to the code in
31490 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f   fault.c used fo
314a0 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62  r identifying "b
314b0 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63  enign".** malloc
314c0 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20   failures. This 
314d0 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20  is only present 
314e0 69 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  if SQLITE_UNTEST
314f0 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  ABLE.** is not d
31500 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
31510 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
31520 41 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ABLE.  void sqli
31530 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
31540 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
31550 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
31560 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
31570 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
31580 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
31590 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
315a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
315b0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
315c0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
315d0 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
315e0 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
315f0 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
31600 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
31610 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
31620 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
31630 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
31640 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
31650 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
31660 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
31670 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
31680 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
31690 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
316a0 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
316b0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
316c0 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
316d0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
316e0 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
316f0 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
31700 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
31710 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
31720 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
31730 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
31740 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
31750 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
31760 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
31770 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
31780 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
31790 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
317a0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
317b0 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
317c0 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
317d0 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
317e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
317f0 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
31800 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
31810 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
31820 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
31830 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
31840 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
31850 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
31860 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
31870 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
31880 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
31890 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
318a0 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u32, int*, int
318b0 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73  *, int*);..int s
318c0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
318d0 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
318e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
318f0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
31900 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
31910 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
31920 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
31930 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
31940 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49  ITE_ENABLE_ATOMI
31950 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64  C_WRITE) \. || d
31960 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
31970 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49  ABLE_BATCH_ATOMI
31980 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73  C_WRITE).  int s
31990 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65  qlite3JournalCre
319a0 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ate(sqlite3_file
319b0 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74   *);.#endif..int
319c0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49   sqlite3JournalI
319d0 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65  sInMemory(sqlite
319e0 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64  3_file *p);.void
319f0 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
31a00 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
31a10 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  ile *);..void sq
31a20 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
31a30 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65  htAndFlags(Parse
31a40 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
31a50 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  p);.#if SQLITE_M
31a60 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
31a70 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c    int sqlite3Sel
31a80 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65  ectExprHeight(Se
31a90 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73  lect *);.  int s
31aa0 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
31ab0 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e  eight(Parse*, in
31ac0 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  t);.#else.  #def
31ad0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
31ae0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
31af0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
31b00 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
31b10 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
31b20 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
31b30 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
31b40 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
31b50 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
31b60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
31b70 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
31b80 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
31b90 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
31ba0 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
31bb0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
31bc0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
31bd0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
31be0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
31bf0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
31c00 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
31c10 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
31c20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
31c30 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
31c40 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
31c50 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
31c60 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
31c70 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
31c80 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
31c90 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
31ca0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
31cb0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
31cc0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
31cd0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  r *);.#endif.#if
31ce0 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52   defined(YYCOVER
31cf0 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  AGE).  int sqlit
31d00 65 33 50 61 72 73 65 72 43 6f 76 65 72 61 67 65  e3ParserCoverage
31d10 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a  (FILE*);.#endif.
31d20 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
31d30 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
31d40 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
31d50 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
31d60 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
31d70 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
31d80 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
31d90 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
31da0 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
31db0 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
31dc0 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
31dd0 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
31de0 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  CE.# define IOTR
31df0 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69  ACE(A)  if( sqli
31e00 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71  te3IoTrace ){ sq
31e10 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20  lite3IoTrace A; 
31e20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  }.  void sqlite3
31e30 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56  VdbeIOTraceSql(V
31e40 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50  dbe*);.SQLITE_AP
31e50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  I SQLITE_EXTERN 
31e60 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45  void (SQLITE_CDE
31e70 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61  CL *sqlite3IoTra
31e80 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ce)(const char*,
31e90 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ...);.#else.# de
31ea0 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a  fine IOTRACE(A).
31eb0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
31ec0 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58  VdbeIOTraceSql(X
31ed0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
31ee0 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61  These routines a
31ef0 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  re available for
31f00 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75   the mem2.c debu
31f10 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c  gging memory all
31f20 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20  ocator.** only. 
31f30 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74   They are used t
31f40 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69  o verify that di
31f50 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20  fferent "types" 
31f60 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c  of memory.** all
31f70 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  ocations are pro
31f80 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79  perly tracked by
31f90 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a   the system..**.
31fa0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
31fb0 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73  ugSetType() sets
31fc0 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61   the "type" of a
31fd0 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20  n allocation to 
31fe0 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45  one of.** the ME
31ff0 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64  MTYPE_* macros d
32000 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54  efined below.  T
32010 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20  he type must be 
32020 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a  a bitmask with.*
32030 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73  * a single bit s
32040 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  et..**.** sqlite
32050 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
32060 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
32070 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69  if any of the bi
32080 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
32090 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
320a0 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
320b0 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
320c0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
320d0 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c  etType()..** sql
320e0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
320f0 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65  ype() is intende
32100 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  d for use inside
32110 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
32120 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  ents..**.** sqli
32130 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
32140 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
32150 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
32160 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
32170 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
32180 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
32190 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
321a0 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
321b0 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a  gSetType()..**.*
321c0 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f  * Perhaps the mo
321d0 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69  st important poi
321e0 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72  nt is the differ
321f0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d  ence between MEM
32200 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64  TYPE_HEAP.** and
32210 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
32220 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63  DE.  If an alloc
32230 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45  ation is MEMTYPE
32240 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74  _LOOKASIDE, that
32250 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67   means.** it mig
32260 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  ht have been all
32270 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73  ocated by lookas
32280 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20  ide, except the 
32290 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a  allocation was.*
322a0 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c  * too large or l
322b0 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72  ookaside was alr
322c0 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69  eady full.  It i
322d0 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76  s important to v
322e0 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c  erify.** that al
322f0 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  locations that m
32300 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73  ight have been s
32310 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b  atisfied by look
32320 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a  aside are not.**
32330 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20   passed back to 
32340 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
32350 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20  ee() routines.  
32360 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20  Asserts such as 
32370 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61  the.** example a
32380 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20  bove are placed 
32390 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61  on the non-looka
323a0 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
323b0 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a  ines to verify.*
323c0 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  * this constrain
323d0 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  t..**.** All of 
323e0 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
323f0 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
32400 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
32410 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
32420 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
32430 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
32440 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
32450 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
32460 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
32470 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
32480 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
32490 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
324a0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
324b0 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
324c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
324d0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
324e0 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
324f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
32500 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
32510 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
32520 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
32530 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
32540 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
32550 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
32560 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
32570 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
32580 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
32590 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
325a0 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
325b0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
325c0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
325d0 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61  DE  0x02  /* Hea
325e0 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  p that might hav
325f0 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65  e been lookaside
32600 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
32610 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30  YPE_PCACHE     0
32620 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63  x04  /* Page cac
32630 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  he allocations *
32640 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69  /../*.** Threadi
32650 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a  ng interface.*/.
32660 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  #if SQLITE_MAX_W
32670 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a  ORKER_THREADS>0.
32680 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
32690 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68  dCreate(SQLiteTh
326a0 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28  read**,void*(*)(
326b0 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69  void*),void*);.i
326c0 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
326d0 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61  Join(SQLiteThrea
326e0 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e  d*, void**);.#en
326f0 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
32700 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  (SQLITE_ENABLE_D
32710 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64  BPAGE_VTAB) || d
32720 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
32730 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  ST).int sqlite3D
32740 62 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71  bpageRegister(sq
32750 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a  lite3*);.#endif.
32760 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
32770 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54  TE_ENABLE_DBSTAT
32780 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65  _VTAB) || define
32790 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69  d(SQLITE_TEST).i
327a0 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74  nt sqlite3Dbstat
327b0 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
327c0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
327d0 73 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f  sqlite3ExprVecto
327e0 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70  rSize(Expr *pExp
327f0 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  r);.int sqlite3E
32800 78 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72  xprIsVector(Expr
32810 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
32820 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65  sqlite3VectorFie
32830 6c 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c  ldSubexpr(Expr*,
32840 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
32850 69 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f  ite3ExprForVecto
32860 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78  rField(Parse*,Ex
32870 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  pr*,int);.void s
32880 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f  qlite3VectorErro
32890 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70  rMsg(Parse*, Exp
328a0 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  r*);..#ifndef SQ
328b0 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
328c0 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f  EOPTION_DIAGS.co
328d0 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74  nst char **sqlit
328e0 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  e3CompileOptions
328f0 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65  (int *pnOpt);.#e
32900 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
32910 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a     SQLITEINT_H */.