/ Hex Artifact Content
Login

Artifact cad10b3a482bd5b11f586df9877ff5f637ce14534291a438430d1f1a2b882296:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
0770: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
0780: 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69 7a  used to customiz
0790: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6f  e the compiler o
07a0: 70 74 69 6f 6e 73 20 66 6f 72 20 4d 53 56 43 2e  ptions for MSVC.
07b0: 0a 2a 2a 20 54 68 69 73 20 73 68 6f 75 6c 64 20  .** This should 
07c0: 62 65 20 64 6f 6e 65 20 66 69 72 73 74 20 73 6f  be done first so
07d0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 75 63   that it can suc
07e0: 63 65 73 73 66 75 6c 6c 79 20 70 72 65 76 65 6e  cessfully preven
07f0: 74 20 73 70 75 72 69 6f 75 73 0a 2a 2a 20 63 6f  t spurious.** co
0800: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
0810: 64 75 65 20 74 6f 20 73 75 62 73 65 71 75 65 6e  due to subsequen
0820: 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74 68 69  t content in thi
0830: 73 20 66 69 6c 65 20 61 6e 64 20 6f 74 68 65 72  s file and other
0840: 20 66 69 6c 65 73 0a 2a 2a 20 74 68 61 74 20 61   files.** that a
0850: 72 65 20 69 6e 63 6c 75 64 65 64 20 62 79 20 74  re included by t
0860: 68 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 6e  his file..*/.#in
0870: 63 6c 75 64 65 20 22 6d 73 76 63 2e 68 22 0a 0a  clude "msvc.h"..
0880: 2f 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 73 65  /*.** Special se
0890: 74 75 70 20 66 6f 72 20 56 78 57 6f 72 6b 73 0a  tup for VxWorks.
08a0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 76 78 77  */.#include "vxw
08b0: 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54  orks.h"../*.** T
08c0: 68 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68  hese #defines sh
08d0: 6f 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42  ould enable >2GB
08e0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e   file support on
08f0: 20 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a   POSIX if the.**
0900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72   underlying oper
0910: 61 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70  ating system sup
0920: 70 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68  ports it.  If th
0930: 65 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61  e OS lacks.** la
0940: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
0950: 2c 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69  , or if the OS i
0960: 73 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65  s windows, these
0970: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70   should be no-op
0980: 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  s..**.** Ticket 
0990: 23 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52  #2739:  The _LAR
09a0: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61  GEFILE_SOURCE ma
09b0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
09c0: 62 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79  before any.** sy
09d0: 73 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20  stem #includes. 
09e0: 20 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f   Hence, this blo
09f0: 63 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20  ck of code must 
0a00: 62 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73  be the very firs
0a10: 74 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c  t.** code in all
0a20: 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a   source files..*
0a30: 2a 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20  *.** Large file 
0a40: 73 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64  support can be d
0a50: 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  isabled using th
0a60: 65 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42  e -DSQLITE_DISAB
0a70: 4c 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a  LE_LFS switch.**
0a80: 20 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   on the compiler
0a90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20   command line.  
0aa0: 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
0ab0: 79 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d  y if you are com
0ac0: 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72  piling.** on a r
0ad0: 65 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65  ecent machine (e
0ae0: 78 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20  x: Red Hat 7.2) 
0af0: 62 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75  but you want you
0b00: 72 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a  r code to work.*
0b10: 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61  * on an older ma
0b20: 63 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48  chine (ex: Red H
0b30: 61 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75  at 6.0).  If you
0b40: 20 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20   compile on Red 
0b50: 48 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f  Hat 7.2.** witho
0b60: 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  ut this option, 
0b70: 4c 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20  LFS is enable.  
0b80: 42 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74  But LFS does not
0b90: 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65   exist in the ke
0ba0: 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48  rnel.** in Red H
0bb0: 61 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63  at 6.0, so the c
0bc0: 6f 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20  ode won't work. 
0bd0: 20 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69   Hence, for maxi
0be0: 6d 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f  mum binary.** po
0bf0: 72 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68  rtability you sh
0c00: 6f 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a  ould omit LFS..*
0c10: 2a 0a 2a 2a 20 54 68 65 20 70 72 65 76 69 6f 75  *.** The previou
0c20: 73 20 70 61 72 61 67 72 61 70 68 20 77 61 73 20  s paragraph was 
0c30: 77 72 69 74 74 65 6e 20 69 6e 20 32 30 30 35 2e  written in 2005.
0c40: 20 20 28 54 68 69 73 20 70 61 72 61 67 72 61 70    (This paragrap
0c50: 68 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  h is written.** 
0c60: 6f 6e 20 32 30 30 38 2d 31 31 2d 32 38 2e 29 20  on 2008-11-28.) 
0c70: 54 68 65 73 65 20 64 61 79 73 2c 20 61 6c 6c 20  These days, all 
0c80: 4c 69 6e 75 78 20 6b 65 72 6e 65 6c 73 20 73 75  Linux kernels su
0c90: 70 70 6f 72 74 20 6c 61 72 67 65 20 66 69 6c 65  pport large file
0ca0: 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75 20 73 68 6f  s, so.** you sho
0cb0: 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 6c 65 61  uld probably lea
0cc0: 76 65 20 4c 46 53 20 65 6e 61 62 6c 65 64 2e 20  ve LFS enabled. 
0cd0: 20 42 75 74 20 73 6f 6d 65 20 65 6d 62 65 64 64   But some embedd
0ce0: 65 64 20 70 6c 61 74 66 6f 72 6d 73 20 6d 69 67  ed platforms mig
0cf0: 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c 46 53 20 69  ht.** lack LFS i
0d00: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
0d10: 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f   SQLITE_DISABLE_
0d20: 4c 46 53 20 6d 61 63 72 6f 20 6d 69 67 68 74 20  LFS macro might 
0d30: 73 74 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2e  still be useful.
0d40: 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69  .**.** Similar i
0d50: 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63 20 4f  s true for Mac O
0d60: 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c  S X.  LFS is onl
0d70: 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d  y supported on M
0d80: 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20 6c 61  ac OS X 9 and la
0d90: 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ter..*/.#ifndef 
0da0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
0db0: 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  FS.# define _LAR
0dc0: 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20 31 0a  GE_FILE       1.
0dd0: 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f  # ifndef _FILE_O
0de0: 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20 20 64  FFSET_BITS.#   d
0df0: 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53  efine _FILE_OFFS
0e00: 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65 6e 64  ET_BITS 64.# end
0e10: 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c 41 52  if.# define _LAR
0e20: 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a  GEFILE_SOURCE 1.
0e30: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 47  #endif../* The G
0e40: 43 43 5f 56 45 52 53 49 4f 4e 20 61 6e 64 20 4d  CC_VERSION and M
0e50: 53 56 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  SVC_VERSION macr
0e60: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  os are used to.*
0e70: 2a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 6c 79 20  * conditionally 
0e80: 69 6e 63 6c 75 64 65 20 6f 70 74 69 6d 69 7a 61  include optimiza
0e90: 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 6f  tions for each o
0ea0: 66 20 74 68 65 73 65 20 63 6f 6d 70 69 6c 65 72  f these compiler
0eb0: 73 2e 20 20 41 0a 2a 2a 20 76 61 6c 75 65 20 6f  s.  A.** value o
0ec0: 66 20 30 20 6d 65 61 6e 73 20 74 68 61 74 20 63  f 0 means that c
0ed0: 6f 6d 70 69 6c 65 72 20 69 73 20 6e 6f 74 20 62  ompiler is not b
0ee0: 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65 0a  eing used.  The.
0ef0: 2a 2a 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ** SQLITE_DISABL
0f00: 45 5f 49 4e 54 52 49 4e 53 49 43 20 6d 61 63 72  E_INTRINSIC macr
0f10: 6f 20 6d 65 61 6e 73 20 64 6f 20 6e 6f 74 20 75  o means do not u
0f20: 73 65 20 61 6e 79 20 63 6f 6d 70 69 6c 65 72 2d  se any compiler-
0f30: 73 70 65 63 69 66 69 63 0a 2a 2a 20 6f 70 74 69  specific.** opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 2c 20 61 6e 64 20 68  mizations, and h
0f50: 65 6e 63 65 20 73 65 74 20 61 6c 6c 20 63 6f 6d  ence set all com
0f60: 70 69 6c 65 72 20 6d 61 63 72 6f 73 20 74 6f 20  piler macros to 
0f70: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 61  0.**.** There wa
0f80: 73 20 6f 6e 63 65 20 61 6c 73 6f 20 61 20 43 4c  s once also a CL
0f90: 41 4e 47 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ANG_VERSION macr
0fa0: 6f 2e 20 20 48 6f 77 65 76 65 72 2c 20 77 65 20  o.  However, we 
0fb0: 6c 65 61 72 6e 20 74 68 61 74 20 74 68 65 0a 2a  learn that the.*
0fc0: 2a 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  * version number
0fd0: 73 20 69 6e 20 63 6c 61 6e 67 20 61 72 65 20 66  s in clang are f
0fe0: 6f 72 20 22 6d 61 72 6b 65 74 69 6e 67 22 20 6f  or "marketing" o
0ff0: 6e 6c 79 20 61 6e 64 20 61 72 65 20 69 6e 63 6f  nly and are inco
1000: 6e 73 69 73 74 65 6e 74 0a 2a 2a 20 61 6e 64 20  nsistent.** and 
1010: 75 6e 72 65 6c 69 61 62 6c 65 2e 20 20 46 6f 72  unreliable.  For
1020: 74 75 6e 61 74 65 6c 79 2c 20 61 6c 6c 20 76 65  tunately, all ve
1030: 72 73 69 6f 6e 73 20 6f 66 20 63 6c 61 6e 67 20  rsions of clang 
1040: 61 6c 73 6f 20 72 65 63 6f 67 6e 69 7a 65 20 74  also recognize t
1050: 68 65 0a 2a 2a 20 67 63 63 20 76 65 72 73 69 6f  he.** gcc versio
1060: 6e 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 68 61  n numbers and ha
1070: 76 65 20 72 65 61 73 6f 6e 61 62 6c 65 20 73 65  ve reasonable se
1080: 74 74 69 6e 67 73 20 66 6f 72 20 67 63 63 20 76  ttings for gcc v
1090: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 2c 0a  ersion numbers,.
10a0: 2a 2a 20 73 6f 20 74 68 65 20 47 43 43 5f 56 45  ** so the GCC_VE
10b0: 52 53 49 4f 4e 20 6d 61 63 72 6f 20 77 69 6c 6c  RSION macro will
10c0: 20 62 65 20 73 65 74 20 74 6f 20 61 20 63 6f 72   be set to a cor
10d0: 72 65 63 74 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  rect non-zero va
10e0: 6c 75 65 20 65 76 65 6e 0a 2a 2a 20 77 68 65 6e  lue even.** when
10f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
1100: 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69 66 20 64 65  clang..*/.#if de
1110: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1120: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1130: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1140: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47  NSIC).# define G
1150: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
1160: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
1170: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
1180: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
1190: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
11a0: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
11b0: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   0.#endif.#if de
11c0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
11d0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11e0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
11f0: 4e 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d  NSIC).# define M
1200: 53 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43  SVC_VERSION _MSC
1210: 5f 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66  _VER.#else.# def
1220: 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e  ine MSVC_VERSION
1230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
1240: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
1250: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
1260: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
1270: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
1280: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
1290: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
12a0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
12b0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
12c0: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
12d0: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
12e0: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
12f0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
1300: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
1310: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
1320: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
1330: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
1340: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
1350: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
1360: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
1370: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
1380: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
1390: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
13a0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
13b0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
13c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
13d0: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
13e0: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
13f0: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
1400: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
1410: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
1420: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
1430: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
1440: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
1450: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
1460: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
1470: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
1480: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
1490: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
14a0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
14b0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
14c0: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
14d0: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
14e0: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
14f0: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
1500: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
1510: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
1520: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
1530: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
1540: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
1550: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
1560: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
1570: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
1580: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
1590: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
15a0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
15b0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
15c0: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
15d0: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
15e0: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
15f0: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
1600: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
1610: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
1620: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
1630: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
1640: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
1650: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
1660: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1670: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
1680: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
1690: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
16a0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
16b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
16c0: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
16d0: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
16e0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
16f0: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1700: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
1710: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
1720: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
1730: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1740: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
1750: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
1760: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
1770: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
1780: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
1790: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
17a0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
17b0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
17c0: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
17d0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
17e0: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
17f0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
1800: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
1810: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
1820: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
1830: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
1840: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
1850: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
1860: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
1870: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
1880: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
1890: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
18a0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
18b0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
18c0: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
18d0: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
18e0: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
18f0: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1900: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1910: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1920: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1930: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1940: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1950: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
1960: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
1970: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
1980: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
1990: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  .#if defined(_HA
19a0: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
19b0: 5f 48 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  _H) && !defined(
19c0: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 29 0a  SQLITECONFIG_H).
19d0: 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67  #include "config
19e0: 2e 68 22 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .h".#define SQLI
19f0: 54 45 43 4f 4e 46 49 47 5f 48 20 31 0a 23 65 6e  TECONFIG_H 1.#en
1a00: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
1a10: 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22 0a 0a 2f  qliteLimit.h"../
1a20: 2a 20 44 69 73 61 62 6c 65 20 6e 75 69 73 61 6e  * Disable nuisan
1a30: 63 65 20 77 61 72 6e 69 6e 67 73 20 6f 6e 20 42  ce warnings on B
1a40: 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73  orland compilers
1a50: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1a60: 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a 23 70  __BORLANDC__).#p
1a70: 72 61 67 6d 61 20 77 61 72 6e 20 2d 72 63 68 20  ragma warn -rch 
1a80: 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  /* unreachable c
1a90: 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77  ode */.#pragma w
1aa0: 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43 6f 6e 64  arn -ccc /* Cond
1ab0: 69 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  ition is always 
1ac0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 2a 2f  true or false */
1ad0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 61  .#pragma warn -a
1ae0: 75 73 20 2f 2a 20 41 73 73 69 67 6e 65 64 20 76  us /* Assigned v
1af0: 61 6c 75 65 20 69 73 20 6e 65 76 65 72 20 75 73  alue is never us
1b00: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1b10: 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f 6d 70 61  rn -csu /* Compa
1b20: 72 69 6e 67 20 73 69 67 6e 65 64 20 61 6e 64 20  ring signed and 
1b30: 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23 70 72 61  unsigned */.#pra
1b40: 67 6d 61 20 77 61 72 6e 20 2d 73 70 61 20 2f 2a  gma warn -spa /*
1b50: 20 53 75 73 70 69 63 69 6f 75 73 20 70 6f 69 6e   Suspicious poin
1b60: 74 65 72 20 61 72 69 74 68 6d 65 74 69 63 20 2a  ter arithmetic *
1b70: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
1b80: 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72 64  Include standard
1b90: 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61 73   header files as
1ba0: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69   necessary.*/.#i
1bb0: 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54  fdef HAVE_STDINT
1bc0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  _H.#include <std
1bd0: 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69  int.h>.#endif.#i
1be0: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59 50  fdef HAVE_INTTYP
1bf0: 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69  ES_H.#include <i
1c00: 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69  nttypes.h>.#endi
1c10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1c20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
1c30: 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20 70  e used to cast p
1c40: 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65 67  ointers to integ
1c50: 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67  ers and.** integ
1c60: 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e  ers to pointers.
1c70: 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64 6f    The way you do
1c80: 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72 6f   this varies fro
1c90: 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a  m one compiler.*
1ca0: 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20 73  * to the next, s
1cb0: 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c 6f  o we have develo
1cc0: 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ped the followin
1cd0: 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74 61  g set of #if sta
1ce0: 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65  tements.** to ge
1cf0: 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69 61  nerate appropria
1d00: 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61 20  te macros for a 
1d10: 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63 6f  wide range of co
1d20: 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  mpilers..**.** T
1d30: 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53 49  he correct "ANSI
1d40: 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73  " way to do this
1d50: 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20 69   is to use the i
1d60: 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 0a 2a 2a  ntptr_t type..**
1d70: 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20   Unfortunately, 
1d80: 74 68 61 74 20 74 79 70 65 64 65 66 20 69 73 20  that typedef is 
1d90: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
1da0: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20   all compilers, 
1db0: 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61  or.** if it is a
1dc0: 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71  vailable, it req
1dd0: 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64  uires an #includ
1de0: 65 20 6f 66 20 73 70 65 63 69 66 69 63 20 68 65  e of specific he
1df0: 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61  aders.** that va
1e00: 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68  ry from one mach
1e10: 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ine to the next.
1e20: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33  .**.** Ticket #3
1e30: 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67  860:  The llvm-g
1e40: 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20  cc-4.2 compiler 
1e50: 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65  from Apple choke
1e60: 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f  s on.** the ((vo
1e70: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
1e80: 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20  X]) construct.  
1e90: 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20  But MSVC chokes 
1ea0: 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e  on ((void*)(X)).
1eb0: 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74  .** So we have t
1ec0: 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63  o define the mac
1ed0: 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74  ros in different
1ee0: 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20   ways depending 
1ef0: 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c  on the.** compil
1f00: 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  er..*/.#if defin
1f10: 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50  ed(__PTRDIFF_TYP
1f20: 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61  E__)  /* This ca
1f30: 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66  se should work f
1f40: 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69  or GCC */.# defi
1f50: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
1f60: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  __)(X)).# define
1f90: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
1fa0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f  NT(X)  ((int)(__
1fb0: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
1fc0: 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  X)).#elif !defin
1fd0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20  ed(__GNUC__)    
1fe0: 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20     /* Works for 
1ff0: 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20  compilers other 
2000: 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64  than LLVM */.# d
2010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2020: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2030: 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b  id*)&((char*)0)[
2040: 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X]).# define SQL
2050: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2060: 29 20 20 28 28 69 6e 74 29 28 28 28 63 68 61 72  )  ((int)(((char
2070: 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a  *)X)-(char*)0)).
2080: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41  #elif defined(HA
2090: 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f  VE_STDINT_H)   /
20a0: 2a 20 55 73 65 20 74 68 69 73 20 63 61 73 65 20  * Use this case 
20b0: 69 66 20 77 65 20 68 61 76 65 20 41 4e 53 49 20  if we have ANSI 
20c0: 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66  headers */.# def
20d0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
20e0: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
20f0: 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  *)(intptr_t)(X))
2100: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2110: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2120: 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29  ((int)(intptr_t)
2130: 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20  (X)).#else      
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73      /* Generates
2160: 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74   a warning - but
2170: 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73   it always works
2180: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2190: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
21a0: 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a  )  ((void*)(X)).
21b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21c0: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
21d0: 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66  (int)(X)).#endif
21e0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
21f0: 74 6f 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63  to hint to the c
2200: 6f 6d 70 69 6c 65 72 20 74 68 61 74 20 61 20 66  ompiler that a f
2210: 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  unction should n
2220: 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69 6e 65 64  ot be.** inlined
2230: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2240: 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20 20 64 65  (__GNUC__).#  de
2250: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e  fine SQLITE_NOIN
2260: 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69 62 75 74  LINE  __attribut
2270: 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65 29 29 0a  e__((noinline)).
2280: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 4d  #elif defined(_M
2290: 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f  SC_VER) && _MSC_
22a0: 56 45 52 3e 3d 31 33 31 30 0a 23 20 20 64 65 66  VER>=1310.#  def
22b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
22c0: 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70 65 63 28  INE  __declspec(
22d0: 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c 73 65 0a  noinline).#else.
22e0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
22f0: 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e 64 69 66  _NOINLINE.#endif
2300: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
2310: 65 20 74 68 61 74 20 74 68 65 20 63 6f 6d 70 69  e that the compi
2320: 6c 65 72 20 69 6e 74 72 69 6e 73 69 63 73 20 77  ler intrinsics w
2330: 65 20 64 65 73 69 72 65 20 61 72 65 20 65 6e 61  e desire are ena
2340: 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20 63 6f 6d  bled when.** com
2350: 70 69 6c 69 6e 67 20 77 69 74 68 20 61 6e 20 61  piling with an a
2360: 70 70 72 6f 70 72 69 61 74 65 20 76 65 72 73 69  ppropriate versi
2370: 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e 6c 65 73  on of MSVC unles
2380: 73 20 70 72 65 76 65 6e 74 65 64 20 62 79 0a 2a  s prevented by.*
2390: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53  * the SQLITE_DIS
23a0: 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20 64  ABLE_INTRINSIC d
23b0: 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  efine..*/.#if !d
23c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 49  efined(SQLITE_DI
23d0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 29  SABLE_INTRINSIC)
23e0: 0a 23 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f  .#  if defined(_
23f0: 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d 53 43  MSC_VER) && _MSC
2400: 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20 20 20 20  _VER>=1400.#    
2410: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  if !defined(_WIN
2420: 33 32 5f 57 43 45 29 0a 23 20 20 20 20 20 20 69  32_WCE).#      i
2430: 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69 6e 2e 68  nclude <intrin.h
2440: 3e 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  >.#      pragma 
2450: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
2460: 77 61 70 5f 75 73 68 6f 72 74 29 0a 23 20 20 20  wap_ushort).#   
2470: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2480: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 6c  sic(_byteswap_ul
2490: 6f 6e 67 29 0a 23 20 20 20 20 20 20 70 72 61 67  ong).#      prag
24a0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24b0: 74 65 73 77 61 70 5f 75 69 6e 74 36 34 29 0a 23  teswap_uint64).#
24c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
24d0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
24e0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
24f0: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2500: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2510: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2520: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2530: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2540: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2550: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2560: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2570: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2580: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
2590: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
25a0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
25b0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
25c0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
25d0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
25e0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
25f0: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2600: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2610: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2620: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2630: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2640: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2650: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2660: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2670: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2680: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
2690: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
26a0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
26b0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
26c0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
26d0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
26e0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
26f0: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2700: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2710: 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 65  gacy..**.** To e
2720: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63  nsure that the c
2730: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 6f 66 20  orrect value of 
2740: 22 54 48 52 45 41 44 53 41 46 45 22 20 69 73 20  "THREADSAFE" is 
2750: 72 65 70 6f 72 74 65 64 20 77 68 65 6e 20 71 75  reported when qu
2760: 65 72 79 69 6e 67 0a 2a 2a 20 66 6f 72 20 63 6f  erying.** for co
2770: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2780: 6e 73 20 61 74 20 72 75 6e 74 69 6d 65 20 28 65  ns at runtime (e
2790: 2e 67 2e 20 22 50 52 41 47 4d 41 20 63 6f 6d 70  .g. "PRAGMA comp
27a0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 29 2c 20 74  ile_options"), t
27b0: 68 69 73 0a 2a 2a 20 6c 6f 67 69 63 20 69 73 20  his.** logic is 
27c0: 70 61 72 74 69 61 6c 6c 79 20 72 65 70 6c 69 63  partially replic
27d0: 61 74 65 64 20 69 6e 20 63 74 69 6d 65 2e 63 2e  ated in ctime.c.
27e0: 20 49 66 20 69 74 20 69 73 20 75 70 64 61 74 65   If it is update
27f0: 64 20 68 65 72 65 2c 20 69 74 20 73 68 6f 75 6c  d here, it shoul
2800: 64 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 70 64  d.** also be upd
2810: 61 74 65 64 20 74 68 65 72 65 2e 0a 2a 2f 0a 23  ated there..*/.#
2820: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2830: 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23  TE_THREADSAFE).#
2840: 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45   if defined(THRE
2850: 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66 69  ADSAFE).#   defi
2860: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
2870: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
2880: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
2890: 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  e SQLITE_THREADS
28a0: 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d  AFE 1 /* IMP: R-
28b0: 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23  07272-22309 */.#
28c0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
28d0: 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f  *.** Powersafe o
28e0: 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62  verwrite is on b
28f0: 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20  y default.  But 
2900: 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66  can be turned of
2910: 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d  f using.** the -
2920: 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  DSQLITE_POWERSAF
2930: 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f  E_OVERWRITE=0 co
2940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
2950: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
2960: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
2970: 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e  VERWRITE.# defin
2980: 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  e SQLITE_POWERSA
2990: 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23  FE_OVERWRITE 1.#
29a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49  endif../*.** EVI
29b0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31  DENCE-OF: R-2571
29c0: 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61  5-37072 Memory a
29d0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
29e0: 74 69 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64  tics are enabled
29f0: 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75   by.** default u
2a00: 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20  nless SQLite is 
2a10: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
2a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2a30: 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77  STATUS=0 in.** w
2a40: 68 69 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79  hich case memory
2a50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74   allocation stat
2a60: 69 73 74 69 63 73 20 61 72 65 20 64 69 73 61 62  istics are disab
2a70: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  led by default..
2a80: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2a90: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
2aa0: 45 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69  EMSTATUS).# defi
2ab0: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2ac0: 54 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65  T_MEMSTATUS 1.#e
2ad0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63  ndif../*.** Exac
2ae0: 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  tly one of the f
2af0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
2b00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
2b10: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73  in order to.** s
2b20: 70 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d  pecify which mem
2b30: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2b40: 75 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e  ubsystem to use.
2b50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  .**.**     SQLIT
2b60: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
2b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
2b80: 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61  normal system ma
2b90: 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51  lloc().**     SQ
2ba0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2bb0: 43 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  C           // U
2bc0: 73 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  se Win32 native 
2bd0: 68 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20  heap API.**     
2be0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2bf0: 4f 43 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  OC            //
2c00: 20 55 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f   Use a stub allo
2c10: 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79  cator that alway
2c20: 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53  s fails.**     S
2c30: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c50: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
2c60: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
2c70: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
2c80: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
2c90: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ca0: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
2cb0: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
2cc0: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
2cd0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
2ce0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
2cf0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
2d00: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2d10: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
2d20: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
2d30: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
2d40: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
2d50: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
2d60: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
2d70: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
2d80: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
2d90: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
2da0: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
2db0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2dc0: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
2dd0: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
2de0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2df0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2e00: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2e10: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2e20: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2e30: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2e40: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2e50: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
2e60: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
2e70: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
2e80: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
2e90: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
2ea0: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
2eb0: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
2ec0: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
2ed0: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
2ee0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
2ef0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2f00: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
2f10: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
2f20: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
2f30: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f40: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2f50: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2f60: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2f70: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2f80: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2f90: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2fa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2fb0: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
2fc0: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
2fd0: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
2fe0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
2ff0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
3000: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
3010: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
3020: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
3030: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
3040: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
3050: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
3060: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
3070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
3080: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
3090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
30a0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
30b0: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
30c0: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
30d0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
30e0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
30f0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
3100: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
3110: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
3120: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
3130: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
3140: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
3150: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
3160: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
3170: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
3180: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
3190: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
31a0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
31b0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
31c0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
31d0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
31e0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
31f0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
3200: 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64  /*.** NDEBUG and
3210: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72   SQLITE_DEBUG ar
3220: 65 20 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74  e opposites.  It
3230: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62   should always b
3240: 65 20 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64  e true that.** d
3250: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d  efined(NDEBUG)==
3260: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3270: 44 45 42 55 47 29 2e 20 20 49 66 20 74 68 69 73  DEBUG).  If this
3280: 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
3290: 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20  y true,.** make 
32a0: 69 74 20 74 72 75 65 20 62 79 20 64 65 66 69 6e  it true by defin
32b0: 69 6e 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e  ing or undefinin
32c0: 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20  g NDEBUG..**.** 
32d0: 53 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d  Setting NDEBUG m
32e0: 61 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d  akes the code sm
32f0: 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72  aller and faster
3300: 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68   by disabling th
3310: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74  e.** assert() st
3320: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
3330: 63 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e  code.  So we wan
3340: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  t the default ac
3350: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f  tion.** to be fo
3360: 72 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73  r NDEBUG to be s
3370: 65 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f  et and NDEBUG to
3380: 20 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e   be undefined on
3390: 6c 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ly if SQLITE_DEB
33a0: 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54  UG.** is set.  T
33b0: 68 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d  hus NDEBUG becom
33c0: 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74  es an opt-in rat
33d0: 68 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d  her than an opt-
33e0: 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a  out.** feature..
33f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3400: 4e 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69  NDEBUG) && !defi
3410: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3420: 29 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55  ).# define NDEBU
3430: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
3440: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
3450: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
3460: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
3470: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
3480: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49  *.** Enable SQLI
3490: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
34a0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51  N_COMMENTS if SQ
34b0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 74 75  LITE_DEBUG is tu
34c0: 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  rned on..*/.#if 
34d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
34f0: 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69  OMMENTS) && defi
3500: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3510: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3520: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
3530: 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64  _COMMENTS 1.#end
3540: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65  if../*.** The te
3550: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3560: 73 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e  s used to aid in
3570: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
3580: 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e  g.  When.** doin
3590: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
35a0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
35b0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
35c0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
35d0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
35e0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
35f0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
3600: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
3610: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
3620: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
3630: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
3640: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
3650: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
3660: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
3670: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
3680: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
3690: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
36a0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
36b0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
36c0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
36d0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
36e0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
36f0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
3700: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
3710: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
3720: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
3730: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
3740: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
3750: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
3760: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
3770: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
3780: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
3790: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
37a0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
37b0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
37c0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
37d0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
37e0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
37f0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
3800: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
3810: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
3820: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
3830: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
3840: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
3850: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
3860: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
3870: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
3880: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
3890: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
38a0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
38b0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
38c0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
38d0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
38e0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
38f0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
3900: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
3910: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
3920: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
3930: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
3940: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
3950: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
3960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3970: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
3980: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
3990: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
39a0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
39b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
39c0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
39d0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
39e0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
39f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
3a00: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
3a10: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
3a20: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
3a30: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
3a40: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
3a50: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
3a60: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
3a70: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
3a80: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
3a90: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
3aa0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
3ab0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
3ac0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
3ad0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
3ae0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
3af0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
3b00: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
3b10: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
3b20: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
3b30: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
3b40: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
3b50: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
3b60: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
3b70: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
3b80: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
3b90: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3ba0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
3bb0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3bc0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3bd0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
3be0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
3bf0: 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72  ions which.** ar
3c00: 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c  e intended to al
3c10: 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20  ways be true or 
3c20: 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76  false, respectiv
3c30: 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78  ely.  Such.** ex
3c40: 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20  pressions could 
3c50: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
3c60: 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74  the code complet
3c70: 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a  ely.  But they.*
3c80: 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69  * are included i
3c90: 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e  n a few cases in
3ca0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63   order to enhanc
3cb0: 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65  e the resilience
3cc0: 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  .** of SQLite to
3cd0: 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61   unexpected beha
3ce0: 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74  vior - to make t
3cf0: 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65  he code "self-he
3d00: 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75  aling".** or "du
3d10: 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68  ctile" rather th
3d20: 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c  an being "brittl
3d30: 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20  e" and crashing 
3d40: 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  at the first.** 
3d50: 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65  hint of unplanne
3d60: 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a  d behavior..**.*
3d70: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
3d80: 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  , ALWAYS and NEV
3d90: 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72  ER are added for
3da0: 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e   defensive code.
3db0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e  .**.** When doin
3dc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
3dd0: 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  ng ALWAYS and NE
3de0: 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64  VER are hard-cod
3df0: 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65  ed to.** be true
3e00: 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68   and false so th
3e10: 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  at the unreachab
3e20: 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70 65  le code they spe
3e30: 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  cify will.** not
3e40: 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75   be counted as u
3e50: 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f  ntested code..*/
3e60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3e70: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
3e80: 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  T) || defined(SQ
3e90: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
3ea0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
3eb0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
3ec0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
3ed0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
3ee0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3ef0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
3f00: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
3f10: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
3f20: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f30: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
3f40: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
3f50: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
3f60: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
3f70: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
3f80: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
3f90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20  dif../*.** Some 
3fa0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3fb0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f   optimizations o
3fc0: 6e 6c 79 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  nly.  In other w
3fd0: 6f 72 64 73 2c 20 69 66 20 74 68 65 0a 2a 2a 20  ords, if the.** 
3fe0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 20 61 72 65  conditionals are
3ff0: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61   replaced with a
4000: 20 63 6f 6e 73 74 61 6e 74 20 31 20 28 74 72 75   constant 1 (tru
4010: 65 29 20 6f 72 20 30 20 28 66 61 6c 73 65 29 20  e) or 0 (false) 
4020: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 72 72  then.** the corr
4030: 65 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74  ect answer is st
4040: 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 20 74 68  ill obtained, th
4050: 6f 75 67 68 20 70 65 72 68 61 70 73 20 6e 6f 74  ough perhaps not
4060: 20 61 73 20 71 75 69 63 6b 6c 79 2e 0a 2a 2a 0a   as quickly..**.
4070: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4080: 20 6d 61 63 72 6f 73 20 6d 61 72 6b 20 74 68 65   macros mark the
4090: 73 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  se optimizations
40a0: 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 0a 2a   conditionals..*
40b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
40c0: 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45  LITE_MUTATION_TE
40d0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f  ST).# define OK_
40e0: 49 46 5f 41 4c 57 41 59 53 5f 54 52 55 45 28 58  IF_ALWAYS_TRUE(X
40f0: 29 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20  )  (1).# define 
4100: 4f 4b 5f 49 46 5f 41 4c 57 41 59 53 5f 46 41 4c  OK_IF_ALWAYS_FAL
4110: 53 45 28 58 29 20 28 30 29 0a 23 65 6c 73 65 0a  SE(X) (0).#else.
4120: 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49 46 5f 41  # define OK_IF_A
4130: 4c 57 41 59 53 5f 54 52 55 45 28 58 29 20 20 28  LWAYS_TRUE(X)  (
4140: 58 29 0a 23 20 64 65 66 69 6e 65 20 4f 4b 5f 49  X).# define OK_I
4150: 46 5f 41 4c 57 41 59 53 5f 46 41 4c 53 45 28 58  F_ALWAYS_FALSE(X
4160: 29 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ) (X).#endif../*
4170: 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20  .** Some malloc 
4180: 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c  failures are onl
4190: 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51  y possible if SQ
41a0: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
41b0: 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64  C_STRESS is.** d
41c0: 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64  efined.  We need
41d0: 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e   to defend again
41e0: 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65  st those failure
41f0: 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77  s when testing w
4200: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45  ith.** SQLITE_TE
4210: 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  ST_REALLOC_STRES
4220: 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20  S, but we don't 
4230: 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68  want the unreach
4240: 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a  able branches.**
4250: 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c   during a normal
4260: 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c   build.  The fol
4270: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e  lowing macro can
4280: 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73 61   be used to disa
4290: 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61  ble tests.** tha
42a0: 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c  t are always fal
42b0: 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20 53  se except when S
42c0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
42d0: 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65 74  OC_STRESS is set
42e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
42f0: 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41  (SQLITE_TEST_REA
4300: 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64  LLOC_STRESS).# d
4310: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
4320: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
4330: 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69   (X).#elif !defi
4340: 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65  ned(NDEBUG).# de
4350: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
4360: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
4370: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4380: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4390: 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41  fine ONLY_IF_REA
43a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20  LLOC_STRESS(X)  
43b0: 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (0).#endif../*.*
43c0: 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75  * Declarations u
43d0: 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20  sed for tracing 
43e0: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
43f0: 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e  stem interfaces.
4400: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4410: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f  SQLITE_FORCE_OS_
4420: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4430: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4440: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
4450: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
4460: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
4470: 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
4480: 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20  lite3OSTrace;.# 
4490: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
44a0: 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  )          if( s
44b0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29 20  qlite3OSTrace ) 
44c0: 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
44d0: 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51  tf X.# define SQ
44e0: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
44f0: 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  CE.#else.# defin
4500: 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75  e OSTRACE(X).# u
4510: 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56  ndef  SQLITE_HAV
4520: 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69  E_OS_TRACE.#endi
4530: 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20  f../*.** Is the 
4540: 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29  sqlite3ErrName()
4550: 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64   function needed
4560: 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20   in the build?  
4570: 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74  Currently,.** it
4580: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d   is needed by "m
4590: 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65  utex_w32.c" (whe
45a0: 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f  n debugging), "o
45b0: 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a  s_win.c" (when.*
45c0: 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61  * OSTRACE is ena
45d0: 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65  bled), and by se
45e0: 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20  veral "test*.c" 
45f0: 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72 65  files (which are
4600: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69  .** compiled usi
4610: 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e  ng SQLITE_TEST).
4620: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4630: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
4640: 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64  RACE) || defined
4650: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
4660: 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
4670: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4680: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a   SQLITE_OS_WIN).
4690: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
46a0: 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65  NEED_ERR_NAME.#e
46b0: 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c  lse.# undef  SQL
46c0: 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
46d0: 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  E.#endif../*.** 
46e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
46f0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
4700: 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77  s incompatible w
4710: 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
4720: 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65  EXPLAIN.*/.#ifde
4730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4740: 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51  PLAIN.# undef SQ
4750: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
4760: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e  AIN_COMMENTS.#en
4770: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
4780: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
4790: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
47a0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
47b0: 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a  t is too large.*
47c0: 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62  * to fit in 32-b
47d0: 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  its.  This macro
47e0: 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
47f0: 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63  of various testc
4800: 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20  ase().** macros 
4810: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77  to verify that w
4820: 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51  e have tested SQ
4830: 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66  Lite for large-f
4840: 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a  ile support..*/.
4850: 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49  #define IS_BIG_I
4860: 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69  NT(X)  (((X)&~(i
4870: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d  64)0xffffffff)!=
4880: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  0)../*.** The ma
4890: 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69  cro unlikely() i
48a0: 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75  s a hint that su
48b0: 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61  rrounds a boolea
48c0: 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  n.** expression 
48d0: 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
48e0: 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69  false.  Macro li
48f0: 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73  kely() surrounds
4900: 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78  .** a boolean ex
4910: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
4920: 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20   usually true.  
4930: 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c  These hints coul
4940: 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c  d,.** in theory,
4950: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
4960: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65  compiler to gene
4970: 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65  rate better code
4980: 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74  , but.** current
4990: 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74  ly they are just
49a0: 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75   comments for hu
49b0: 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a  man readers..*/.
49c0: 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58  #define likely(X
49d0: 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65  )    (X).#define
49e0: 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58   unlikely(X)  (X
49f0: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73  )..#include "has
4a00: 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  h.h".#include "p
4a10: 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  arse.h".#include
4a20: 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c   <stdio.h>.#incl
4a30: 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23  ude <stdlib.h>.#
4a40: 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e  include <string.
4a50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  h>.#include <ass
4a60: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
4a70: 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a  <stddef.h>../*.*
4a80: 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f  * Use a macro to
4a90: 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28   replace memcpy(
4aa0: 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69  ) if compiled wi
4ab0: 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  th SQLITE_INLINE
4ac0: 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73  _MEMCPY..** This
4ad0: 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d   allows better m
4ae0: 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77  easurements of w
4af0: 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73  here memcpy() is
4b00: 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69   used when runni
4b10: 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64  ng.** cachegrind
4b20: 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63 72  .  But this macr
4b30: 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d  o version of mem
4b40: 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73 6c  cpy() is very sl
4b50: 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75  ow so it.** shou
4b60: 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ld not be used i
4b70: 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54  n production.  T
4b80: 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d  his is a perform
4b90: 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74  ance measurement
4ba0: 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a  .** hack only..*
4bb0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4bc0: 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20  INLINE_MEMCPY.# 
4bd0: 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c  define memcpy(D,
4be0: 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28  S,N) {char*xxd=(
4bf0: 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20  char*)(D);const 
4c00: 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20  char*xxs=(const 
4c10: 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20  char*)(S);\.    
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b      int xxn=(N);
4c40: 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28  while(xxn-->0)*(
4c50: 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b  xxd++)=*(xxs++);
4c60: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
4c70: 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  If compiling for
4c80: 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61   a processor tha
4c90: 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67  t lacks floating
4ca0: 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a   point support,.
4cb0: 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e  ** substitute in
4cc0: 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69  teger for floati
4cd0: 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64  ng-point.*/.#ifd
4ce0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
4cf0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20  LOATING_POINT.# 
4d00: 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71  define double sq
4d10: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66  lite_int64.# def
4d20: 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65  ine float sqlite
4d30: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4d40: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20  LONGDOUBLE_TYPE 
4d50: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69  sqlite_int64.# i
4d60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47  fndef SQLITE_BIG
4d70: 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20  _DBL.#   define 
4d80: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28  SQLITE_BIG_DBL (
4d90: 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29  ((sqlite3_int64)
4da0: 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a  1)<<50).# endif.
4db0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4dc0: 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
4dd0: 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53  NCS 1.# define S
4de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
4df0: 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54   1.# undef SQLIT
4e00: 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36  E_MIXED_ENDIAN_6
4e10: 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64  4BIT_FLOAT.# und
4e20: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49  ef SQLITE_HAVE_I
4e30: 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e  SNAN.#endif.#ifn
4e40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4e50: 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  BL.# define SQLI
4e60: 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39  TE_BIG_DBL (1e99
4e70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4e80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73  OMIT_TEMPDB is s
4e90: 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54  et to 1 if SQLIT
4ea0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73  E_OMIT_TEMPDB is
4eb0: 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a   defined, or 0.*
4ec0: 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76  * afterward. Hav
4ed0: 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61  ing this macro a
4ee0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73  llows us to caus
4ef0: 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  e the C compiler
4f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
4f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
4f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
4f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
4f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
4f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
4f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
4f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
4f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
4f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
4fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
4fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
4fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
4fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
4ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
5000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
5010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
5030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
5040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
5050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
5060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
5070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
5080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
5090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
50a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
50b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
50c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
50d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
50e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
50f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
5100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
5110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
5120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
5130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
5140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
5150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
5160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
5170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
5180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
5190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
51a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
51b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
51c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
51d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
51e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
51f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
5200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
5220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
5230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
5240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
5250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
5260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65  _TEMP_STORE 1.#e
5280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
5290: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
52a0: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
52b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
52c0: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
52d0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
52e0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
52f0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
5300: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
5310: 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a   it.** to zero..
5320: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45  */.#if SQLITE_TE
5330: 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53  MP_STORE==3 || S
5340: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
5350: 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  ==0.# undef SQLI
5360: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5370: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5380: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
5390: 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69  _THREADS 0.#endi
53a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
53b0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
53c0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
53d0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
53e0: 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a  HREADS 8.#endif.
53f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
5400: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5410: 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53  READS.# define S
5420: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
5430: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23  RKER_THREADS 0.#
5440: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
5450: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5460: 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d  THREADS>SQLITE_M
5470: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5480: 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  S.# undef SQLITE
5490: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
54a0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
54b0: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
54c0: 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45  HREADS SQLITE_DE
54d0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
54e0: 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EADS.#endif../*.
54f0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
5500: 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  nitial allocatio
5510: 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61  n for the pageca
5520: 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73  che when using s
5530: 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63  eparate.** pagec
5540: 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64  aches for each d
5550: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5560: 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20  on.  A positive 
5570: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a  number is the.**
5580: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5590: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75  .  A negative nu
55a0: 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69  mber N translati
55b0: 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ons means that a
55c0: 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31   buffer.** of -1
55d0: 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61  024*N bytes is a
55e0: 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65  llocated and use
55f0: 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61  d for as many pa
5600: 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68  ges as it will h
5610: 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  old..**.** The d
5620: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5630: 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e  "20" was choosen
5640: 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65   to minimize the
5650: 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65   run-time of the
5660: 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74  .** speedtest1 t
5670: 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68  est program with
5680: 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69   options: --shri
5690: 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72  nk-memory --repr
56a0: 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  epare.*/.#ifndef
56b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
56c0: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20  PCACHE_INITSZ.# 
56d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
56e0: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
56f0: 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f  TSZ 20.#endif../
5700: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 76 61 6c  *.** Default val
5710: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 49 54  ue for the SQLIT
5720: 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52 52  E_CONFIG_SORTERR
5730: 45 46 5f 53 49 5a 45 20 6f 70 74 69 6f 6e 2e 0a  EF_SIZE option..
5740: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5750: 45 5f 44 45 46 41 55 4c 54 5f 53 4f 52 54 45 52  E_DEFAULT_SORTER
5760: 52 45 46 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  REF_SIZE.# defin
5770: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5780: 5f 53 4f 52 54 45 52 52 45 46 5f 53 49 5a 45 20  _SORTERREF_SIZE 
5790: 30 78 37 66 66 66 66 66 66 66 0a 23 65 6e 64 69  0x7fffffff.#endi
57a0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  f../*.** The com
57b0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
57c0: 73 20 53 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45  s SQLITE_MMAP_RE
57d0: 41 44 57 52 49 54 45 20 61 6e 64 20 0a 2a 2a 20  ADWRITE and .** 
57e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
57f0: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5800: 20 61 72 65 20 6e 6f 74 20 63 6f 6d 70 61 74 69   are not compati
5810: 62 6c 65 20 77 69 74 68 20 6f 6e 65 20 61 6e 6f  ble with one ano
5820: 74 68 65 72 2e 0a 2a 2a 20 59 6f 75 20 6d 75 73  ther..** You mus
5830: 74 20 63 68 6f 6f 73 65 20 6f 6e 65 20 6f 72 20  t choose one or 
5840: 74 68 65 20 6f 74 68 65 72 20 28 6f 72 20 6e 65  the other (or ne
5850: 69 74 68 65 72 29 20 62 75 74 20 6e 6f 74 20 62  ither) but not b
5860: 6f 74 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  oth..*/.#if defi
5870: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 4d 41 50 5f  ned(SQLITE_MMAP_
5880: 52 45 41 44 57 52 49 54 45 29 20 26 26 20 64 65  READWRITE) && de
5890: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
58a0: 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43  BLE_BATCH_ATOMIC
58b0: 5f 57 52 49 54 45 29 0a 23 65 72 72 6f 72 20 43  _WRITE).#error C
58c0: 61 6e 6e 6f 74 20 75 73 65 20 62 6f 74 68 20 53  annot use both S
58d0: 51 4c 49 54 45 5f 4d 4d 41 50 5f 52 45 41 44 57  QLITE_MMAP_READW
58e0: 52 49 54 45 20 61 6e 64 20 53 51 4c 49 54 45 5f  RITE and SQLITE_
58f0: 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
5900: 4d 49 43 5f 57 52 49 54 45 0a 23 65 6e 64 69 66  MIC_WRITE.#endif
5910: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
5920: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
5930: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
5940: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
5950: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
5960: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
5970: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
5980: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
5990: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
59a0: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
59b0: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
59c0: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
59d0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
59e0: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
59f0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
5a00: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  umbers..*/.#ifnd
5a10: 65 66 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20  ef MIN.# define 
5a20: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
5a30: 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69  )?(A):(B)).#endi
5a40: 66 0a 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20  f.#ifndef MAX.# 
5a50: 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20  define MAX(A,B) 
5a60: 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29  ((A)>(B)?(A):(B)
5a70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5a80: 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73  Swap two objects
5a90: 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a   of type TYPE..*
5aa0: 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28 54  /.#define SWAP(T
5ab0: 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74  YPE,A,B) {TYPE t
5ac0: 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a  =A; A=B; B=t;}..
5ad0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
5ae0: 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68 69  ee if this machi
5af0: 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e 20  ne uses EBCDIC. 
5b00: 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69   (Yes, believe i
5b10: 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65  t or.** not, the
5b20: 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63  re are still mac
5b30: 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20  hines out there 
5b40: 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43 2e  that use EBCDIC.
5b50: 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20  ).*/.#if 'A' == 
5b60: 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20  '\301'.# define 
5b70: 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a  SQLITE_EBCDIC 1.
5b80: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
5b90: 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65  QLITE_ASCII 1.#e
5ba0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
5bb0: 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69  gers of known si
5bc0: 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70 65  zes.  These type
5bd0: 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67  defs might chang
5be0: 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  e for architectu
5bf0: 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  res.** where the
5c00: 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72   sizes very.  Pr
5c10: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
5c20: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
5c30: 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  so that the.** t
5c40: 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76  ypes can be conv
5c50: 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e  eniently redefin
5c60: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79  ed at compile-ty
5c70: 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a  pe.  Like this:.
5c80: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63  **.**         cc
5c90: 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45   '-DUINTPTR_TYPE
5ca0: 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20  =long long int' 
5cb0: 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55  ....*/.#ifndef U
5cc0: 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64  INT32_TYPE.# ifd
5cd0: 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54  ef HAVE_UINT32_T
5ce0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5cf0: 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a  2_TYPE uint32_t.
5d00: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5d10: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73   UINT32_TYPE uns
5d20: 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69  igned int.# endi
5d30: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5d40: 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69   UINT16_TYPE.# i
5d50: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36  fdef HAVE_UINT16
5d60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5d70: 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f  T16_TYPE uint16_
5d80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5d90: 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75  ne UINT16_TYPE u
5da0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
5db0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
5dc0: 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54  .#ifndef INT16_T
5dd0: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5de0: 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69  _INT16_T.#  defi
5df0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e  ne INT16_TYPE in
5e00: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
5e10: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
5e20: 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  E short int.# en
5e30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5e40: 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20  ef UINT8_TYPE.# 
5e50: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38  ifdef HAVE_UINT8
5e60: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
5e70: 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a  T8_TYPE uint8_t.
5e80: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5e90: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69   UINT8_TYPE unsi
5ea0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
5eb0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5ec0: 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64   INT8_TYPE.# ifd
5ed0: 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23  ef HAVE_INT8_T.#
5ee0: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5ef0: 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  PE int8_t.# else
5f00: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
5f10: 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61 72  TYPE signed char
5f20: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f30: 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42  #ifndef LONGDOUB
5f40: 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65  LE_TYPE.# define
5f50: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
5f60: 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e   long double.#en
5f70: 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69  dif.typedef sqli
5f80: 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  te_int64 i64;   
5f90: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
5fa0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5fb0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  */.typedef sqlit
5fc0: 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20  e_uint64 u64;   
5fd0: 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20        /* 8-byte 
5fe0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ff0: 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54   */.typedef UINT
6000: 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20  32_TYPE u32;    
6010: 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65         /* 4-byte
6020: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6030: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
6040: 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20  T16_TYPE u16;   
6050: 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74          /* 2-byt
6060: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
6070: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6080: 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20  T16_TYPE i16;   
6090: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
60a0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
60b0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
60c0: 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20  T8_TYPE u8;     
60d0: 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74          /* 1-byt
60e0: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
60f0: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  er */.typedef IN
6100: 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20  T8_TYPE i8;     
6110: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
6120: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
6130: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49  r */../*.** SQLI
6140: 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20  TE_MAX_U32 is a 
6150: 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61  u64 constant tha
6160: 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  t is the maximum
6170: 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68   u64 value.** th
6180: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
6190: 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75   in a u32 withou
61a0: 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20  t loss of data. 
61b0: 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
61c0: 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66 66   0x00000000fffff
61d0: 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75 73  fff.  But becaus
61e0: 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73  e of quirks of s
61f0: 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77  ome compilers, w
6200: 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65  e.** have to spe
6210: 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20 69  cify the value i
6220: 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69  n the less intui
6230: 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77  tive manner show
6240: 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n:.*/.#define SQ
6250: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28  LITE_MAX_U32  ((
6260: 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29  ((u64)1)<<32)-1)
6270: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
6280: 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f  type used to sto
6290: 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20  re estimates of 
62a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
62b0: 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65  ws in a.** table
62c0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73   or index.  This
62d0: 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
62e0: 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20 46  integer type.  F
62f0: 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74  or 99.9% of.** t
6300: 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62  he world, a 32-b
6310: 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73 75  it integer is su
6320: 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61  fficient.  But a
6330: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
6340: 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ** can be used a
6350: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69  t compile-time i
6360: 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69  f desired..*/.#i
6370: 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49  fdef SQLITE_64BI
6380: 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65 66  T_STATS. typedef
6390: 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20   u64 tRowcnt;   
63a0: 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20   /* 64-bit only 
63b0: 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74 20  if requested at 
63c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a  compile-time */.
63d0: 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75  #else. typedef u
63e0: 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  32 tRowcnt;    /
63f0: 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65 20  * 32-bit is the 
6400: 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69  default */.#endi
6410: 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74  f../*.** Estimat
6420: 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75 73  ed quantities us
6430: 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  ed for query pla
6440: 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64  nning are stored
6450: 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f   as 16-bit.** lo
6460: 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71  garithms.  For q
6470: 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76  uantity X, the v
6480: 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20 31  alue stored is 1
6490: 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73  0*log2(X).  This
64a0: 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73  .** gives a poss
64b0: 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61  ible range of va
64c0: 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d  lues of approxim
64d0: 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f  ately 1.0e986 to
64e0: 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20   1e-986..** But 
64f0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75  the allowed valu
6500: 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e  es are "grainy".
6510: 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75    Not every valu
6520: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61 62  e is representab
6530: 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  le..** For examp
6540: 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31  le, quantities 1
6550: 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74  6 and 17 are bot
6560: 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  h represented by
6570: 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20   a LogEst.** of 
6580: 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69  40.  However, si
6590: 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74  nce LogEst quant
65a0: 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f 73  ities are suppos
65b0: 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65  e to be estimate
65c0: 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20  s,.** not exact 
65d0: 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70  values, this imp
65e0: 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20  recision is not 
65f0: 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a  a problem..**.**
6600: 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f   "LogEst" is sho
6610: 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68  rt for "Logarith
6620: 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a  mic Estimate"..*
6630: 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  *.** Examples:.*
6640: 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20  *      1 -> 0   
6650: 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e             20 ->
6660: 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30 30   43          100
6670: 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20  00 -> 132.**    
6680: 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20    2 -> 10       
6690: 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20        25 -> 46  
66a0: 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e          25000 ->
66b0: 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d   146.**      3 -
66c0: 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20 20  > 16            
66d0: 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20  100 -> 66       
66e0: 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a   1000000 -> 199.
66f0: 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20  **      4 -> 20 
6700: 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20 2d            1000 -
6710: 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34 38  > 99        1048
6720: 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20  576 -> 200.**   
6730: 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20    10 -> 33      
6740: 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30       1024 -> 100
6750: 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20 2d      4294967296 -
6760: 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20  > 320.**.** The 
6770: 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65  LogEst can be ne
6780: 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61  gative to indica
6790: 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61  te fractional va
67a0: 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  lues..** Example
67b0: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20  s:.**.**    0.5 
67c0: 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20  -> -10          
67d0: 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20   0.1 -> -33     
67e0: 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30     0.0625 -> -40
67f0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31  .*/.typedef INT1
6800: 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a  6_TYPE LogEst;..
6810: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51  /*.** Set the SQ
6820: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63  LITE_PTRSIZE mac
6830: 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ro to the number
6840: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70   of bytes in a p
6850: 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  ointer.*/.#ifnde
6860: 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  f SQLITE_PTRSIZE
6870: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6880: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
6890: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
68a0: 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49  ITE_PTRSIZE __SI
68b0: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23  ZEOF_POINTER__.#
68c0: 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33   elif defined(i3
68d0: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
68e0: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
68f0: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
6900: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
6910: 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d    defined(_M_ARM
6920: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
6930: 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65  _arm__)    || de
6940: 66 69 6e 65 64 28 5f 5f 78 38 36 29 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 7c 7c 20 64  d(i386)     || d
6dd0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
6de0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
6df0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
6e00: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
6e10: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
6e20: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6e30: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6e40: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6e50: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6e70: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6e80: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6e90: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ea0: 5f 5f 61 72 6d 5f 5f 29 20 20 7c 7c 20 64 65 66  __arm__)  || def
6eb0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 36 34 29 0a 23  ined(_M_ARM64).#
6ec0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6ed0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32  _BYTEORDER    12
6ee0: 33 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65  34.# elif define
6ef0: 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64  d(sparc)    || d
6f00: 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a  efined(__ppc__).
6f10: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6f20: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6f30: 33 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  321.# else.#   d
6f40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6f50: 45 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66  EORDER 0.# endif
6f60: 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
6f70: 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33  TE_BYTEORDER==43
6f80: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
6f90: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6fa0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6fb0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
6fc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6fd0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
6fe0: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c  LITE_UTF16BE.#el
6ff0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
7000: 44 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69  DER==1234.# defi
7010: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
7020: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
7030: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7040: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
7050: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7060: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
7070: 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65  6LE.#else.# ifde
7080: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
7090: 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e  ATION.  const in
70a0: 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31  t sqlite3one = 1
70b0: 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72  ;.# else.  exter
70c0: 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69  n const int sqli
70d0: 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a  te3one;.# endif.
70e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
70f0: 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28  BIGENDIAN    (*(
7100: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
7110: 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e  one)==0).# defin
7120: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
7130: 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29  NDIAN (*(char *)
7140: 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31  (&sqlite3one)==1
7150: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
7160: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28  E_UTF16NATIVE  (
7170: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
7180: 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a  ?SQLITE_UTF16BE:
7190: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a  SQLITE_UTF16LE).
71a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
71b0: 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20  nstants for the 
71c0: 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c  largest and smal
71d0: 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34  lest possible 64
71e0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
71f0: 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d  gers..** These m
7200: 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e  acros are design
7210: 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65  ed to work corre
7220: 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d  ctly on both 32-
7230: 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a  bit and 64-bit.*
7240: 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a  * compilers..*/.
7250: 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f  #define LARGEST_
7260: 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66  INT64  (0xffffff
7270: 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66  ff|(((i64)0x7fff
7280: 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66  ffff)<<32)).#def
7290: 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  ine SMALLEST_INT
72a0: 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20  64 (((i64)-1) - 
72b0: 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a  LARGEST_INT64)..
72c0: 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61  /*.** Round up a
72d0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e   number to the n
72e0: 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69  ext larger multi
72f0: 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20  ple of 8.  This 
7300: 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f  is used.** to fo
7310: 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e  rce 8-byte align
7320: 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61  ment on 64-bit a
7330: 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f  rchitectures..*/
7340: 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28  .#define ROUND8(
7350: 78 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26  x)     (((x)+7)&
7360: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  ~7)../*.** Round
7370: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61   down to the nea
7380: 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rest multiple of
7390: 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f   8.*/.#define RO
73a0: 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29  UNDDOWN8(x) ((x)
73b0: 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65  &~7)../*.** Asse
73c0: 72 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e  rt that the poin
73d0: 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64  ter X is aligned
73e0: 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   to an 8-byte bo
73f0: 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a  undary.  This.**
7400: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f   macro is used o
7410: 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72  nly within asser
7420: 74 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68  t() to verify th
7430: 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73  at the code gets
7440: 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e  .** all alignmen
7450: 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63  t restrictions c
7460: 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78  orrect..**.** Ex
7470: 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f  cept, if SQLITE_
7480: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
7490: 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64  ALLOC is defined
74a0: 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e  , then the.** un
74b0: 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28  derlying malloc(
74c0: 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ) implementation
74d0: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
74e0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
74f0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
7500: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
7510: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
7520: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
7530: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
7540: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
7550: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
7560: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
7570: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
7580: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
7590: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
75a0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
75b0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
75c0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
75d0: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
75e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  endif../*.** Dis
75f0: 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61  able MMAP on pla
7600: 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20  tforms where it 
7610: 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20  is known to not 
7620: 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69  work.*/.#if defi
7630: 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29  ned(__OpenBSD__)
7640: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e   || defined(__QN
7650: 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20  XNTO__).# undef 
7660: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7670: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7690: 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ZE 0.#endif../*.
76a0: 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d  ** Default maxim
76b0: 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72  um size of memor
76c0: 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79  y used by memory
76d0: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74  -mapped I/O in t
76e0: 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66  he VFS.*/.#ifdef
76f0: 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63   __APPLE__.# inc
7700: 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64  lude <TargetCond
7710: 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64  itionals.h>.#end
7720: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
7730: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7740: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
7750: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
7760: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
7770: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
7780: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
7790: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
77a0: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
77b0: 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66  _sun) \.  || def
77c0: 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f  ined(__FreeBSD__
77d0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
77e0: 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a  (__DragonFly__).
77f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
7800: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
7810: 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32  0x7fff0000  /* 2
7820: 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65  147418112 */.# e
7830: 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
7840: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7850: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
7860: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
7870: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
7880: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
7890: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
78a0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
78b0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
78c0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
78d0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
78e0: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
78f0: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
7900: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
7910: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
7920: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
7930: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7940: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
7950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7960: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7970: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7980: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7990: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
79a0: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
79b0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
79c0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
79d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
79e0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
79f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
7a00: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
7a10: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7a20: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7a30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7a40: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7a50: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7a60: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7a70: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7a80: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7a90: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7aa0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7ab0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7ac0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7ad0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
7ae0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7af0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
7b00: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7b10: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7b20: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7b30: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7b50: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7b60: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7b70: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7b80: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7b90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7ba0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
7bc0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
7bd0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
7be0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
7bf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
7c00: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
7c10: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7c20: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7c30: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7c40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7c50: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
7c60: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7c70: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7c80: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7c90: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7ca0: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7cb0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7cc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7cd0: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7ce0: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7cf0: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7d00: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
7d10: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
7d20: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
7d30: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
7d40: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
7d50: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
7d60: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7d70: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7d80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7d90: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7da0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7db0: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7dc0: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7dd0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7de0: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7df0: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7e00: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7e10: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7e20: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7e30: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7e40: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7e50: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7e60: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7e70: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7e80: 78 42 75 73 79 48 61 6e 64 6c 65 72 29 28 76 6f  xBusyHandler)(vo
7e90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
7ea0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
7eb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 42 75 73   */.  void *pBus
7ec0: 79 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  yArg;           
7ed0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7ee0: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
7ef0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
7f00: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f20: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7f30: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
7f40: 2a 2f 0a 20 20 75 38 20 62 45 78 74 72 61 46 69  */.  u8 bExtraFi
7f50: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
7f60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 6c 75 64         /* Includ
7f70: 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 61  e sqlite3_file a
7f80: 73 20 63 61 6c 6c 62 61 63 6b 20 61 72 67 20 2a  s callback arg *
7f90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7fa0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7fb0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7fc0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7fd0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7fe0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ff0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
8000: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
8010: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
8020: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
8030: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
8040: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
8050: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
8060: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
8070: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
8080: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8090: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
80a0: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
80b0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
80c0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
80d0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
80e0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
80f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
8100: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
8110: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
8120: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
8130: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
8140: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
8150: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
8160: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
8170: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
8180: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
8190: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
81a0: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
81b0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
81c0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
81d0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
81e0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
81f0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
8200: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
8210: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
8220: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
8230: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
8240: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
8250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
8260: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
8270: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
8280: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
8290: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
82a0: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
82b0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
82c0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
82d0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
82e0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
82f0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
8300: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
8310: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
8320: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
8330: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
8340: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
8350: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
8360: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
8370: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
8380: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
8390: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
83a0: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
83b0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
83c0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
83d0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
83e0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
83f0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
8400: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
8410: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
8420: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
8430: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
8440: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
8450: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
8460: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
8470: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
8480: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
8490: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
84a0: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
84b0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
84c0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
84d0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
84e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
84f0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
8500: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8510: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8520: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8530: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8540: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8550: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8560: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8570: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8580: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8590: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
85a0: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
85b0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
85c0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
85d0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
85e0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
85f0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
8600: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8610: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8620: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8630: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8640: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8650: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8660: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8670: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8680: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8690: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
86a0: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
86b0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
86c0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
86d0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
86e0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
86f0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8700: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8710: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8730: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8740: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8750: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8760: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8770: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8780: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8790: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
87a0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
87b0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
87c0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
87d0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
87e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
87f0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8800: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8810: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8820: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8830: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8840: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8850: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8860: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8870: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8880: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8890: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
88a0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
88b0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
88c0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
88d0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
88e0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
88f0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8900: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8910: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8920: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8930: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8940: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8950: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8960: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8970: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8980: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8990: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
89a0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
89b0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
89c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
89d0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
89e0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
89f0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8a00: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8a10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8a20: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8a30: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8a40: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8a50: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8a60: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8a80: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8a90: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8aa0: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8ab0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8ac0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8ad0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8ae0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8af0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8b00: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8b10: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8b20: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8b30: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8b40: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8b50: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8b60: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8b70: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8b80: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8b90: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8ba0: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8bb0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8bc0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8bd0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8be0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8bf0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8c00: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8c10: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8c20: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8c30: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8c40: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8c50: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8c60: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8c70: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8c80: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8c90: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8ca0: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8cb0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8cc0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8cd0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8ce0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8cf0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8d00: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8d20: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8d30: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8d40: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8d50: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8d60: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8d70: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8d80: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8d90: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8da0: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8db0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8dc0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8dd0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8de0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8df0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8e00: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8e10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
8e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
8e40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
8e50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
8e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8e80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
8e90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
8ea0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
8eb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
8ec0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
8ed0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ee0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
8ef0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
8f00: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
8f10: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
8f30: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
8f40: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
8f50: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
8f60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8f70: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
8f80: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
8f90: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
8fa0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
8fb0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
8fc0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
8fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fe0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
8ff0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
9000: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
9010: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9020: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
9030: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
9040: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9050: 52 65 6e 61 6d 65 54 6f 6b 65 6e 20 52 65 6e 61  RenameToken Rena
9060: 6d 65 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  meToken;.typedef
9070: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
9080: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
9090: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
90a0: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
90b0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
90c0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
90d0: 20 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68   struct SQLiteTh
90e0: 72 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61  read SQLiteThrea
90f0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
9100: 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
9110: 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66  ectDest;.typedef
9120: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
9130: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
9140: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f   struct sqlite3_
9150: 73 74 72 20 53 74 72 41 63 63 75 6d 3b 20 2f 2a  str StrAccum; /*
9160: 20 49 6e 74 65 72 6e 61 6c 20 61 6c 69 61 73 20   Internal alias 
9170: 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72 20  for sqlite3_str 
9180: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
9190: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
91a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
91b0: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
91c0: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
91d0: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
91e0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
91f0: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
9200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9210: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
9220: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9230: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
9240: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
9250: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
9260: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
9270: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
9280: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
9290: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
92a0: 65 64 65 66 20 73 74 72 75 63 74 20 55 70 73 65  edef struct Upse
92b0: 72 74 20 55 70 73 65 72 74 3b 0a 74 79 70 65 64  rt Upsert;.typed
92c0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
92d0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
92e0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
92f0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
9300: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
9310: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
9320: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
9330: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
9340: 65 66 20 73 74 72 75 63 74 20 57 69 6e 64 6f 77  ef struct Window
9350: 20 57 69 6e 64 6f 77 3b 0a 74 79 70 65 64 65 66   Window;.typedef
9360: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
9370: 68 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  h;.../*.** The b
9380: 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
9390: 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
93a0: 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
93b0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
93c0: 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
93d0: 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
93e0: 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
93f0: 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
9400: 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
9410: 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
9420: 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
9430: 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
9440: 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
9450: 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
9460: 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
9470: 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65  n ix86..*/.#ifde
9480: 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
9490: 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65 66 20  _TYPE.  typedef 
94a0: 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
94b0: 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c  YPE Bitmask;.#el
94c0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34  se.  typedef u64
94d0: 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66   Bitmask;.#endif
94e0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
94f0: 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
9500: 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
9510: 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
9520: 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
9530: 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
9540: 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
9550: 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
9560: 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
9570: 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
9580: 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
9590: 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
95a0: 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
95b0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
95c0: 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c  (n)).#define ALL
95d0: 42 49 54 53 20 20 20 20 20 20 28 28 42 69 74 6d  BITS      ((Bitm
95e0: 61 73 6b 29 2d 31 29 0a 0a 2f 2a 20 41 20 56 4c  ask)-1)../* A VL
95f0: 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f 72  ist object recor
9600: 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65 74  ds a mapping bet
9610: 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73 2f  ween parameters/
9620: 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63 61  variables/wildca
9630: 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51  rds.** in the SQ
9640: 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75 63  L statement (suc
9650: 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72 2c  h as $abc, @pqr,
9660: 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74 68   or :xyz) and th
9670: 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72  e integer.** var
9680: 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73 73  iable number ass
9690: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
96a0: 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53 65  t parameter.  Se
96b0: 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65 73  e the format des
96c0: 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74  cription.** on t
96d0: 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74 41  he sqlite3VListA
96e0: 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72  dd() routine for
96f0: 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f   more informatio
9700: 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20 72  n.  A VList is r
9710: 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e  eally.** just an
9720: 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65   array of intege
9730: 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69  rs..*/.typedef i
9740: 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a  nt VList;../*.**
9750: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
9760: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
9770: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
9780: 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22  he "u8" and.** "
9790: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
97a0: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
97b0: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
97c0: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
97d0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
97e0: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
97f0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
9800: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
9810: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
9820: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
9830: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
9840: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23 69  de "pcache.h".#i
9850: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
9860: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
9870: 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  ../* The SQLITE_
9880: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f  EXTRA_DURABLE co
9890: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
98a0: 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  n used to set th
98b0: 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e  e default.** syn
98c0: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
98d0: 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69   to EXTRA.  It i
98e0: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70  s no longer supp
98f0: 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  orted..*/.#ifdef
9900: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9910: 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20  RABLE.# warning 
9920: 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  Use SQLITE_DEFAU
9930: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33  LT_SYNCHRONOUS=3
9940: 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49   instead of SQLI
9950: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
9960: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
9970: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9980: 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f  NOUS 3.#endif../
9990: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e  *.** Default syn
99a0: 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e  chronous levels.
99b0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
99c0: 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20   (for historcal 
99d0: 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47  reasons) the PAG
99e0: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a  ER_SYNCHRONOUS_*
99f0: 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a   macros differ.*
9a00: 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  * from the SQLIT
9a10: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9a20: 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31  ONOUS value by 1
9a30: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  ..**.**         
9a40: 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e    PAGER_SYNCHRON
9a50: 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55 4c  OUS       DEFAUL
9a60: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a  T_SYNCHRONOUS.**
9a70: 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20 20     OFF          
9a80: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
9a90: 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20             0.** 
9aa0: 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20    NORMAL        
9ab0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
9ac0: 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20            1.**  
9ad0: 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33   FULL          3
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20           2.**   
9b00: 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34 20  EXTRA         4 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20          3.**.** 
9b30: 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63  The "PRAGMA sync
9b40: 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65  hronous" stateme
9b50: 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65  nt also uses the
9b60: 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62   zero-based numb
9b70: 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ers..** In other
9b80: 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f   words, the zero
9b90: 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61  -based numbers a
9ba0: 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  re used for all 
9bb0: 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61  external interfa
9bc0: 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f  ces.** and the o
9bd0: 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20  ne-based values 
9be0: 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61  are used interna
9bf0: 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  lly..*/.#ifndef 
9c00: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9c10: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66  YNCHRONOUS.# def
9c20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
9c30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32  LT_SYNCHRONOUS 2
9c40: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
9c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
9c60: 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23  AL_SYNCHRONOUS.#
9c70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
9c80: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9c90: 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45  RONOUS SQLITE_DE
9ca0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
9cb0: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
9cc0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
9cd0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
9ce0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
9cf0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
9d00: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
9d10: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
9d20: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
9d30: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
9d40: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
9d50: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
9d60: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
9d70: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
9d80: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
9d90: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
9da0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
9db0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
9dc0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
9dd0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
9de0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
9df0: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
9e00: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Db {.  char *zDb
9e10: 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  SName;      /* N
9e20: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
9e30: 62 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61  base. (schema na
9e40: 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65  me, not filename
9e50: 29 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  ) */.  Btree *pB
9e60: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
9e70: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
9e80: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
9e90: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
9ea0: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
9eb0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
9ec0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
9ed0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
9ee0: 2f 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b  /.  u8 bSyncSet;
9ef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
9f00: 20 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63   if "PRAGMA sync
9f10: 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62  hronous=N" has b
9f20: 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68  een run */.  Sch
9f30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
9f40: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
9f50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
9f60: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
9f70: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
9f80: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9f90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9fa0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
9fb0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
9fc0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
9fd0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
9fe0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
9ff0: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
a000: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
a010: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
a020: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
a030: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
a040: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
a050: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
a060: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
a070: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
a080: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
a090: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
a0a0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
a0b0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
a0c0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
a0d0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a  ared object..**.
a0e0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
a0f0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
a100: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
a110: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
a120: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
a130: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
a140: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
a150: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
a160: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
a170: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
a180: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
a190: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
a1a0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
a1b0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
a1c0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
a1d0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
a1e0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
a1f0: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
a200: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
a210: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
a220: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
a230: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
a240: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
a250: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
a260: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
a270: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
a280: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
a290: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
a2a0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
a2b0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
a2c0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
a2d0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
a2e0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
a2f0: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
a300: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
a310: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
a320: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
a330: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
a340: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
a350: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
a360: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
a370: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
a380: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
a390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a3a0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
a3b0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
a3c0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
a3d0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
a3e0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
a3f0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
a400: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
a410: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
a420: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
a430: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
a440: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
a450: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
a460: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
a470: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
a480: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
a490: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
a4a0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
a4b0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
a4c0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
a4d0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
a4e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
a4f0: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
a500: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
a510: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
a520: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
a530: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
a540: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
a550: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
a560: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
a570: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
a580: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
a590: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
a5a0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
a5b0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
a5c0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
a5d0: 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70  s in the.** Db.p
a5e0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
a5f0: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
a600: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
a610: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
a620: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
a630: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
a640: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
a650: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
a660: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
a670: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a680: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
a690: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
a6a0: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
a6b0: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
a6c0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a6d0: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
a6e0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
a6f0: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
a700: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
a710: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
a720: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
a730: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
a740: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
a750: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
a760: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
a770: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
a780: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
a790: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
a7a0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
a7b0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
a7c0: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
a7d0: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
a7e0: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
a7f0: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
a800: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
a810: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
a820: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
a830: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
a840: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
a850: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
a860: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
a870: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
a880: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
a890: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
a8a0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
a8b0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
a8c0: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
a8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
a8e0: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
a8f0: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
a900: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
a910: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
a920: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
a930: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
a940: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
a950: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
a960: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 23 64 65   0 bytes) */.#de
a970: 66 69 6e 65 20 44 42 5f 52 65 73 65 74 57 61 6e  fine DB_ResetWan
a980: 74 65 64 20 20 20 20 20 30 78 30 30 30 38 20 20  ted     0x0008  
a990: 2f 2a 20 52 65 73 65 74 20 74 68 65 20 73 63 68  /* Reset the sch
a9a0: 65 6d 61 20 77 68 65 6e 20 6e 53 63 68 65 6d 61  ema when nSchema
a9b0: 4c 6f 63 6b 3d 3d 30 20 2a 2f 0a 0a 2f 2a 0a 2a  Lock==0 */../*.*
a9c0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
a9d0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
a9e0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
a9f0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
aa00: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
aa10: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
aa20: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
aa30: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
aa40: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f  (SQLITE_LIMIT_WO
aa50: 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a  RKER_THREADS+1).
aa60: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
aa70: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
aa80: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
aa90: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
aaa0: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
aab0: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
aac0: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
aad0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
aae0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
aaf0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ab00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ab10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ab20: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
ab30: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
ab40: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
ab50: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
ab60: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
ab70: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
ab80: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
ab90: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
aba0: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
abb0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
abc0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
abd0: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
abe0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
abf0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
ac00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
ac10: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
ac20: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
ac30: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
ac40: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
ac50: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
ac60: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
ac70: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
ac80: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
ac90: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
aca0: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
acb0: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
acc0: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
acd0: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
ace0: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
acf0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
ad00: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
ad10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
ad20: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
ad30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
ad40: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
ad50: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
ad60: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
ad70: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
ad80: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
ad90: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
ada0: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
adb0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
adc0: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
add0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
ade0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
adf0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
ae00: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
ae10: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
ae20: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
ae30: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
ae40: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
ae50: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
ae60: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
ae70: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
ae80: 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20  u32 bDisable;   
ae90: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
aea0: 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b  operate the look
aeb0: 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20  aside when zero 
aec0: 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20  */.  u16 sz;    
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aee0: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
aef0: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
af00: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
af10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
af20: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
af30: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
af40: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
af50: 75 33 32 20 6e 53 6c 6f 74 3b 20 20 20 20 20 20  u32 nSlot;      
af60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af70: 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 73  r of lookaside s
af80: 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  lots allocated *
af90: 2f 0a 20 20 75 33 32 20 61 6e 53 74 61 74 5b 33  /.  u32 anStat[3
afa0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
afb0: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
afc0: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
afd0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
afe0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 49 6e  okasideSlot *pIn
aff0: 69 74 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  it;   /* List of
b000: 20 62 75 66 66 65 72 73 20 6e 6f 74 20 70 72 65   buffers not pre
b010: 76 69 6f 75 73 6c 79 20 75 73 65 64 20 2a 2f 0a  viously used */.
b020: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b030: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
b040: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
b050: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
b060: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
b070: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
b080: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
b090: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
b0a0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
b0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b0c0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
b0d0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
b0e0: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
b0f0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
b100: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
b110: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
b120: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
b130: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
b140: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
b150: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
b160: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
b170: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b180: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
b190: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
b1a0: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
b1b0: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
b1c0: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
b1d0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
b1e0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
b1f0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
b200: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
b210: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
b220: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
b230: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
b240: 63 68 61 69 6e 2e 20 20 55 73 65 20 74 68 65 20  chain.  Use the 
b250: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48  SQLITE_FUNC_HASH
b260: 28 29 0a 2a 2a 20 6d 61 63 72 6f 20 74 6f 20 63  ().** macro to c
b270: 6f 6d 70 75 74 65 20 61 20 68 61 73 68 20 6f 6e  ompute a hash on
b280: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 6e 61   the function na
b290: 6d 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  me..*/.#define S
b2a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b2b0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
b2c0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
b2d0: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
b2e0: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
b2f0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
b300: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
b310: 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
b320: 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 28 43  LITE_FUNC_HASH(C
b330: 2c 4c 29 20 28 28 28 43 29 2b 28 4c 29 29 25 53  ,L) (((C)+(L))%S
b340: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
b350: 53 5a 29 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  SZ)..#ifdef SQLI
b360: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
b370: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
b380: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
b390: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
b3a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b3b0: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
b3c0: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
b3d0: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
b3e0: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
b3f0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
b400: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
b410: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
b420: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
b430: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
b440: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
b450: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
b460: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
b470: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
b480: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
b490: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
b4a0: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
b4b0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
b4c0: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
b4d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
b4e0: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
b4f0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
b500: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b520: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
b530: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
b540: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b550: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
b560: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
b570: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
b580: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
b590: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
b5a0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
b5b0: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
b5c0: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
b5d0: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
b5e0: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
b5f0: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
b600: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
b610: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
b620: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
b630: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
b640: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
b650: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
b660: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
b670: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
b680: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
b690: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
b6a0: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
b6b0: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
b6c0: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
b6d0: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
b6e0: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
b6f0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
b700: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
b710: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
b720: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
b730: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
b740: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
b750: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
b760: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
b770: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
b780: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
b790: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b7a0: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
b7b0: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
b7c0: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
b7d0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
b7e0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
b7f0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
b800: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
b810: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
b820: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
b830: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
b840: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b850: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
b880: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
b890: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
b8a0: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b8b0: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b8c0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b8d0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b8e0: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
b910: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
b920: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b930: 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54  _DEPRECATED./* T
b940: 68 69 73 20 69 73 20 61 6e 20 65 78 74 72 61 20  his is an extra 
b950: 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63  SQLITE_TRACE mac
b960: 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ro that indicate
b970: 73 20 22 6c 65 67 61 63 79 22 20 74 72 61 63 69  s "legacy" traci
b980: 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79  ng.** in the sty
b990: 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72  le of sqlite3_tr
b9a0: 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  ace().*/.#define
b9b0: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45   SQLITE_TRACE_LE
b9c0: 47 41 43 59 20 20 30 78 38 30 0a 23 65 6c 73 65  GACY  0x80.#else
b9d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b9e0: 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 30 0a  TRACE_LEGACY  0.
b9f0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
ba00: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
ba10: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68   */.../*.** Each
ba20: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ba30: 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61  tion is an insta
ba40: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
ba50: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
ba60: 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  */.struct sqlite
ba70: 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66  3 {.  sqlite3_vf
ba80: 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20  s *pVfs;        
ba90: 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66      /* OS Interf
baa0: 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ace */.  struct 
bab0: 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
bac0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
bad0: 66 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c  f active virtual
bae0: 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43   machines */.  C
baf0: 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c  ollSeq *pDfltCol
bb00: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
bb10: 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  The default coll
bb20: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28  ating sequence (
bb30: 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c  BINARY) */.  sql
bb40: 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65  ite3_mutex *mute
bb50: 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  x;         /* Co
bb60: 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a  nnection mutex *
bb70: 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20  /.  Db *aDb;    
bb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb90: 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64    /* All backend
bba0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20  s */.  int nDb; 
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbc0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
bbd0: 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65  f backends curre
bbe0: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20  ntly in use */. 
bbf0: 20 75 33 32 20 6d 44 62 46 6c 61 67 73 3b 20 20   u32 mDbFlags;  
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bc10: 2a 20 66 6c 61 67 73 20 72 65 63 6f 72 64 69 6e  * flags recordin
bc20: 67 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 65  g internal state
bc30: 20 2a 2f 0a 20 20 75 36 34 20 66 6c 61 67 73 3b   */.  u64 flags;
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc50: 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 73 65 74      /* flags set
bc60: 74 61 62 6c 65 20 62 79 20 70 72 61 67 6d 61 73  table by pragmas
bc70: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
bc80: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bca0: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
bcb0: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
bcc0: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
bcd0: 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
bce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bcf0: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a  Default mmap_siz
bd00: 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75  e setting */.  u
bd10: 33 32 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20  32 nSchemaLock; 
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bd30: 44 6f 20 6e 6f 74 20 72 65 73 65 74 20 74 68 65  Do not reset the
bd40: 20 73 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e   schema when non
bd50: 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67  -zero */.  unsig
bd60: 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  ned int openFlag
bd70: 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67  s;       /* Flag
bd80: 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  s passed to sqli
bd90: 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20  te3_vfs.xOpen() 
bda0: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65  */.  int errCode
bdb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bdc0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
bdd0: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51  t error code (SQ
bde0: 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74  LITE_*) */.  int
bdf0: 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20   errMask;       
be00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20             /* & 
be10: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74  result codes wit
be20: 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65  h this before re
be30: 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  turning */.  int
be40: 20 69 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20   iSysErrno;     
be50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
be60: 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c  rno value from l
be70: 61 73 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72  ast system error
be80: 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46   */.  u16 dbOptF
be90: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
bea0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20      /* Flags to 
beb0: 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f  enable/disable o
bec0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a  ptimizations */.
bed0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bef0: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
bf00: 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d   */.  u8 autoCom
bf10: 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  mit;            
bf20: 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d      /* The auto-
bf30: 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a  commit flag. */.
bf40: 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b    u8 temp_store;
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf60: 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65  /* 1: file 2: me
bf70: 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20  mory 0: default 
bf80: 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61  */.  u8 mallocFa
bf90: 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  iled;           
bfa0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65     /* True if we
bfb0: 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c   have seen a mal
bfc0: 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20  loc failure */. 
bfd0: 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f   u8 bBenignMallo
bfe0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
bff0: 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65  * Do not require
c000: 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f   OOMs if true */
c010: 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f  .  u8 dfltLockMo
c020: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
c030: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b   /* Default lock
c040: 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74  ing-mode for att
c050: 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73  ached dbs */.  s
c060: 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41  igned char nextA
c070: 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20  utovac;      /* 
c080: 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20  Autovac setting 
c090: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
c0a0: 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70  >=0 */.  u8 supp
c0b0: 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20  ressErr;        
c0c0: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
c0d0: 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73   issue error mes
c0e0: 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f  sages if true */
c0f0: 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66  .  u8 vtabOnConf
c100: 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lict;           
c110: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
c120: 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f  urn for s3_vtab_
c130: 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f  on_conflict() */
c140: 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74  .  u8 isTransact
c150: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  ionSavepoint;   
c160: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
c170: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
c180: 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20  int is a TS */. 
c190: 20 75 38 20 6d 54 72 61 63 65 3b 20 20 20 20 20   u8 mTrace;     
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c1b0: 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53  * zero or more S
c1c0: 51 4c 49 54 45 5f 54 52 41 43 45 20 66 6c 61 67  QLITE_TRACE flag
c1d0: 73 20 2a 2f 0a 20 20 75 38 20 6e 6f 53 68 61 72  s */.  u8 noShar
c1e0: 65 64 43 61 63 68 65 3b 20 20 20 20 20 20 20 20  edCache;        
c1f0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
c200: 6e 6f 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  no shared-cache 
c210: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38  backends */.  u8
c220: 20 6e 53 71 6c 45 78 65 63 3b 20 20 20 20 20 20   nSqlExec;      
c230: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c240: 75 6d 62 65 72 20 6f 66 20 70 65 6e 64 69 6e 67  umber of pending
c250: 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f   OP_SqlExec opco
c260: 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78  des */.  int nex
c270: 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20  tPagesize;      
c280: 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69         /* Pagesi
c290: 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ze after VACUUM 
c2a0: 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d  if >0 */.  u32 m
c2b0: 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20  agic;           
c2c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
c2d0: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74  c number for det
c2e0: 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75  ect library misu
c2f0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  se */.  int nCha
c300: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
c310: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
c320: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
c330: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
c340: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
c350: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
c360: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
c370: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
c380: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
c390: 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c    int aLimit[SQL
c3a0: 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20  ITE_N_LIMIT];   
c3b0: 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69  /* Limits */.  i
c3c0: 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61  nt nMaxSorterMma
c3d0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
c3e0: 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  Maximum size of 
c3f0: 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62  regions mapped b
c400: 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74  y sorter */.  st
c410: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
c420: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
c430: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
c440: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
c450: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
c460: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
c470: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
c480: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
c490: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
c4a0: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4c0: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
c4d0: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
c4e0: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
c4f0: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
c500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
c510: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
c520: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
c530: 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6f 72  .    unsigned or
c540: 70 68 61 6e 54 72 69 67 67 65 72 20 3a 20 31 3b  phanTrigger : 1;
c550: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
c560: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
c570: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
c580: 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f     unsigned impo
c590: 73 74 65 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f  sterTable : 1; /
c5a0: 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d  * Building an im
c5b0: 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a  poster table */.
c5c0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 6f      unsigned reo
c5d0: 70 65 6e 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20  penMemdb : 1;   
c5e0: 2f 2a 20 41 54 54 41 43 48 20 69 73 20 72 65 61  /* ATTACH is rea
c5f0: 6c 6c 79 20 61 20 72 65 6f 70 65 6e 20 75 73 69  lly a reopen usi
c600: 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d 20  ng MemDB */.  } 
c610: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
c620: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
c630: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c640: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
c650: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
c660: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c680: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c690: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c6a0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
c6b0: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c6d0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c6e0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
c6f0: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
c700: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c720: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
c730: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
c740: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
c750: 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20  nVDestroy;      
c760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c770: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50  ber of active OP
c780: 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  _VDestroy operat
c790: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ions */.  int nE
c7a0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
c7b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c7c0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
c7d0: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
c7e0: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
c7f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
c800: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
c810: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
c820: 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28    int (*xTrace)(
c830: 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c  u32,void*,void*,
c840: 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54  void*);     /* T
c850: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
c860: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
c870: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c890: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
c8a0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
c8b0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
c8c0: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
c8d0: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
c8e0: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
c8f0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
c900: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c930: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
c940: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
c950: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
c960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
c970: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
c980: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20  Callback() */.  
c990: 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c  int (*xCommitCal
c9a0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20  lback)(void*);  
c9b0: 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20    /* Invoked at 
c9c0: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
c9d0: 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61  .  void *pRollba
c9e0: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
c9f0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
ca00: 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c   to xRollbackCal
ca10: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69  lback() */.  voi
ca20: 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c  d (*xRollbackCal
ca30: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f  lback)(void*); /
ca40: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
ca50: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
ca60: 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72 67  void *pUpdateArg
ca70: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61  ;.  void (*xUpda
ca80: 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  teCallback)(void
ca90: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
caa0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73  r*,const char*,s
cab0: 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69  qlite_int64);.#i
cac0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
cad0: 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
cae0: 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70  K.  void *pPreUp
caf0: 64 61 74 65 41 72 67 3b 20 20 20 20 20 20 20 20  dateArg;        
cb00: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
cb10: 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64 61 74  ent to xPreUpdat
cb20: 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76  eCallback */.  v
cb30: 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61 74 65  oid (*xPreUpdate
cb40: 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20  Callback)(   /* 
cb50: 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e 67  Registered using
cb60: 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61   sqlite3_preupda
cb70: 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20  te_hook() */.   
cb80: 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c   void*,sqlite3*,
cb90: 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c  int,char const*,
cba0: 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69  char const*,sqli
cbb0: 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65  te3_int64,sqlite
cbc0: 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50  3_int64.  );.  P
cbd0: 72 65 55 70 64 61 74 65 20 2a 70 50 72 65 55 70  reUpdate *pPreUp
cbe0: 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  date;        /* 
cbf0: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
cc00: 76 65 20 70 72 65 2d 75 70 64 61 74 65 20 63 61  ve pre-update ca
cc10: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
cc20: 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
cc30: 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
cc40: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
cc50: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
cc60: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
cc70: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
cc80: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
cc90: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
cca0: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
ccb0: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
ccc0: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
ccd0: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
cce0: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
ccf0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
cd00: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
cd10: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
cd20: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
cd30: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
cd40: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
cd50: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
cd60: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
cd70: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
cd80: 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  ssage */.  union
cd90: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
cda0: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
cdb0: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
cdc0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
cdd0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
cde0: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
cdf0: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
ce00: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
ce10: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
ce20: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
ce30: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
ce40: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
ce50: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
ce60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ce70: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
ce80: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
ce90: 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  Auth;          /
cea0: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
ceb0: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
cec0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
ced0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
cee0: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
cef0: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
cf00: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
cf10: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
cf20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
cf30: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
cf40: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
cf50: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
cf60: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
cf70: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
cf80: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
cf90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
cfa0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
cfb0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
cfc0: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
cfd0: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
cfe0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
cff0: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
d000: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
d010: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
d020: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
d030: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
d040: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
d050: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
d060: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
d070: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
d080: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
d090: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
d0a0: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
d0b0: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
d0c0: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
d0d0: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
d0e0: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
d0f0: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
d100: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
d110: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
d120: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
d130: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
d140: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
d150: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
d160: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
d170: 63 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ct;          /* 
d180: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
d190: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
d1a0: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
d1b0: 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e  ndif.  Hash aFun
d1c0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
d1d0: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
d1e0: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
d1f0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
d200: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d220: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
d230: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
d240: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
d250: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
d260: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
d270: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
d280: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
d290: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
d2a0: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
d2b0: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
d2c0: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
d2d0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
d2e0: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
d2f0: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
d300: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
d310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d320: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
d330: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
d340: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
d350: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
d360: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
d370: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
d380: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
d390: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d3b0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
d3c0: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
d3d0: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
d3e0: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d400: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
d410: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
d420: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
d430: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
d440: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
d450: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
d460: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
d470: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
d480: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
d490: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
d4a0: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
d4b0: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
d4c0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
d4d0: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
d4e0: 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20  NOTIFY.  /* The 
d4f0: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
d500: 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74  les are all prot
d510: 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41  ected by the STA
d520: 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20  TIC_MASTER.  ** 
d530: 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71  mutex, not by sq
d540: 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65  lite3.mutex. The
d550: 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f  y are used by co
d560: 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a  de in notify.c..
d570: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
d580: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
d590: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
d5a0: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
d5b0: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
d5c0: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
d5d0: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
d5e0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
d5f0: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
d600: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
d610: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
d620: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
d630: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
d640: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
d650: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
d660: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
d670: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
d680: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
d690: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
d6a0: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
d6b0: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
d6c0: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
d6d0: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
d6e0: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
d6f0: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
d700: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
d710: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
d720: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
d730: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d750: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
d760: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
d770: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
d780: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
d790: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
d7a0: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
d7b0: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
d7c0: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
d7d0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
d7e0: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
d7f0: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
d800: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
d810: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
d820: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71  HENTICATION.  sq
d830: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61  lite3_userauth a
d840: 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55  uth;        /* U
d850: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
d860: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  on information *
d870: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
d880: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
d890: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
d8a0: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
d8b0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
d8c0: 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64  HEMA_ENC(db) ((d
d8d0: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
d8e0: 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65  ma->enc).#define
d8f0: 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20   ENC(db)        
d900: 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  ((db)->enc)../*.
d910: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
d920: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
d930: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  e3.flags..**.** 
d940: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
d950: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
d960: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
d970: 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53     SQLITE_FullFS
d980: 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52  ync     == PAGER
d990: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
d9a0: 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75     SQLITE_CkptFu
d9b0: 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52  llFSync == PAGER
d9c0: 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a  _CKPT_FULLFSYNC.
d9d0: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
d9e0: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20  acheSpill    == 
d9f0: 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c  PAGER_CACHE_SPIL
da00: 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L.*/.#define SQL
da10: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
da20: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
da30: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
da40: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
da50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
da60: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
da70: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65  00000002  /* Cre
da80: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
da90: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
daa0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dab0: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
dac0: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68  x00000004  /* Sh
dad0: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
dae0: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
daf0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
db00: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20  _FullFSync      
db10: 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55  0x00000008  /* U
db20: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e  se full fsync on
db30: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a   the backend */.
db40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
db50: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78  kptFullFSync  0x
db60: 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65  00000010  /* Use
db70: 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20   full fsync for 
db80: 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64  checkpoint */.#d
db90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63  efine SQLITE_Cac
dba0: 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30  heSpill     0x00
dbb0: 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f  000020  /* OK to
dbc0: 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63   spill pager cac
dbd0: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
dbe0: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
dbf0: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
dc00: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
dc10: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
dc20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
dc30: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
dc40: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
dc50: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
dc60: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
dc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc90: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
dca0: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
dcb0: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
dcf0: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
dd00: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
dd10: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
dd20: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
dd30: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
dd40: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
dd50: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
dd90: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
dda0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
ddb0: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
ddc0: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20  00000200  /* Do 
ddd0: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
dde0: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
ddf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de00: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30  ReadUncommit   0
de10: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45  x00000400  /* RE
de20: 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69  AD UNCOMMITTED i
de30: 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a  n shared-cache *
de40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
de50: 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20  _NoCkptOnClose  
de60: 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e  0x00000800  /* N
de70: 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20  o checkpoint on 
de80: 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a  close()/DETACH *
de90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dea0: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
deb0: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52  0x00001000  /* R
dec0: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
ded0: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
dee0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
def0: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 30  iggers    0x0000
df00: 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  2000  /* Enable 
df10: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
df20: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
df30: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
df40: 20 20 20 20 30 78 30 30 30 30 34 30 30 30 20 20      0x00004000  
df50: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
df60: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
df70: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
df80: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
df90: 20 20 20 20 20 30 78 30 30 30 30 38 30 30 30 20       0x00008000 
dfa0: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
dfb0: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
dfc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
dfd0: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
dfe0: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61  00010000  /* Ena
dff0: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
e000: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e010: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63  LITE_LoadExtFunc
e020: 20 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20      0x00020000  
e030: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
e040: 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66  xtension() SQL f
e050: 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  unc */.#define S
e060: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
e070: 67 65 72 20 20 30 78 30 30 30 34 30 30 30 30 20  ger  0x00040000 
e080: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
e090: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
e0a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
e0b0: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
e0c0: 30 30 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65  0080000  /* Defe
e0d0: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
e0e0: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
e0f0: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
e100: 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30        0x00100000
e110: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
e120: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
e130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e140: 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30  CellSizeCk     0
e150: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68  x00200000  /* Ch
e160: 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73  eck btree cell s
e170: 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a  izes on load */.
e180: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
e190: 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78  ts3Tokenizer  0x
e1a0: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00400000  /* Ena
e1b0: 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a  ble fts3_tokeniz
e1c0: 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65  er(2) */.#define
e1d0: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50   SQLITE_EnableQP
e1e0: 53 47 20 20 20 20 20 30 78 30 30 38 30 30 30 30  SG     0x0080000
e1f0: 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e  0  /* Query Plan
e200: 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20 47 75  ner Stability Gu
e210: 61 72 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e  arantee*/.#defin
e220: 65 20 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72  e SQLITE_Trigger
e230: 45 51 50 20 20 20 20 20 30 78 30 31 30 30 30 30  EQP     0x010000
e240: 30 30 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67  00  /* Show trig
e250: 67 65 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52  ger EXPLAIN QUER
e260: 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e  Y PLAN */.#defin
e270: 65 20 53 51 4c 49 54 45 5f 52 65 73 65 74 44 61  e SQLITE_ResetDa
e280: 74 61 62 61 73 65 20 20 30 78 30 32 30 30 30 30  tabase  0x020000
e290: 30 30 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65  00  /* Reset the
e2a0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 23 64 65   database */.#de
e2b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
e2c0: 63 79 41 6c 74 65 72 20 20 20 20 30 78 30 34 30  cyAlter    0x040
e2d0: 30 30 30 30 30 20 20 2f 2a 20 4c 65 67 61 63 79  00000  /* Legacy
e2e0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 62 65 68   ALTER TABLE beh
e2f0: 61 76 69 6f 75 72 20 2a 2f 0a 23 64 65 66 69 6e  aviour */.#defin
e300: 65 20 53 51 4c 49 54 45 5f 4e 6f 53 63 68 65 6d  e SQLITE_NoSchem
e310: 61 45 72 72 6f 72 20 20 30 78 30 38 30 30 30 30  aError  0x080000
e320: 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65  00  /* Do not re
e330: 70 6f 72 74 20 73 63 68 65 6d 61 20 70 61 72 73  port schema pars
e340: 65 20 65 72 72 6f 72 73 2a 2f 0a 23 64 65 66 69  e errors*/.#defi
e350: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 6e 73  ne SQLITE_Defens
e360: 69 76 65 20 20 20 20 20 20 30 78 31 30 30 30 30  ive      0x10000
e370: 30 30 30 20 20 2f 2a 20 49 6e 70 75 74 20 53 51  000  /* Input SQ
e380: 4c 20 69 73 20 6c 69 6b 65 6c 79 20 68 6f 73 74  L is likely host
e390: 69 6c 65 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73  ile */../* Flags
e3a0: 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65   used only if de
e3b0: 62 75 67 67 69 6e 67 20 2a 2f 0a 23 64 65 66 69  bugging */.#defi
e3c0: 6e 65 20 48 49 28 58 29 20 20 28 28 75 36 34 29  ne HI(X)  ((u64)
e3d0: 28 58 29 3c 3c 33 32 29 0a 23 69 66 64 65 66 20  (X)<<32).#ifdef 
e3e0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65  SQLITE_DEBUG.#de
e3f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54  fine SQLITE_SqlT
e400: 72 61 63 65 20 20 20 20 20 20 20 48 49 28 30 78  race       HI(0x
e410: 30 30 30 31 29 20 20 2f 2a 20 44 65 62 75 67 20  0001)  /* Debug 
e420: 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20  print SQL as it 
e430: 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66  executes */.#def
e440: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  ine SQLITE_VdbeL
e450: 69 73 74 69 6e 67 20 20 20 20 48 49 28 30 78 30  isting    HI(0x0
e460: 30 30 32 29 20 20 2f 2a 20 44 65 62 75 67 20 6c  002)  /* Debug l
e470: 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20  istings of VDBE 
e480: 70 72 6f 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  progs */.#define
e490: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
e4a0: 65 20 20 20 20 20 20 48 49 28 30 78 30 30 30 34  e      HI(0x0004
e4b0: 29 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  )  /* True to tr
e4c0: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
e4d0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e4e0: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
e4f0: 61 63 65 20 48 49 28 30 78 30 30 30 38 29 20 20  ace HI(0x0008)  
e500: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
e510: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
e520: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e530: 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20 20  ITE_VdbeEQP     
e540: 20 20 20 48 49 28 30 78 30 30 31 30 29 20 20 2f     HI(0x0010)  /
e550: 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20  * Debug EXPLAIN 
e560: 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 65  QUERY PLAN */.#e
e570: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
e580: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
e590: 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67 73 0a  qlite3.mDbFlags.
e5a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e5b0: 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 20 20  G_SchemaChange  
e5c0: 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e 63 6f   0x0001  /* Unco
e5d0: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
e5e0: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
e5f0: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50 72 65  efine DBFLAG_Pre
e600: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
e610: 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  02  /* Preferenc
e620: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
e630: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ncs */.#define D
e640: 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20 20 20  BFLAG_Vacuum    
e650: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
e660: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
e670: 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65  ACUUM */.#define
e680: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e   DBFLAG_SchemaKn
e690: 6f 77 6e 4f 6b 20 20 30 78 30 30 30 38 20 20 2f  ownOk  0x0008  /
e6a0: 2a 20 53 63 68 65 6d 61 20 69 73 20 6b 6e 6f 77  * Schema is know
e6b0: 6e 20 74 6f 20 62 65 20 76 61 6c 69 64 20 2a 2f  n to be valid */
e6c0: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
e6d0: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
e6e0: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
e6f0: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
e700: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
e710: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
e720: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
e730: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
e740: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
e750: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
e760: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
e770: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
e780: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
e790: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
e7a0: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
e7b0: 65 6e 69 6e 67 20 2a 2f 0a 20 20 20 20 20 20 20  ening */.       
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7d0: 20 20 20 2f 2a 20 20 30 78 30 30 30 32 20 20 20     /*  0x0002   
e7e0: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 72 65  available for re
e7f0: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
e800: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
e810: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
e820: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
e830: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
e840: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
e850: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
e860: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
e870: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65  factoring */.#de
e880: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
e890: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 31  inctOpt    0x001
e8a0: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
e8b0: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
e8c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e8d0: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
e8e0: 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0020   /* Cover
e8f0: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
e900: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e910: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
e920: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f 52 44   0x0040   /* ORD
e930: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
e940: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
e950: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73  ine SQLITE_Trans
e960: 69 74 69 76 65 20 20 20 20 20 30 78 30 30 38 30  itive     0x0080
e970: 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65     /* Transitive
e980: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
e990: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
e9a0: 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78  mitNoopJoin   0x
e9b0: 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75  0100   /* Omit u
e9c0: 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20  nused tables in 
e9d0: 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  joins */.#define
e9e0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56   SQLITE_CountOfV
e9f0: 69 65 77 20 20 20 20 30 78 30 32 30 30 20 20 20  iew    0x0200   
ea00: 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d  /* The count-of-
ea10: 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f  view optimizatio
ea20: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ea30: 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20  ITE_CursorHints 
ea40: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 41     0x0400   /* A
ea50: 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74  dd OP_CursorHint
ea60: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66   opcodes */.#def
ea70: 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33  ine SQLITE_Stat3
ea80: 34 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30  4         0x0800
ea90: 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20     /* Use STAT3 
eaa0: 6f 72 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f  or STAT4 data */
eab0: 0a 20 20 20 2f 2a 20 54 48 33 20 65 78 70 65 63  .   /* TH3 expec
eac0: 74 73 20 74 68 65 20 53 74 61 74 33 34 20 20 5e  ts the Stat34  ^
ead0: 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74 6f 20 62  ^^^^^ value to b
eae0: 65 20 30 78 30 38 30 30 2e 20 20 44 6f 6e 27 74  e 0x0800.  Don't
eaf0: 20 63 68 61 6e 67 65 20 69 74 20 2a 2f 0a 23 64   change it */.#d
eb00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 75 73  efine SQLITE_Pus
eb10: 68 44 6f 77 6e 20 20 20 20 20 20 20 30 78 31 30  hDown       0x10
eb20: 30 30 20 20 20 2f 2a 20 54 68 65 20 70 75 73 68  00   /* The push
eb30: 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a 61 74 69  -down optimizati
eb40: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
eb50: 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79 4a 6f 69  LITE_SimplifyJoi
eb60: 6e 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20  n   0x2000   /* 
eb70: 43 6f 6e 76 65 72 74 20 4c 45 46 54 20 4a 4f 49  Convert LEFT JOI
eb80: 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65  N to JOIN */.#de
eb90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 6b 69 70  fine SQLITE_Skip
eba0: 53 63 61 6e 20 20 20 20 20 20 20 30 78 34 30 30  Scan       0x400
ebb0: 30 20 20 20 2f 2a 20 53 6b 69 70 2d 73 63 61 6e  0   /* Skip-scan
ebc0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
ebd0: 49 54 45 5f 50 72 6f 70 61 67 61 74 65 43 6f 6e  ITE_PropagateCon
ebe0: 73 74 20 30 78 38 30 30 30 20 20 20 2f 2a 20 54  st 0x8000   /* T
ebf0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f 70  he constant prop
ec00: 61 67 61 74 69 6f 6e 20 6f 70 74 20 2a 2f 0a 23  agation opt */.#
ec10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
ec20: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
ec30: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
ec40: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
ec50: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
ec60: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
ec70: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
ec80: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
ec90: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
eca0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
ecb0: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
ecc0: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
ecd0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
ece0: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
ecf0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
ed00: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
ed10: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
ed20: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a  gs&(mask))==0)..
ed30: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
ed40: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
ed50: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
ed60: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
ed70: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
ed80: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
ed90: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
eda0: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
edb0: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
edc0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
edd0: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
ede0: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
edf0: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
ee00: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
ee10: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
ee20: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
ee30: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
ee40: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
ee50: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
ee60: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
ee70: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
ee80: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
ee90: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
eea0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
eeb0: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
eec0: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
eed0: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
eee0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
eef0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
ef00: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
ef10: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
ef20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
ef30: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
ef40: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
ef50: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
ef60: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
ef70: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
ef80: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
ef90: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
efa0: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
efb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
efc0: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
efd0: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
efe0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
eff0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
f000: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f010: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
f020: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
f030: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
f040: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
f050: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
f060: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
f070: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
f080: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
f090: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
f0a0: 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20  re.  For global 
f0b0: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
f0c0: 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28 29  ns (ex: substr()
f0d0: 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29  , max(), count()
f0e0: 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  ).** a pointer t
f0f0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
f100: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
f110: 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
f120: 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a  nctions object..
f130: 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65  ** For per-conne
f140: 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f  ction applicatio
f150: 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
f160: 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74  ons, a pointer t
f170: 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  o this.** struct
f180: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
f190: 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73  he db->aHash has
f1a0: 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  h table..**.** T
f1b0: 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64  he u.pHash field
f1c0: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
f1d0: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73  global built-ins
f1e0: 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72 75  .  The u.pDestru
f1f0: 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73  ctor.** field is
f200: 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e   used by per-con
f210: 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20  nection app-def 
f220: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74  functions..*/.st
f230: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
f240: 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20   i8 nArg;       
f250: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f260: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
f270: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
f280: 64 20 2a 2f 0a 20 20 75 33 32 20 66 75 6e 63 46  d */.  u32 funcF
f290: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
f2a0: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
f2b0: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
f2c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
f2d0: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
f2e0: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
f2f0: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
f300: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
f310: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
f320: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
f330: 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28   void (*xSFunc)(
f340: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f350: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
f360: 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f  ue**); /* func o
f370: 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  r agg-step */.  
f380: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
f390: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f3a0: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
f3b0: 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e        /* Agg fin
f3c0: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64  alizer */.  void
f3d0: 20 28 2a 78 56 61 6c 75 65 29 28 73 71 6c 69 74   (*xValue)(sqlit
f3e0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f400: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 67 67    /* Current agg
f410: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64   value */.  void
f420: 20 28 2a 78 49 6e 76 65 72 73 65 29 28 73 71 6c   (*xInverse)(sql
f430: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
f440: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
f450: 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73 65 20 61  *); /* inverse a
f460: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e  gg-step */.  con
f470: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
f480: 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66    /* SQL name of
f490: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a   the function. *
f4a0: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
f4b0: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
f4c0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
f4d0: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
f4e0: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
f4f0: 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63  hash */.    Func
f500: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
f510: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
f520: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
f530: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
f540: 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  ion */.  } u;.};
f550: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
f560: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
f570: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
f580: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
f590: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
f5a0: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
f5b0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f5c0: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
f5d0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
f5e0: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
f5f0: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
f600: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
f610: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
f620: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
f630: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
f640: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
f650: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
f660: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
f670: 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  is set to.** the
f680: 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44   number of FuncD
f690: 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74  ef objects creat
f6a0: 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20  ed (either 1 or 
f6b0: 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  3, depending on 
f6c0: 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f  whether.** or no
f6d0: 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
f6e0: 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49  encoding is SQLI
f6f0: 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e  TE_ANY). The Fun
f700: 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72  cDef.pDestructor
f710: 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61  .** member of ea
f720: 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75  ch of the new Fu
f730: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
f740: 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
f750: 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a   the allocated.*
f760: 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  * FuncDestructor
f770: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74  ..**.** Thereaft
f780: 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20  er, when one of 
f790: 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  the FuncDef obje
f7a0: 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20  cts is deleted, 
f7b0: 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a  the reference.**
f7c0: 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f   count on this o
f7d0: 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65  bject is decreme
f7e0: 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65  nted. When it re
f7f0: 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73  aches 0, the des
f800: 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e  tructor.** is in
f810: 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75  voked and the Fu
f820: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72  ncDestructor str
f830: 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f  ucture freed..*/
f840: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74  .struct FuncDest
f850: 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e  ructor {.  int n
f860: 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  Ref;.  void (*xD
f870: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
f880: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
f890: 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ta;.};../*.** Po
f8a0: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
f8b0: 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e  r FuncDef.flags.
f8c0: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
f8d0: 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50  _LENGTH and _TYP
f8e0: 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75  EOF.** values mu
f8f0: 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  st correspond to
f900: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
f910: 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
f920: 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20  EOFARG.  And.** 
f930: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
f940: 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65  TANT must be the
f950: 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f   same as SQLITE_
f960: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20  DETERMINISTIC.  
f970: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
f980: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
f990: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
f9a0: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a  verify this..**.
f9b0: 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
f9c0: 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
f9d0: 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
f9e0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f9f0: 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e  _MINMAX    ==  N
fa00: 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
fa10: 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
fa20: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fa30: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d  UNC_LENGTH    ==
fa40: 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
fa50: 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  RG.**     SQLITE
fa60: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20  _FUNC_TYPEOF    
fa70: 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ==  OPFLAG_TYPEO
fa80: 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  FARG.**     SQLI
fa90: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
faa0: 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54    ==  SQLITE_DET
fab0: 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20  ERMINISTIC from 
fac0: 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53  the API.**     S
fad0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
fae0: 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20  SK   depends on 
faf0: 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72  SQLITE_UTF* macr
fb00: 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f  os in the API.*/
fb10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fb20: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
fb30: 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  0003 /* SQLITE_U
fb40: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
fb50: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
fb60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fb70: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
fb80: 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  x0004 /* Candida
fb90: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
fba0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
fbb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fbc0: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
fbd0: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
fbe0: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
fbf0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
fc00: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fc10: 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20  EPHEM    0x0010 
fc20: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
fc30: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
fc40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fc50: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
fc60: 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65  0x0020 /* sqlite
fc70: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
fc80: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
fc90: 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  d*/.#define SQLI
fca0: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
fcb0: 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74   0x0040 /* Built
fcc0: 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  -in length() fun
fcd0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fce0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
fcf0: 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20  EOF   0x0080 /* 
fd00: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
fd10: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
fd20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fd30: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30  C_COUNT    0x010
fd40: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
fd50: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
fd60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fd70: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
fd80: 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74   0x0200 /* Built
fd90: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
fda0: 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64  r ifnull() */.#d
fdb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fdc0: 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30  C_UNLIKELY 0x040
fdd0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
fde0: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
fdf0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fe00: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fe10: 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73  T 0x0800 /* Cons
fe20: 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
fe30: 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
fe40: 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ut */.#define SQ
fe50: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
fe60: 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75     0x1000 /* Tru
fe70: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
fe80: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
fe90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fea0: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
feb0: 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77   0x2000 /* "Slow
fec0: 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20   Change". Value 
fed0: 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20  constant during 
fee0: 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a.              
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff00: 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20        ** single 
ff10: 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68  query - might ch
ff20: 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a  ange over time *
ff30: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ff40: 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30  _FUNC_AFFINITY 0
ff50: 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x4000 /* Built-i
ff60: 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e  n affinity() fun
ff70: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
ff80: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46   SQLITE_FUNC_OFF
ff90: 53 45 54 20 20 20 30 78 38 30 30 30 20 2f 2a 20  SET   0x8000 /* 
ffa0: 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f  Built-in sqlite_
ffb0: 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f  offset() functio
ffc0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ffd0: 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20  ITE_FUNC_WINDOW 
ffe0: 20 30 78 31 30 30 30 30 20 2f 2a 20 42 75 69 6c   0x10000 /* Buil
fff0: 74 2d 69 6e 20 77 69 6e 64 6f 77 2d 6f 6e 6c 79  t-in window-only
10000 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
10010 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
10020 5f 57 49 4e 44 4f 57 5f 53 49 5a 45 20 20 30 78  _WINDOW_SIZE  0x
10030 32 30 30 30 30 20 20 2f 2a 20 52 65 71 75 69 72  20000  /* Requir
10040 65 73 20 70 61 72 74 69 74 69 6f 6e 20 73 69 7a  es partition siz
10050 65 20 61 73 20 61 72 67 2e 20 2a 2f 0a 0a 2f 2a  e as arg. */../*
10060 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
10070 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
10080 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
10090 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
100a0 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
100b0 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
100c0 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
100d0 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
100e0 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
100f0 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
10100 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
10110 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
10120 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
10130 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
10140 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
10150 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
10160 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
10170 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
10180 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
10190 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
101a0 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
101b0 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
101c0 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
101d0 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
101e0 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
101f0 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
10200 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
10210 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
10220 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a  he function. If.
10230 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
10240 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
10250 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
10260 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
10270 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
10280 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
10290 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
102a0 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
102b0 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
102c0 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
102d0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
102e0 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
102f0 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
10300 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
10310 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
10320 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
10330 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
10340 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
10350 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
10360 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
10370 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
10380 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
10390 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
103a0 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
103b0 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
103c0 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
103d0 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
103e0 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
103f0 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
10400 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
10410 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69 67    The iArg is ig
10420 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65 72  nored.  The user
10430 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73 20  -data is always 
10440 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20  set.**     to a 
10450 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
10460 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
10470 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
10480 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28  .**   PURE_DATE(
10490 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
104a0 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
104b0 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20 22  *     Used for "
104c0 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20  pure" date/time 
104d0 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20  functions, this 
104e0 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46  macro is like DF
104f0 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65  UNCTION.**     e
10500 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64 6f  xcept that it do
10510 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49 54  es set the SQLIT
10520 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
10530 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a  flags.  iArg is.
10540 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61  **     ignored a
10550 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  nd the user-data
10560 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74   for these funct
10570 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61  ions is set to a
10580 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72  n .**     arbitr
10590 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69  ary non-NULL poi
105a0 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
105b0 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
105c0 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  used..**.**   AG
105d0 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
105e0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
105f0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
10600 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
10610 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
10620 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
10630 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
10640 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
10650 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
10660 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
10670 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
10680 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
10690 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
106a0 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
106b0 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
106c0 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
106d0 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
106e0 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e  *.**   WFUNCTION
106f0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
10700 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  rg, xStep, xFina
10710 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65  l, xValue, xInve
10720 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  rse).**     Used
10730 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
10740 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10750 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
10760 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
10770 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
10780 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10790 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
107a0 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
107b0 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
107c0 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
107d0 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
107e0 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
107f0 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
10800 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
10810 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
10820 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
10830 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10840 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
10850 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10860 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
10870 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
10880 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
10890 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
108a0 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
108b0 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
108c0 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
108d0 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
108e0 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
108f0 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
10900 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
10910 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
10920 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
10930 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
10940 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
10950 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
10960 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
10970 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
10980 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
10990 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
109a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
109b0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
109c0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
109d0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
109e0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
109f0 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
10a00 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
10a10 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
10a20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10a30 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
10a40 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10a50 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10a60 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
10a70 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10a80 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10a90 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10aa0 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10ab0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10ac0 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10ad0 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
10ae0 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
10af0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10b00 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
10b10 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10b20 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
10b30 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10b40 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
10b50 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20  LITE_UTF8, \.   
10b60 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  0, 0, xFunc, 0, 
10b70 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10b80 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45  } }.#define PURE
10b90 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
10ba0 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10bb0 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10bc0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
10bd0 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
10be0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10bf0 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64  TANT, \.   (void
10c00 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  *)&sqlite3Config
10c10 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10c20 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10c30 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
10c40 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
10c50 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10c60 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
10c70 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
10c80 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10c90 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10ca0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10cb0 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
10cc0 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
10cd0 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10ce0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10cf0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10d00 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
10d10 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10d20 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
10d30 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10d40 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10d50 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NG|SQLITE_UTF8|(
10d60 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
10d70 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
10d80 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
10d90 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10da0 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
10db0 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
10dc0 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
10dd0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10de0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10df0 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
10e00 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
10e10 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
10e20 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10e30 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
10e40 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
10e50 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
10e60 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61  tep, xFinal, xVa
10e70 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  lue) \.  {nArg, 
10e80 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
10e90 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10ea0 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10eb0 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
10ec0 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
10ed0 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e  nal,xValue,0,#zN
10ee0 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
10ef0 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
10f00 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
10f10 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
10f20 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
10f30 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
10f40 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
10f50 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10f60 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
10f70 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10f80 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
10f90 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30  ,xFinal,xFinal,0
10fa0 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 23  ,#zName, {0}}..#
10fb0 64 65 66 69 6e 65 20 57 41 47 47 52 45 47 41 54  define WAGGREGAT
10fc0 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
10fd0 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
10fe0 46 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78  Final, xValue, x
10ff0 49 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a 20 20  Inverse, f) \.  
11000 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
11010 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
11020 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20  NC_NEEDCOLL)|f, 
11030 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
11040 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
11050 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61  xStep,xFinal,xVa
11060 6c 75 65 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e  lue,xInverse,#zN
11070 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a  ame, {0}}../*.**
11080 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
11090 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
110a0 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
110b0 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
110c0 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
110d0 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
110e0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
110f0 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
11100 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
11110 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
11120 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
11130 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
11140 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
11150 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
11160 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
11170 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
11180 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111a0 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
111b0 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
111c0 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
111d0 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
11200 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
11210 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
11220 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11240 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
11250 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
11260 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
11270 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
11280 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
11290 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
112a0 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
112b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
112c0 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
112d0 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
112e0 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
112f0 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
11300 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
11310 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
11320 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
11330 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
11340 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
11350 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
11360 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
11370 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
11380 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
11390 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
113a0 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
113b0 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
113c0 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
113d0 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
113e0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
113f0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
11400 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
11410 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
11420 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
11430 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
11440 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
11450 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
11460 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
11470 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
11480 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
11490 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
114a0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
114b0 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
114c0 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
114d0 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114f0 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
11500 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
11510 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
11520 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
11530 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11540 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
11550 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
11560 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20  Table *pEpoTab; 
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11580 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75       /* Eponymou
11590 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  s table for this
115a0 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   module */.};../
115b0 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  *.** information
115c0 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
115d0 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62  mn of an SQL tab
115e0 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e  le is held in an
115f0 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
11600 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
11610 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  */.struct Column
11620 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
11630 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
11640 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30   this column, \0
11650 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70  00, then the typ
11660 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  e */.  Expr *pDf
11670 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
11680 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
11690 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
116a0 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
116b0 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
116c0 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
116d0 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
116e0 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
116f0 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
11700 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
11710 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
11720 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
11730 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
11740 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
11750 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
11760 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
11770 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
11780 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75  ted size of valu
11790 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e in this column
117a0 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31  . sizeof(INT)==1
117b0 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
117c0 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
117d0 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
117e0 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
117f0 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
11800 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
11810 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
11820 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
11830 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
11840 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
11850 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
11860 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
11870 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
11880 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
11890 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
118a0 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
118b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
118c0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
118d0 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30 30  G_HASTYPE  0x000
118e0 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d  4    /* Type nam
118f0 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e  e follows column
11900 20 6e 61 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65   name */.#define
11910 20 43 4f 4c 46 4c 41 47 5f 55 4e 49 51 55 45 20   COLFLAG_UNIQUE 
11920 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 43    0x0008    /* C
11930 6f 6c 75 6d 6e 20 64 65 66 20 63 6f 6e 74 61 69  olumn def contai
11940 6e 73 20 22 55 4e 49 51 55 45 22 20 6f 72 20 22  ns "UNIQUE" or "
11950 50 4b 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  PK" */.#define C
11960 4f 4c 46 4c 41 47 5f 53 4f 52 54 45 52 52 45 46  OLFLAG_SORTERREF
11970 20 30 78 30 30 31 30 20 20 20 2f 2a 20 55 73 65   0x0010   /* Use
11980 20 73 6f 72 74 65 72 2d 72 65 66 73 20 77 69 74   sorter-refs wit
11990 68 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  h this column */
119a0 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
119b0 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
119c0 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
119d0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
119e0 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
119f0 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
11a00 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
11a10 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
11a20 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
11a30 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
11a40 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
11a50 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
11a60 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
11a70 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
11a80 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
11a90 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
11aa0 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
11ab0 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
11ac0 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
11ad0 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
11ae0 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
11af0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
11b00 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
11b10 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
11b20 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
11b30 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
11b40 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
11b50 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
11b60 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
11b70 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
11b80 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
11b90 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
11ba0 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
11bb0 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
11bc0 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
11bd0 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
11be0 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
11bf0 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
11c00 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
11c10 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
11c20 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
11c30 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
11c40 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
11c50 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
11c60 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
11c70 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
11c80 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
11c90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
11ca0 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
11cb0 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
11cc0 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
11cd0 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
11ce0 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
11cf0 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
11d00 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
11d10 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46   SQLITE_SO_UNDEF
11d20 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f  INED -1 /* No so
11d30 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66 69  rt order specifi
11d40 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  ed */../*.** Col
11d50 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
11d60 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
11d70 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
11d80 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
11d90 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
11da0 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
11db0 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
11dc0 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
11dd0 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
11de0 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
11df0 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
11e00 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
11e10 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
11e20 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
11e30 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61  ly..**.** But ra
11e40 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20  ther than start 
11e50 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20  with 0 or 1, we 
11e60 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20  begin with 'A'. 
11e70 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68   That way,.** wh
11e80 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69  en multiple affi
11e90 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63  nity types are c
11ea0 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f  oncatenated into
11eb0 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a   a string and.**
11ec0 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20   used as the P4 
11ed0 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69  operand, they wi
11ee0 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61  ll be more reada
11ef0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ble..**.** Note 
11f00 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75  also that the nu
11f10 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20  meric types are 
11f20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72  grouped together
11f30 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67   so that testing
11f40 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69  .** for a numeri
11f50 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67  c type is a sing
11f60 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  le comparison.  
11f70 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70  And the BLOB typ
11f80 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23  e is first..*/.#
11f90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11fa0 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23  F_BLOB     'A'.#
11fb0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11fc0 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a 23  F_TEXT     'B'.#
11fd0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
11fe0 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23  F_NUMERIC  'C'.#
11ff0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
12000 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23  F_INTEGER  'D'.#
12010 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
12020 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a  F_REAL     'E'..
12030 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
12040 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
12050 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
12060 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
12070 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
12080 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
12090 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
120a0 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
120b0 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
120c0 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66  y value..*/.#def
120d0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
120e0 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a  ASK     0x47../*
120f0 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
12100 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
12110 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
12120 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
12130 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
12140 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a  the affinity..**
12150 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e  .** The SQLITE_N
12160 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61  OTNULL flag is a
12170 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
12180 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49  NULLEQ and JUMPI
12190 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75  FNULL..** It cau
121a0 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20  ses an assert() 
121b0 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65  to fire if eithe
121c0 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63  r operand to a c
121d0 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65  omparison.** ope
121e0 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20  rator is NULL.  
121f0 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63  It is added to c
12200 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ertain compariso
12210 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a  n operators to.*
12220 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65  * prove that the
12230 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c   operands are al
12240 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a  ways NOT NULL..*
12250 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12260 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78  _KEEPNULL     0x
12270 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76  08  /* Used by v
12280 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a  ector == or <> *
12290 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
122a0 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
122b0 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  10  /* jumps if 
122c0 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
122d0 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
122e0 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
122f0 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53        0x20  /* S
12300 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
12310 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
12320 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
12330 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
12340 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
12350 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65  NULL=NULL */.#de
12360 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  fine SQLITE_NOTN
12370 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f  ULL      0x90  /
12380 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70  * Assert that op
12390 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72  erands are never
123a0 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
123b0 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
123c0 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
123d0 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
123e0 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
123f0 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
12400 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
12410 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
12420 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
12430 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
12440 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
12450 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
12460 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
12470 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12480 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
12490 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
124a0 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
124b0 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
124c0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
124d0 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
124e0 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
124f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12500 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
12510 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
12520 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
12530 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  table.** impleme
12540 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
12550 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
12560 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
12570 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61   between.** data
12580 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
12590 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
125a0 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
125b0 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a  emory database.*
125c0 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
125d0 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
125e0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
125f0 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
12600 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
12610 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
12620 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
12630 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
12640 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
12650 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
12660 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
12670 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
12680 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12690 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
126a0 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
126b0 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
126c0 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
126d0 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a  ess real tables.
126e0 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
126f0 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
12700 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
12710 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
12720 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  rs.** transactio
12730 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
12740 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
12750 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
12760 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
12770 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
12780 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
12790 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
127a0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
127b0 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
127c0 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
127d0 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
127e0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
127f0 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
12800 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
12810 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
12820 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
12830 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
12840 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
12850 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
12860 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
12870 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
12880 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
12890 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
128a0 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
128b0 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
128c0 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
128d0 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
128e0 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
128f0 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
12900 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
12910 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
12920 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
12930 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
12940 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
12950 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
12960 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
12970 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
12980 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
12990 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
129a0 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
129b0 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
129c0 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
129d0 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
129e0 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
129f0 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
12a00 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
12a10 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c  s are not.** del
12a20 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
12a30 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
12a40 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
12a50 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d  onnect()ed.** im
12a60 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
12a70 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
12a80 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
12a90 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
12aa0 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
12ab0 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
12ac0 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
12ad0 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
12ae0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
12af0 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
12b00 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
12b10 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
12b20 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
12b30 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
12b40 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
12b50 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
12b60 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
12b70 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
12b80 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
12b90 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
12ba0 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
12bb0 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
12bc0 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
12bd0 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
12be0 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
12bf0 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
12c00 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
12c10 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
12c20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
12c30 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
12c40 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
12c50 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
12c60 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
12c70 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
12c80 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
12c90 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
12ca0 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
12cb0 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
12cc0 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a  s allocated by.*
12cd0 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
12ce0 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
12cf0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
12d00 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
12d10 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66  e.db as.** the f
12d20 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
12d30 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
12d40 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12d60 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
12d70 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
12d80 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
12d90 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
12da0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
12db0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
12dc0 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
12dd0 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
12de0 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
12df0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
12e00 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
12e10 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12e30 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
12e40 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
12e50 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
12e60 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
12e70 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
12e80 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
12e90 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
12ea0 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
12eb0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
12ec0 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
12ed0 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
12ee0 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
12ef0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
12f00 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
12f10 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
12f20 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d  ./*.** The schem
12f30 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74  a for each SQL t
12f40 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73  able and view is
12f50 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
12f60 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20  memory.** by an 
12f70 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12f80 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12f90 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ure..*/.struct T
12fa0 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
12fb0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
12fc0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
12fd0 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
12fe0 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
12ff0 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
13000 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
13010 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 64 65 66 20  olumn */.#ifdef 
13020 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 4f  SQLITE_ENABLE_NO
13030 52 4d 41 4c 49 5a 45 0a 20 20 48 61 73 68 20 2a  RMALIZE.  Hash *
13040 70 43 6f 6c 48 61 73 68 3b 20 20 20 20 20 20 2f  pColHash;      /
13050 2a 20 41 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e  * All columns in
13060 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
13070 0a 23 65 6e 64 69 66 0a 20 20 49 6e 64 65 78 20  .#endif.  Index 
13080 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f  *pIndex;       /
13090 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e  * List of SQL in
130a0 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61  dexes on this ta
130b0 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ble. */.  Select
130c0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
130d0 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65  * NULL for table
130e0 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65  s.  Points to de
130f0 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69  finition if a vi
13100 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ew. */.  FKey *p
13110 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  FKey;         /*
13120 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
13130 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  all foreign keys
13140 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
13150 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
13160 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69  f;       /* Stri
13170 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
13180 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
13190 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70   column */.  Exp
131a0 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20  rList *pCheck;  
131b0 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63    /* All CHECK c
131c0 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131e0 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c       /*   ... al
131f0 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d  so used as colum
13200 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61  n name list in a
13210 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74   VIEW */.  int t
13220 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
13230 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61  /* Root BTree pa
13240 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c  ge for this tabl
13250 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52  e */.  u32 nTabR
13260 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ef;         /* N
13270 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
13280 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
13290 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67  */.  u32 tabFlag
132a0 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  s;        /* Mas
132b0 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73  k of TF_* values
132c0 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b   */.  i16 iPKey;
132d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
132e0 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75   not negative, u
132f0 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61  se aCol[iPKey] a
13300 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20  s the rowid */. 
13310 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20   i16 nCol;      
13320 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13330 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
13340 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  is table */.  Lo
13350 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b  gEst nRowLogEst;
13360 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
13370 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20  rows in table - 
13380 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
13390 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  1 table */.  Log
133a0 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20  Est szTabRow;   
133b0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
133c0 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c  ize of each tabl
133d0 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a  e row in bytes *
133e0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
133f0 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a  ENABLE_COSTMULT.
13400 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c    LogEst costMul
13410 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d  t;     /* Cost m
13420 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73  ultiplier for us
13430 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
13440 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65  /.#endif.  u8 ke
13450 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  yConf;          
13460 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e  /* What to do in
13470 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e   case of uniquen
13480 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20  ess conflict on 
13490 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66  iPKey */.#ifndef
134a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
134b0 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64  ERTABLE.  int ad
134c0 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f  dColOffset;    /
134d0 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41  * Offset in CREA
134e0 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f  TE TABLE stmt to
134f0 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d   add a new colum
13500 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
13510 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13520 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
13530 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20  nt nModuleArg;  
13540 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13550 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
13560 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68  e module */.  ch
13570 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67  ar **azModuleArg
13580 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20  ;  /* 0: module 
13590 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61  1: schema 2: vta
135a0 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67  b name 3...: arg
135b0 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  s */.  VTable *p
135c0 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c  VTable;     /* L
135d0 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62  ist of VTable ob
135e0 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66  jects. */.#endif
135f0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
13600 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20  gger;   /* List 
13610 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72  of triggers stor
13620 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f  ed in pSchema */
13630 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
13640 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
13650 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  a that contains 
13660 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13670 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62  Table *pNextZomb
13680 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20  ie;  /* Next on 
13690 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69  the Parse.pZombi
136a0 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a  eTab list */.};.
136b0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
136c0 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e  alues for Table.
136d0 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  tabFlags..**.** 
136e0 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70  TF_OOOHidden app
136f0 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f  lies to tables o
13700 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76 65  r view that have
13710 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
13720 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c  that are.** foll
13730 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64  owed by non-hidd
13740 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61  en columns.  Exa
13750 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56  mple:  "CREATE V
13760 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55  IRTUAL TABLE x U
13770 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20  SING.** vtab1(a 
13780 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53  HIDDEN, b);".  S
13790 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f  ince "b" is a no
137a0 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  n-hidden column 
137b0 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64 65  but "a" is hidde
137c0 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f  n,.** the TF_OOO
137d0 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74 65  Hidden attribute
137e0 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20   would apply in 
137f0 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63 68  this case.  Such
13800 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a   tables require.
13810 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c  ** special handl
13820 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52  ing during INSER
13830 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f  T processing..*/
13840 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64  .#define TF_Read
13850 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 30  only        0x00
13860 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
13870 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
13880 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
13890 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
138a0 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70  0002    /* An ep
138b0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f  hemeral table */
138c0 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50  .#define TF_HasP
138d0 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30  rimaryKey   0x00
138e0 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
138f0 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
13900 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
13910 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
13920 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65  x0008    /* Inte
13930 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
13940 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
13950 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48   */.#define TF_H
13960 61 73 53 74 61 74 31 20 20 20 20 20 20 20 20 30  asStat1        0
13970 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77  x0010    /* nRow
13980 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20  LogEst set from 
13990 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a  sqlite_stat1 */.
139a0 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f  #define TF_Witho
139b0 75 74 52 6f 77 69 64 20 20 20 20 30 78 30 30 32  utRowid    0x002
139c0 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64  0    /* No rowid
139d0 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  .  PRIMARY KEY i
139e0 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65  s the key */.#de
139f0 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c  fine TF_NoVisibl
13a00 65 52 6f 77 69 64 20 20 30 78 30 30 34 30 20 20  eRowid  0x0040  
13a10 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73    /* No user-vis
13a20 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c  ible "rowid" col
13a30 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  umn */.#define T
13a40 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20  F_OOOHidden     
13a50 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f    0x0080    /* O
13a60 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64  ut-of-Order hidd
13a70 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64  en columns */.#d
13a80 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73  efine TF_StatsUs
13a90 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30 20  ed       0x0100 
13aa0 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e     /* Query plan
13ab0 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66  ner decisions af
13ac0 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20 20  fected by.      
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13af0 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67  * Index.aiRowLog
13b00 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a  Est[] values */.
13b10 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f  #define TF_HasNo
13b20 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30  tNull      0x020
13b30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0    /* Contains
13b40 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
13b50 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  aints */../*.** 
13b60 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
13b70 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
13b80 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
13b90 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
13ba0 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
13bb0 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
13bc0 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
13bd0 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
13be0 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
13bf0 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
13c00 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
13c10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
13c20 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
13c30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
13c40 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 58  tual(X)      ((X
13c50 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23  )->nModuleArg).#
13c60 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
13c70 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
13c80 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
13c90 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
13ca0 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e  mine if a column
13cb0 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f   is hidden.  IsO
13cc0 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
13cd0 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f  umn().** only wo
13ce0 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74  rks for non-virt
13cf0 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69  ual tables (ordi
13d00 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  nary tables and 
13d10 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a  views) and is.**
13d20 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e   always false un
13d30 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42  less SQLITE_ENAB
13d40 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
13d50 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54  S is defined.  T
13d60 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f  he.** IsHiddenCo
13d70 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20  lumn() macro is 
13d80 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e  general purpose.
13d90 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
13da0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
13db0 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20  DDEN_COLUMNS).# 
13dc0 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
13dd0 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
13de0 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67    (((X)->colFlag
13df0 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
13e00 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  EN)!=0).#  defin
13e10 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
13e20 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
13e30 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
13e40 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
13e50 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
13e60 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
13e70 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65  TUALTABLE).#  de
13e80 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
13e90 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
13ea0 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
13eb0 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
13ec0 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
13ed0 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
13ee0 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65  olumn(X) 0.#else
13ef0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
13f00 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20  denColumn(X)    
13f10 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
13f20 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
13f30 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e  nColumn(X) 0.#en
13f40 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68  dif.../* Does th
13f50 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72  e table have a r
13f60 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
13f70 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20  HasRowid(X)     
13f80 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
13f90 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  & TF_WithoutRowi
13fa0 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56  d)==0).#define V
13fb0 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28  isibleRowid(X) (
13fc0 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
13fd0 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
13fe0 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45  id)==0)../*.** E
13ff0 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
14000 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e  constraint is an
14010 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
14020 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
14030 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f  ture..**.** A fo
14040 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73  reign key is ass
14050 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f  ociated with two
14060 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66   tables.  The "f
14070 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a  rom" table is.**
14080 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
14090 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46  contains the REF
140a0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74  ERENCES clause t
140b0 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20  hat creates the 
140c0 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20  foreign.** key. 
140d0 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20   The "to" table 
140e0 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  is the table tha
140f0 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68  t is named in th
14100 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
14110 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72  use..** Consider
14120 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a   this example:.*
14130 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
14140 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20  TABLE ex1(.**   
14150 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52      a INTEGER PR
14160 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20  IMARY KEY,.**   
14170 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f      b INTEGER CO
14180 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46  NSTRAINT fk1 REF
14190 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a  ERENCES ex2(x).*
141a0 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46  *     );.**.** F
141b0 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22  or foreign key "
141c0 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74  fk1", the from-t
141d0 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e  able is "ex1" an
141e0 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  d the to-table i
141f0 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69  s "ex2"..** Equi
14200 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a  valent names:.**
14210 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62  .**     from-tab
14220 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c  le == child-tabl
14230 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61  e.**       to-ta
14240 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61  ble == parent-ta
14250 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52  ble.**.** Each R
14260 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
14270 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e   generates an in
14280 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
14290 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
142a0 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74  e.** which is at
142b0 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72  tached to the fr
142c0 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74  om-table.  The t
142d0 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74  o-table need not
142e0 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74   exist when.** t
142f0 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
14300 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65   created.  The e
14310 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20  xistence of the 
14320 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  to-table is not 
14330 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  checked..**.** T
14340 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70  he list of all p
14350 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64  arents for child
14360 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64   Table X is held
14370 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a   at X.pFKey..**.
14380 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c  ** A list of all
14390 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20   children for a 
143a0 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77  table named Z (w
143b0 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65  hich might not e
143c0 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73  ven exist).** is
143d0 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e   held in Schema.
143e0 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20  fkeyHash with a 
143f0 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a  hash key of Z..*
14400 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
14410 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
14420 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
14430 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
14440 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
14450 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
14460 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
14470 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77    /* Next FKey w
14480 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ith the same in 
14490 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65  pFrom. Next pare
144a0 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20  nt of pFrom */. 
144b0 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20   char *zTo;     
144c0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61     /* Name of ta
144d0 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79  ble that the key
144e0 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a   points to (aka:
144f0 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b   Parent) */.  FK
14500 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
14510 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65  /* Next with the
14520 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20   same zTo. Next 
14530 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f  child of zTo. */
14540 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
14550 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
14560 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
14570 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
14580 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
14590 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
145a0 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
145b0 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
145c0 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
145d0 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f  eferred;       /
145e0 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
145f0 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
14600 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
14610 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41  OMMIT */.  u8 aA
14620 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20  ction[2];       
14630 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e   /* ON DELETE an
14640 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69  d ON UPDATE acti
14650 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ons, respectivel
14660 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  y */.  Trigger *
14670 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20  apTrigger[2];/* 
14680 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
14690 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
146a0 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
146b0 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70  ap {      /* Map
146c0 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  ping of columns 
146d0 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75  in pFrom to colu
146e0 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20  mns in zTo */.  
146f0 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20    int iFrom;    
14700 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
14710 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46   of column in pF
14720 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  rom */.    char 
14730 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  *zCol;          
14740 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
14750 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e  mn in zTo.  If N
14760 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20  ULL use PRIMARY 
14770 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
14780 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  1];            /
14790 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
147a0 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
147b0 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  umns */.};../*.*
147c0 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
147d0 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
147e0 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
147f0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
14800 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
14810 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
14820 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
14830 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
14840 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
14850 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
14860 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
14870 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
14880 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
14890 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
148a0 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
148b0 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
148c0 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
148d0 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
148e0 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
148f0 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
14900 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
14910 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
14920 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
14930 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
14940 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
14950 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
14960 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
14970 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
14980 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
14990 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
149a0 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
149b0 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
149c0 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
149d0 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
149e0 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
149f0 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
14a00 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
14a10 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
14a20 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
14a30 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
14a40 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
14a50 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
14a60 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
14a70 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
14a80 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
14a90 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
14aa0 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
14ab0 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
14ac0 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
14ad0 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
14ae0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
14af0 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
14b00 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
14b10 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
14b20 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
14b30 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
14b40 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
14b50 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
14b60 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
14b70 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
14b80 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
14b90 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
14ba0 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
14bb0 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
14bc0 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
14bd0 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
14be0 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
14bf0 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
14c00 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
14c10 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
14c20 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
14c30 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
14c40 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
14c50 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
14c60 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
14c70 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
14c80 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
14c90 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
14ca0 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
14cb0 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
14cc0 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  n key..**.** The
14cd0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
14ce0 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
14cf0 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
14d00 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
14d10 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
14d20 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
14d30 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
14d40 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
14d50 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
14d60 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
14d70 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
14d80 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
14d90 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
14da0 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
14db0 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
14dc0 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
14dd0 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
14de0 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
14df0 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
14e00 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
14e10 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
14e20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
14e30 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
14e40 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
14e50 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
14e60 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
14e70 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
14e80 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
14e90 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
14ea0 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
14eb0 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
14ec0 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
14ed0 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
14ee0 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
14ef0 45 5f 55 70 64 61 74 65 20 20 20 36 20 20 20 2f  E_Update   6   /
14f00 2a 20 50 72 6f 63 65 73 73 20 61 73 20 61 20 44  * Process as a D
14f10 4f 20 55 50 44 41 54 45 20 69 6e 20 61 6e 20 75  O UPDATE in an u
14f20 70 73 65 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65  psert */.#define
14f30 20 4f 45 5f 52 65 73 74 72 69 63 74 20 37 20 20   OE_Restrict 7  
14f40 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
14f50 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
14f60 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
14f70 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
14f80 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 38 20 20 20  OE_SetNull  8   
14f90 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
14fa0 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
14fb0 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
14fc0 4f 45 5f 53 65 74 44 66 6c 74 20 20 39 20 20 20  OE_SetDflt  9   
14fd0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
14fe0 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
14ff0 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
15000 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
15010 65 20 20 31 30 20 20 2f 2a 20 43 61 73 63 61 64  e  10  /* Cascad
15020 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
15030 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
15040 75 6c 74 20 20 31 31 20 20 2f 2a 20 44 6f 20 77  ult  11  /* Do w
15050 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
15060 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
15070 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
15080 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
15090 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
150a0 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
150b0 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
150c0 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
150d0 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
150e0 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
150f0 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  ol the.** compar
15100 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
15110 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a  index keys..**.*
15120 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72  * Note that aSor
15130 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f  tOrder[] and aCo
15140 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64  ll[] have nField
15150 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65  +1 slots.  There
15160 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73  .** are nField s
15170 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c  lots for the col
15180 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78  umns of an index
15190 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20   then one extra 
151a0 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20  slot.** for the 
151b0 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64  rowid at the end
151c0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49  ..*/.struct KeyI
151d0 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66  nfo {.  u32 nRef
151e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
151f0 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e  umber of referen
15200 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49  ces to this KeyI
15210 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  nfo object */.  
15220 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
15230 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
15240 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68  ding - one of th
15250 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61  e SQLITE_UTF* va
15260 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b  lues */.  u16 nK
15270 65 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a  eyField;      /*
15280 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63   Number of key c
15290 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
152a0 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c  dex */.  u16 nAl
152b0 6c 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20  lField;      /* 
152c0 54 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69  Total columns, i
152d0 6e 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75  ncluding key plu
152e0 73 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71  s others */.  sq
152f0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
15300 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
15310 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
15320 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
15330 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72  ;     /* Sort or
15340 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  der for each col
15350 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  umn. */.  CollSe
15360 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
15370 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
15380 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
15390 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
153a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f  };../*.** This o
153b0 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65  bject holds a re
153c0 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62  cord which has b
153d0 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69  een parsed out i
153e0 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a  nto individual.*
153f0 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68  * fields, for th
15400 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f  e purposes of do
15410 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  ing a comparison
15420 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
15430 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
15440 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
15450 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
15460 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
15470 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
15480 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
15490 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
154a0 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
154b0 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
154c0 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
154d0 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
154e0 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
154f0 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
15500 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
15510 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
15520 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
15530 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
15540 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e  opcode..**.** An
15550 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
15560 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20  s object serves 
15570 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64  as a "key" for d
15580 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e  oing a search on
15590 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74  .** an index b+t
155a0 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66  ree. The goal of
155b0 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74   the search is t
155c0 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79  o find the entry
155d0 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73   that.** is clos
155e0 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65  ed to the key de
155f0 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20  scribed by this 
15600 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62  object.  This ob
15610 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a  ject might hold.
15620 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78  ** just a prefix
15630 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68   of the key.  Th
15640 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
15650 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a  ds is given by.*
15660 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  * pKeyInfo->nFie
15670 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31  ld..**.** The r1
15680 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61   and r2 fields a
15690 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f  re the values to
156a0 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20   return if this 
156b0 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
156c0 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74  .** or greater t
156d0 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65  han a key in the
156e0 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69   btree, respecti
156f0 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65  vely.  These are
15700 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20   normally.** -1 
15710 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76  and +1 respectiv
15720 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62  ely, but might b
15730 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31  e inverted to +1
15740 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62   and -1 if the b
15750 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44  -tree.** is in D
15760 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  ESC order..**.**
15770 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69   The key compari
15780 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63  son functions ac
15790 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65  tually return de
157a0 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68  fault_rc when th
157b0 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71  ey find.** an eq
157c0 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  uals comparison.
157d0 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e    default_rc can
157e0 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31   be -1, 0, or +1
157f0 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a  .  If there are.
15800 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72  ** multiple entr
15810 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65  ies in the b-tre
15820 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
15830 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c  key (when only l
15840 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65  ooking.** at the
15850 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d   first pKeyInfo-
15860 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20  >nFields,) then 
15870 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
15880 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a  e set to -1 to.*
15890 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  * cause the sear
158a0 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  ch to find the l
158b0 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31  ast match, or +1
158c0 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65   to cause the se
158d0 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20  arch to.** find 
158e0 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e  the first match.
158f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
15900 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
15910 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53  ons will set eqS
15920 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74  een to true if t
15930 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20  hey ever.** get 
15940 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74  and equal result
15950 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
15960 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
15970 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f  to a b-tree reco
15980 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61  rd..** When defa
15990 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73  ult_rc!=0, the s
159a0 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20  earch might end 
159b0 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64  up on the record
159c0 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20   immediately.** 
159d0 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74  before the first
159e0 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69   match or immedi
159f0 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
15a00 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65  last match.  The
15a10 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64  .** eqSeen field
15a20 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77   will indicate w
15a30 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
15a40 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69   exact match exi
15a50 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d  sts in the.** b-
15a60 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tree..*/.struct 
15a70 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b  UnpackedRecord {
15a80 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
15a90 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  Info;  /* Collat
15aa0 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64  ion and sort-ord
15ab0 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  er information *
15ac0 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20  /.  Mem *aMem;  
15ad0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
15ae0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
15af0 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
15b00 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
15b10 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
15b20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20  i8 default_rc;  
15b30 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
15b40 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73  n result if keys
15b50 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
15b60 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  u8 errCode;     
15b70 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74      /* Error det
15b80 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64  ected by xRecord
15b90 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54  Compare (CORRUPT
15ba0 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20   or NOMEM) */.  
15bb0 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  i8 r1;          
15bc0 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
15bd0 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c  return if (lhs <
15be0 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32   rhs) */.  i8 r2
15bf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15c00 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
15c10 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
15c20 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b   */.  u8 eqSeen;
15c30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
15c40 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79  e if an equality
15c50 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20   comparison has 
15c60 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a  been seen */.};.
15c70 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
15c80 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
15c90 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
15ca0 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
15cb0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
15cc0 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
15cd0 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
15ce0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
15cf0 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
15d00 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
15d10 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
15d20 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
15d30 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
15d40 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
15d50 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
15d60 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
15d70 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
15d80 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
15d90 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
15da0 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
15db0 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
15dc0 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
15dd0 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
15de0 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
15df0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
15e00 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
15e10 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
15e20 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
15e30 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
15e40 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
15e50 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
15e60 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
15e70 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
15e80 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
15e90 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
15ea0 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
15eb0 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
15ec0 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
15ed0 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
15ee0 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f   the.** first co
15ef0 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
15f00 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
15f10 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
15f20 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
15f30 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
15f40 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
15f50 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
15f60 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
15f70 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
15f80 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
15f90 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
15fa0 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
15fb0 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
15fc0 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
15fd0 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
15fe0 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
15ff0 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
16000 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
16010 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
16020 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
16030 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
16040 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
16050 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
16060 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
16070 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
16080 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
16090 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
160a0 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
160b0 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c  resolution.** al
160c0 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f  gorithm to emplo
160d0 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74  y whenever an at
160e0 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
160f0 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e   insert a non-un
16100 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e  ique.** element.
16110 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72  .**.** While par
16120 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41  sing a CREATE TA
16130 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e  BLE or CREATE IN
16140 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  DEX statement in
16150 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e   order to.** gen
16160 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20  erate VDBE code 
16170 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70  (as opposed to p
16180 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20  arsing one read 
16190 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d  from an sqlite_m
161a0 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61  aster.** table a
161b0 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e  s part of parsin
161c0 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  g an existing da
161d0 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20  tabase schema), 
161e0 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e  transient instan
161f0 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  ces.** of this s
16200 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20  tructure may be 
16210 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73  created. In this
16220 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e   case the Index.
16230 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73  tnum variable is
16240 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
16250 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  e the address of
16260 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74   a VDBE instruct
16270 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62  ion, not a datab
16280 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  ase page.** numb
16290 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20  er (it cannot - 
162a0 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67  the database pag
162b0 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74  e is not allocat
162c0 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42  ed until the VDB
162d0 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20  E.** program is 
162e0 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63  executed). See c
162f0 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52  onvertToWithoutR
16300 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20  owidTable() for 
16310 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75  details..*/.stru
16320 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
16330 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
16340 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
16350 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
16360 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
16370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
16380 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
16390 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
163a0 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
163b0 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
163c0 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
163d0 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
163e0 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
163f0 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
16400 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
16410 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
16420 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
16430 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
16440 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
16450 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
16460 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
16470 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
16480 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
16490 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
164a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
164b0 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
164c0 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
164d0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
164e0 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
164f0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
16500 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
16510 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
16520 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
16530 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
16540 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
16550 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
16560 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  .  const char **
16570 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41  azColl;     /* A
16580 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
16590 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
165a0 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
165b0 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
165c0 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
165d0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
165e0 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
165f0 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c    ExprList *aCol
16600 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f  Expr;      /* Co
16610 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  lumn expressions
16620 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16640 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
16650 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
16660 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
16670 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
16680 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
16690 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
166a0 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
166b0 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
166c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
166d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
166e0 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
166f0 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
16700 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16710 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
16720 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
16730 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
16740 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
16750 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
16760 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
16770 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
16780 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
16790 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
167a0 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20    /* 1==UNIQUE, 
167b0 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  2==PRIMARY KEY, 
167c0 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20  0==CREATE INDEX 
167d0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55  */.  unsigned bU
167e0 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a  nordered:1;   /*
167f0 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20   Use this index 
16800 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65  for == or IN que
16810 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75  ries only */.  u
16820 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e  nsigned uniqNotN
16830 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ull:1;  /* True 
16840 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f  if UNIQUE and NO
16850 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63  T NULL for all c
16860 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69  olumns */.  unsi
16870 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31  gned isResized:1
16880 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
16890 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63  resizeIndexObjec
168a0 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
168b0 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  led */.  unsigne
168c0 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20  d isCovering:1; 
168d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
168e0 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20  s is a covering 
168f0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67  index */.  unsig
16900 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31  ned noSkipScan:1
16910 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72  ;   /* Do not tr
16920 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63  y to use skip-sc
16930 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  an if true */.  
16940 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61 74  unsigned hasStat
16950 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f  1:1;     /* aiRo
16960 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63  wLogEst values c
16970 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  ome from sqlite_
16980 73 74 61 74 31 20 2a 2f 0a 20 20 75 6e 73 69 67  stat1 */.  unsig
16990 6e 65 64 20 62 4e 6f 51 75 65 72 79 3a 31 3b 20  ned bNoQuery:1; 
169a0 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73      /* Do not us
169b0 65 20 74 68 69 73 20 69 6e 64 65 78 20 74 6f 20  e this index to 
169c0 6f 70 74 69 6d 69 7a 65 20 71 75 65 72 69 65 73  optimize queries
169d0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
169e0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
169f0 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53  R_STAT4.  int nS
16a00 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
16a10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16a20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
16a30 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ple[] */.  int n
16a40 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20  SampleCol;      
16a50 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49      /* Size of I
16a60 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b  ndexSample.anEq[
16a70 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20  ] and so on */. 
16a80 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71   tRowcnt *aAvgEq
16a90 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65  ;         /* Ave
16aa0 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20  rage nEq values 
16ab0 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20  for keys not in 
16ac0 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64  aSample */.  Ind
16ad0 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c  exSample *aSampl
16ae0 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73  e;    /* Samples
16af0 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
16b00 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63  t key */.  tRowc
16b10 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20  nt *aiRowEst;   
16b20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
16b30 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74  ithmic stat1 dat
16b40 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78  a for this index
16b50 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52   */.  tRowcnt nR
16b60 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f  owEst0;        /
16b70 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
16b80 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  c number of rows
16b90 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
16ba0 0a 23 65 6e 64 69 66 0a 20 20 42 69 74 6d 61 73  .#endif.  Bitmas
16bb0 6b 20 63 6f 6c 4e 6f 74 49 64 78 65 64 3b 20 20  k colNotIdxed;  
16bc0 20 20 20 2f 2a 20 30 20 66 6f 72 20 75 6e 69 6e     /* 0 for unin
16bd0 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20 69 6e  dexed columns in
16be0 20 70 54 61 62 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   pTab */.};../*.
16bf0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
16c00 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54  s for Index.idxT
16c10 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ype.*/.#define S
16c20 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50  QLITE_IDXTYPE_AP
16c30 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a  PDEF      0   /*
16c40 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   Created using C
16c50 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
16c60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
16c70 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20  XTYPE_UNIQUE    
16c80 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65    1   /* Impleme
16c90 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  nts a UNIQUE con
16ca0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
16cb0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
16cc0 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20  E_PRIMARYKEY  2 
16cd0 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d    /* Is the PRIM
16ce0 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20  ARY KEY for the 
16cf0 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74  table */../* Ret
16d00 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
16d10 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59  x X is a PRIMARY
16d20 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64   KEY index */.#d
16d30 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b  efine IsPrimaryK
16d40 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29  eyIndex(X)  ((X)
16d50 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54  ->idxType==SQLIT
16d60 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
16d70 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e  YKEY)../* Return
16d80 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
16d90 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64   is a UNIQUE ind
16da0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
16db0 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20  UniqueIndex(X)  
16dc0 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f      ((X)->onErro
16dd0 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20  r!=OE_None)../* 
16de0 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75  The Index.aiColu
16df0 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20  mn[] values are 
16e00 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76  normally positiv
16e10 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a  e integer.  But.
16e20 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d  ** there are som
16e30 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  e negative value
16e40 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65 63  s that have spec
16e50 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a  ial meaning:.*/.
16e60 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44  #define XN_ROWID
16e70 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a       (-1)     /*
16e80 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
16e90 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  is the rowid */.
16ea0 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20  #define XN_EXPR 
16eb0 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a       (-2)     /*
16ec0 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20   Indexed column 
16ed0 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
16ee0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
16ef0 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e  sample stored in
16f00 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
16f10 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  3 table is repre
16f20 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
16f30 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
16f40 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
16f50 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e  pe.  See documen
16f60 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f  tation at the to
16f70 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c  p of the.** anal
16f80 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c  yze.c source fil
16f90 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
16fa0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
16fb0 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d  .struct IndexSam
16fc0 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b  ple {.  void *p;
16fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
16fe0 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20  nter to sampled 
16ff0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
17000 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
17010 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20   Size of record 
17020 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52  in bytes */.  tR
17030 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20  owcnt *anEq;    
17040 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
17050 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  f rows where the
17060 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73   key equals this
17070 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
17080 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f  wcnt *anLt;    /
17090 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
170a0 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20   rows where key 
170b0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  is less than thi
170c0 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
170d0 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20  owcnt *anDLt;   
170e0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
170f0 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20  f distinct keys 
17100 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
17110 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ample */.};../*.
17120 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
17130 65 73 20 74 6f 20 75 73 65 20 77 69 74 68 69 6e  es to use within
17140 20 74 68 65 20 66 6c 61 67 73 20 61 72 67 75 6d   the flags argum
17150 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 47 65  ent to sqlite3Ge
17160 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64 65  tToken()..*/.#de
17170 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b 45  fine SQLITE_TOKE
17180 4e 5f 51 55 4f 54 45 44 20 20 20 20 30 78 31 20  N_QUOTED    0x1 
17190 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20 71 75  /* Token is a qu
171a0 6f 74 65 64 20 69 64 65 6e 74 69 66 69 65 72 2e  oted identifier.
171b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
171c0 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52 44  TE_TOKEN_KEYWORD
171d0 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e 20     0x2 /* Token 
171e0 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20 2a 2f  is a keyword. */
171f0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
17200 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
17210 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
17220 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
17230 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
17240 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
17250 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
17260 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
17270 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
17280 20 74 68 61 74 20 22 7a 22 20 70 6f 69 6e 74 73   that "z" points
17290 20 74 6f 20 69 73 20 6f 77 6e 65 64 20 62 79 20   to is owned by 
172a0 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2e 20 20  other objects.  
172b0 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68 61  Take care.** tha
172c0 74 20 74 68 65 20 6f 77 6e 65 72 20 6f 66 20 74  t the owner of t
172d0 68 65 20 22 7a 22 20 73 74 72 69 6e 67 20 64 6f  he "z" string do
172e0 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61 74  es not deallocat
172f0 65 20 74 68 65 20 73 74 72 69 6e 67 20 62 65 66  e the string bef
17300 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65 6e  ore.** the Token
17310 20 67 6f 65 73 20 6f 75 74 20 6f 66 20 73 63 6f   goes out of sco
17320 70 65 21 20 20 56 65 72 79 20 6f 66 74 65 6e 2c  pe!  Very often,
17330 20 74 68 65 20 22 7a 22 20 70 6f 69 6e 74 73 20   the "z" points 
17340 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a 2a  to some place.**
17350 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
17360 66 20 74 68 65 20 50 61 72 73 65 2e 7a 53 71 6c  f the Parse.zSql
17370 20 74 65 78 74 2e 20 20 42 75 74 20 69 74 20 6d   text.  But it m
17380 69 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74 20  ight also point 
17390 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63 20 73  to a.** static s
173a0 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74  tring..*/.struct
173b0 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
173c0 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a   char *z;     /*
173d0 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
173e0 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
173f0 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
17400 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20  nsigned int n;  
17410 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
17420 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
17430 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
17440 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
17450 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
17460 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
17470 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
17480 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
17490 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
174a0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
174b0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
174c0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
174d0 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
174e0 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
174f0 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
17500 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
17510 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
17520 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
17530 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
17540 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
17550 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
17560 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
17570 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
17580 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
17590 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
175a0 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
175b0 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
175c0 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
175d0 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
175e0 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
175f0 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
17600 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
17610 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
17620 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
17630 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
17640 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
17650 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
17660 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
17670 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
17680 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
17690 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
176a0 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
176b0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
176c0 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
176d0 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
176e0 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17700 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
17710 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
17720 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
17730 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
17740 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
17750 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
17760 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
17770 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
17780 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
17790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
177a0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
177b0 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
177c0 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
177d0 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
177e0 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
177f0 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
17800 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
17810 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20  sortingIdxPTab; 
17820 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17830 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74  mber of pseudo-t
17840 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  able */.  int nS
17850 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
17860 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
17870 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
17880 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
17890 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65   int mnReg, mxRe
178a0 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67  g;       /* Rang
178b0 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  e of registers a
178c0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
178d0 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20  l and aFunc */. 
178e0 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
178f0 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
17900 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
17910 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
17920 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
17930 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
17940 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
17950 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
17960 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
17970 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
17980 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
17990 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
179a0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
179b0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
179c0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
179d0 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
179e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
179f0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
17a00 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
17a10 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17a20 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
17a30 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
17a40 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
17a50 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
17a60 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
17a70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
17a80 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
17a90 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
17aa0 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
17ab0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
17ac0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
17ad0 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
17ae0 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
17af0 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
17b00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17b10 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
17b20 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
17b30 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74    int nAccumulat
17b40 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  or;       /* Num
17b50 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ber of columns t
17b60 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68  hat show through
17b70 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   to the output..
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b90 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64            ** Add
17ba0 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20  itional columns 
17bb0 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73  are used only as
17bc0 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20   parameters to. 
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72           ** aggr
17bf0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
17c00 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
17c10 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20  nfo_func {   /* 
17c20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61  For each aggrega
17c30 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  te function */. 
17c40 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
17c50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
17c60 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69  xpression encodi
17c70 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ng the function 
17c80 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  */.    FuncDef *
17c90 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  pFunc;          
17ca0 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65  /* The aggregate
17cb0 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
17cc0 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  entation */.    
17cd0 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
17ce0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
17cf0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
17d00 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
17d10 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ator */.    int 
17d20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  iDistinct;      
17d30 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61       /* Ephemera
17d40 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20  l table used to 
17d50 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54  enforce DISTINCT
17d60 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a   */.  } *aFunc;.
17d70 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20    int nFunc;    
17d80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17d90 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
17da0 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a  n aFunc[] */.};.
17db0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
17dc0 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73  ype ynVar is a s
17dd0 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65  igned integer, e
17de0 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20  ither 16-bit or 
17df0 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c  32-bit..** Usual
17e00 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73  ly it is 16-bits
17e10 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45  .  But if SQLITE
17e20 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
17e30 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a  MBER is greater.
17e40 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65  ** than 32767 we
17e50 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74   have to make it
17e60 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74   32-bit.  16-bit
17e70 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65   is preferred be
17e80 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73  cause.** it uses
17e90 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20   less memory in 
17ea0 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c  the Expr object,
17eb0 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20   which is a big 
17ec0 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69  memory user.** i
17ed0 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c  n systems with l
17ee0 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20  ots of prepared 
17ef0 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64  statements.  And
17f00 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   few application
17f10 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74  s.** need more t
17f20 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20  han about 10 or 
17f30 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42  20 variables.  B
17f40 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20  ut some extreme 
17f50 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f  users want.** to
17f60 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73   have prepared s
17f70 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f  tatements with o
17f80 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62  ver 32767 variab
17f90 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65  les, and for the
17fa0 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20  m.** the option 
17fb0 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74  is available (at
17fc0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a   compile-time)..
17fd0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
17fe0 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
17ff0 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66  R<=32767.typedef
18000 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73   i16 ynVar;.#els
18010 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e  e.typedef int yn
18020 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Var;.#endif../*.
18030 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
18040 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
18050 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
18060 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
18070 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
18080 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
18090 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
180a0 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61  . The integer pa
180b0 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73  rser token codes
180c0 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61   are reused.** a
180d0 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20  s opcodes here. 
180e0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
180f0 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20   parser defines 
18100 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69  TK_GE to be an i
18110 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72  nteger.** code r
18120 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
18130 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54  ">=" operator. T
18140 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72  his same integer
18150 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a   code is reused.
18160 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ** to represent 
18170 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e  the greater-than
18180 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65  -or-equal-to ope
18190 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70  rator in the exp
181a0 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e  ression.** tree.
181b0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
181c0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
181d0 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49  QL literal (TK_I
181e0 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54  NTEGER, TK_FLOAT
181f0 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72  , TK_BLOB,.** or
18200 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
18210 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
18220 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
18230 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
18240 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
18250 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
18260 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
18270 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
18280 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
18290 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61  e.** variable na
182a0 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  me. Finally, if 
182b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
182c0 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
182d0 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c  n (TK_FUNCTION),
182e0 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  .** then Expr.to
182f0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
18300 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
18310 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  ction..**.** Exp
18320 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70  r.pRight and Exp
18330 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20  r.pLeft are the 
18340 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73  left and right s
18350 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66  ubexpressions of
18360 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65   a.** binary ope
18370 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72  rator. Either or
18380 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c   both may be NUL
18390 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e  L..**.** Expr.x.
183a0 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20  pList is a list 
183b0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20  of arguments if 
183c0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
183d0 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
183e0 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70  n,.** a CASE exp
183f0 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e  ression or an IN
18400 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
18410 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
18420 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22  N (<y>, <z>...)"
18430 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c  ..** Expr.x.pSel
18440 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74  ect is used if t
18450 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
18460 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72   a sub-select or
18470 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
18480 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c  f.** the form "<
18490 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20  lhs> IN (SELECT 
184a0 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50  ...)". If the EP
184b0 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69  _xIsSelect bit i
184c0 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20  s set in the.** 
184d0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
184e0 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65   then Expr.x.pSe
184f0 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f  lect is valid. O
18500 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78  therwise, Expr.x
18510 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c  .pList is.** val
18520 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70  id..**.** An exp
18530 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
18540 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20  orm ID or ID.ID 
18550 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75  refers to a colu
18560 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a  mn in a table..*
18570 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65  * For such expre
18580 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20  ssions, Expr.op 
18590 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c  is set to TK_COL
185a0 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61  UMN and Expr.iTa
185b0 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e  ble is.** the in
185c0 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d  teger cursor num
185d0 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75  ber of a VDBE cu
185e0 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
185f0 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a   that table and.
18600 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  ** Expr.iColumn 
18610 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
18620 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65  mber for the spe
18630 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49  cific column.  I
18640 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73  f the.** express
18650 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61  ion is used as a
18660 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67   result in an ag
18670 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20  gregate SELECT, 
18680 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
18690 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64  e is also stored
186a0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67   in the Expr.iAg
186b0 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
186c0 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61  aggregate so tha
186d0 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61  t.** it can be a
186e0 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c  ccessed after al
186f0 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65  l aggregates are
18700 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a   computed..**.**
18710 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
18720 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64  on is an unbound
18730 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72   variable marker
18740 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72   (a question mar
18750 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27  k.** character '
18760 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ?' in the origin
18770 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65  al SQL) then the
18780 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c   Expr.iTable hol
18790 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  ds the index.** 
187a0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
187b0 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  variable..**.** 
187c0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
187d0 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20  n is a subquery 
187e0 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  then Expr.iColum
187f0 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  n holds an integ
18800 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e  er.** register n
18810 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  umber containing
18820 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
18830 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66  he subquery.  If
18840 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79   the.** subquery
18850 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e   gives a constan
18860 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69  t result, then i
18870 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66  Table is -1.  If
18880 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a   the subquery.**
18890 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65   gives a differe
188a0 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66  nt answer at dif
188b0 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72  ferent times dur
188c0 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72  ing statement pr
188d0 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e  ocessing.** then
188e0 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61   iTable is the a
188f0 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72  ddress of a subr
18900 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70  outine that comp
18910 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72  utes the subquer
18920 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  y..**.** If the 
18930 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20  Expr is of type 
18940 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  OP_Column, and t
18950 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73  he table it is s
18960 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a  electing from.**
18970 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65   is a disk table
18980 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20   or the "old.*" 
18990 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68  pseudo-table, th
189a0 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74  en pTab points t
189b0 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  o the.** corresp
189c0 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66  onding table def
189d0 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  inition..**.** A
189e0 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a  LLOCATION NOTES:
189f0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65  .**.** Expr obje
18a00 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f  cts can use a lo
18a10 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  t of memory spac
18a20 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63  e in database sc
18a30 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c  hema.  To.** hel
18a40 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20  p reduce memory 
18a50 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f  requirements, so
18a60 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20  metimes an Expr 
18a70 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a  object will be.*
18a80 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e  * truncated.  An
18a90 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
18aa0 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
18ab0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f   allocations, so
18ac0 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f  metimes.** two o
18ad0 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65  r more Expr obje
18ae0 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  cts will be stor
18af0 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d  ed in a single m
18b00 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
18b10 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69  ,.** together wi
18b20 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73  th Expr.zToken s
18b30 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  trings..**.** If
18b40 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
18b50 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  and EP_TokenOnly
18b60 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77   flags are set w
18b70 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f  hen.** an Expr o
18b80 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74  bject is truncat
18b90 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64  ed.  When EP_Red
18ba0 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65  uced is set, the
18bb0 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69  n all.** the chi
18bc0 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ld Expr objects 
18bd0 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66  in the Expr.pLef
18be0 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68  t and Expr.pRigh
18bf0 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72  t subtrees.** ar
18c00 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
18c10 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f  in the same memo
18c20 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ry allocation.  
18c30 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  Note, however, t
18c40 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72  hat.** the subtr
18c50 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c  ees in Expr.x.pL
18c60 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53  ist or Expr.x.pS
18c70 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73  elect are always
18c80 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61   separately.** a
18c90 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64  llocated, regard
18ca0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
18cb0 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65  or not EP_Reduce
18cc0 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72  d is set..*/.str
18cd0 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20  uct Expr {.  u8 
18ce0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
18cf0 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e      /* Operation
18d00 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68   performed by th
18d10 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61  is node */.  cha
18d20 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
18d30 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
18d40 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ity of the colum
18d50 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20  n or 0 if not a 
18d60 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
18d70 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
18d80 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c     /* Various fl
18d90 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62  ags.  EP_* See b
18da0 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  elow */.  union 
18db0 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b  {.    char *zTok
18dc0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  en;          /* 
18dd0 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72  Token value. Zer
18de0 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64  o terminated and
18df0 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20   dequoted */.   
18e00 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20   int iValue;    
18e10 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e          /* Non-n
18e20 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20  egative integer 
18e30 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56  value if EP_IntV
18e40 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a  alue */.  } u;..
18e50 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54    /* If the EP_T
18e60 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73  okenOnly flag is
18e70 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
18e80 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
18e90 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
18ea0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
18eb0 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
18ec0 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
18ed0 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
18ee0 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
18ef0 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
18f00 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
18f10 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
18f20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18f40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18f50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
18f60 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
18f70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
18f80 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
18f90 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
18fa0 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
18fb0 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
18fc0 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
18fd0 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
18fe0 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
18ff0 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46   SELECT, CASE, F
19000 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e  UNCTION, BETWEEN
19010 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
19020 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
19030 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64  EP_xIsSelect and
19040 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
19050 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20  , SELECT */.  } 
19060 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
19070 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
19080 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
19090 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
190a0 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
190b0 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
190c0 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
190d0 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
190e0 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
190f0 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
19100 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
19110 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
19120 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
19130 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19170 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
19180 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
19190 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
191a0 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
191b0 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
191c0 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
191d0 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
191e0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
191f0 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
19200 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
19210 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
19220 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
19250 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
19260 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
19270 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
19280 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
19290 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20  ew, 0 -> old.   
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192b0 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69        ** EP_Unli
192c0 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38  kely:  134217728
192d0 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f   times likelihoo
192e0 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
192f0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
19300 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67  _SELECT: 1st reg
19310 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20  ister of result 
19320 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61  vector */.  ynVa
19330 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
19340 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
19350 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
19360 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
19390 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
193a0 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
193b0 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20  = 1)..          
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
193d0 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55  * TK_SELECT_COLU
193e0 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  MN: column of th
193f0 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  e result vector 
19400 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20  */.  i16 iAgg;  
19410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
19420 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41  hich entry in pA
19430 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f  ggInfo->aCol[] o
19440 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20  r ->aFunc[] */. 
19450 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54   i16 iRightJoinT
19460 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50  able;   /* If EP
19470 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72  _FromJoin, the r
19480 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68  ight table of th
19490 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f  e join */.  u8 o
194a0 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p2;             
194b0 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45     /* TK_REGISTE
194c0 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75  R: original valu
194d0 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20  e of Expr.op.   
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55        ** TK_COLU
19500 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  MN: the value of
19510 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d   p5 for OP_Colum
19520 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
19530 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
19540 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e  _AGG_FUNCTION: n
19550 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a  esting depth */.
19560 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
19570 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64  nfo;     /* Used
19580 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d   by TK_AGG_COLUM
19590 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e  N and TK_AGG_FUN
195a0 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f 6e  CTION */.  union
195b0 20 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54   {.    Table *pT
195c0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
195d0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62 6c   TK_COLUMN: Tabl
195e0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f 6c  e containing col
195f0 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e 55 4c 4c  umn. Can be NULL
19600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19610 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
19620 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  or a column of a
19630 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78  n index on an ex
19640 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
19650 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20 20  Window *pWin;   
19660 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 46 55 4e         /* TK_FUN
19670 43 54 49 4f 4e 3a 20 57 69 6e 64 6f 77 20 64 65  CTION: Window de
19680 66 69 6e 69 74 69 6f 6e 20 66 6f 72 20 74 68 65  finition for the
19690 20 66 75 6e 63 20 2a 2f 0a 20 20 7d 20 79 3b 0a   func */.  } y;.
196a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
196b0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
196c0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
196d0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
196e0 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
196f0 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  fine EP_FromJoin
19700 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72    0x000001 /* Or
19710 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55  iginates in ON/U
19720 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f  SING clause of o
19730 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
19740 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
19750 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f    0x000002 /* Co
19760 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
19770 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
19780 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
19790 65 20 45 50 5f 48 61 73 46 75 6e 63 20 20 20 30  e EP_HasFunc   0
197a0 78 30 30 30 30 30 34 20 2f 2a 20 43 6f 6e 74 61  x000004 /* Conta
197b0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
197c0 66 75 6e 63 74 69 6f 6e 73 20 6f 66 20 61 6e 79  functions of any
197d0 20 6b 69 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65   kind */.#define
197e0 20 45 50 5f 46 69 78 65 64 43 6f 6c 20 20 30 78   EP_FixedCol  0x
197f0 30 30 30 30 30 38 20 2f 2a 20 54 4b 5f 43 6f 6c  000008 /* TK_Col
19800 75 6d 6e 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e  umn with a known
19810 20 66 69 78 65 64 20 76 61 6c 75 65 20 2a 2f 0a   fixed value */.
19820 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
19830 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
19840 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
19850 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
19860 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
19870 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
19880 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
19890 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
198a0 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
198b0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
198c0 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
198d0 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
198e0 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
198f0 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
19900 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
19910 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
19920 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
19930 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
19940 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
19950 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
19960 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
19970 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
19980 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
19990 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
199a0 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
199b0 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
199c0 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
199d0 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
199e0 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
199f0 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
19a00 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
19a10 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
19a20 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
19a30 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
19a40 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
19a50 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
19a60 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
19a70 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
19a80 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
19a90 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
19aa0 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
19ab0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
19ac0 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
19ad0 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
19ae0 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
19af0 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
19b00 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
19b10 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
19b20 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
19b30 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
19b40 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
19b50 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
19b60 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
19b70 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
19b80 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
19b90 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
19ba0 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
19bb0 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
19bc0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
19bd0 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
19be0 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
19bf0 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
19c00 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
19c10 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
19c20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
19c30 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
19c40 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
19c50 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
19c60 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
19c70 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
19c80 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53   0x080000 /* A S
19c90 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
19ca0 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20  ANT or _SLOCHNG 
19cb0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
19cc0 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c  ine EP_CanBeNull
19cd0 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e   0x100000 /* Can
19ce0 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65   be null despite
19cf0 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
19d00 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
19d10 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32  EP_Subquery  0x2
19d20 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00000 /* Tree co
19d30 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45  ntains a TK_SELE
19d40 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  CT operator */.#
19d50 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20  define EP_Alias 
19d60 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20      0x400000 /* 
19d70 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  Is an alias for 
19d80 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  a result set col
19d90 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  umn */.#define E
19da0 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38 30  P_Leaf      0x80
19db0 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65  0000 /* Expr.pLe
19dc0 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e  ft, .pRight, .u.
19dd0 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c  pSelect all NULL
19de0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 57   */.#define EP_W
19df0 69 6e 46 75 6e 63 20 20 30 78 31 30 30 30 30 30  inFunc  0x100000
19e00 30 20 2f 2a 20 54 4b 5f 46 55 4e 43 54 49 4f 4e  0 /* TK_FUNCTION
19e10 20 77 69 74 68 20 45 78 70 72 2e 79 2e 70 57 69   with Expr.y.pWi
19e20 6e 20 73 65 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  n set */../*.** 
19e30 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  The EP_Propagate
19e40 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20 6f   mask is a set o
19e50 66 20 70 72 6f 70 65 72 74 69 65 73 20 74 68 61  f properties tha
19e60 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  t automatically 
19e70 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70 77  propagate.** upw
19e80 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e 74  ards into parent
19e90 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69   nodes..*/.#defi
19ea0 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  ne EP_Propagate 
19eb0 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53  (EP_Collate|EP_S
19ec0 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46 75  ubquery|EP_HasFu
19ed0 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  nc)../*.** These
19ee0 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75   macros can be u
19ef0 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74  sed to test, set
19f00 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20  , or clear bits 
19f10 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
19f20 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
19f30 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72  define ExprHasPr
19f40 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
19f50 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
19f60 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78  )!=0).#define Ex
19f70 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79  prHasAllProperty
19f80 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c  (E,P)  (((E)->fl
19f90 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
19fa0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72  define ExprSetPr
19fb0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
19fc0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
19fd0 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61  #define ExprClea
19fe0 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  rProperty(E,P)  
19ff0 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50   (E)->flags&=~(P
1a000 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65  )../* The ExprSe
1a010 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d  tVVAProperty() m
1a020 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
1a030 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56   Verification, V
1a040 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e  alidation,.** an
1a050 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20  d Accreditation 
1a060 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20  only.  It works 
1a070 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70  like ExprSetProp
1a080 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56  erty() during VV
1a090 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62  A.** processes b
1a0a0 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f  ut is a no-op fo
1a0b0 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23  r delivery..*/.#
1a0c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1a0d0 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  UG.# define Expr
1a0e0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
1a0f0 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c  ,P)  (E)->flags|
1a100 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  =(P).#else.# def
1a110 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
1a120 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64  operty(E,P).#end
1a130 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
1a140 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
1a150 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
1a160 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20  s required by a 
1a170 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73  normal Expr.** s
1a180 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
1a190 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
1a1a0 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
1a1b0 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
1a1c0 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20  .** and an Expr 
1a1d0 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
1a1e0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
1a1f0 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  g set..*/.#defin
1a200 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20  e EXPR_FULLSIZE 
1a210 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
1a220 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20  (Expr)          
1a230 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f   /* Full size */
1a240 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45  .#define EXPR_RE
1a250 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20  DUCEDSIZE       
1a260 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69   offsetof(Expr,i
1a270 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f  Table)  /* Commo
1a280 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64  n features */.#d
1a290 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e  efine EXPR_TOKEN
1a2a0 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66  ONLYSIZE      of
1a2b0 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66  fsetof(Expr,pLef
1a2c0 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65  t)   /* Fewer fe
1a2d0 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  atures */../*.**
1a2e0 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
1a2f0 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72   the sqlite3Expr
1a300 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  Dup() function. 
1a310 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
1a320 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20  omment.** above 
1a330 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
1a340 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
1a350 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
1a360 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
1a370 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
1a380 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
1a390 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
1a3a0 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
1a3b0 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
1a3c0 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
1a3d0 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
1a3e0 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
1a3f0 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
1a400 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
1a410 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
1a420 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
1a430 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
1a440 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
1a450 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
1a460 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
1a470 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
1a480 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
1a490 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
1a4a0 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
1a4b0 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
1a4c0 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
1a4d0 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
1a4e0 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
1a4f0 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
1a500 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
1a510 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
1a520 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
1a530 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
1a540 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
1a550 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
1a560 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
1a570 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
1a580 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
1a590 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
1a5a0 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
1a5b0 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
1a5c0 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
1a5d0 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
1a5e0 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
1a5f0 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
1a600 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
1a610 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1a620 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
1a630 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
1a640 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
1a650 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
1a660 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
1a670 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
1a680 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
1a690 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
1a6a0 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
1a6b0 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
1a6c0 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
1a6d0 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
1a6e0 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
1a6f0 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
1a700 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
1a710 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
1a720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1a730 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
1a740 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
1a750 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
1a760 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
1a770 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
1a780 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
1a790 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
1a7a0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
1a7b0 2a 20 54 68 65 20 70 61 72 73 65 20 74 72 65 65  * The parse tree
1a7c0 20 66 6f 72 20 74 68 69 73 20 65 78 70 72 65 73   for this expres
1a7d0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
1a7e0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
1a7f0 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73      /* Token ass
1a800 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
1a810 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
1a820 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b      char *zSpan;
1a830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1a840 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
1a850 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  the expression *
1a860 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64  /.    u8 sortOrd
1a870 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
1a880 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30   1 for DESC or 0
1a890 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20   for ASC */.    
1a8a0 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31  unsigned done :1
1a8b0 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61  ;       /* A fla
1a8c0 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68  g to indicate wh
1a8d0 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  en processing is
1a8e0 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20   finished */.   
1a8f0 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49   unsigned bSpanI
1a900 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61  sTab :1; /* zSpa
1a910 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45  n holds DB.TABLE
1a920 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75  .COLUMN */.    u
1a930 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65  nsigned reusable
1a940 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61   :1;   /* Consta
1a950 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  nt expression is
1a960 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20   reusable */.   
1a970 20 75 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65   unsigned bSorte
1a980 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65  rRef :1; /* Defe
1a990 72 20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74  r evaluation unt
1a9a0 69 6c 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67  il after sorting
1a9b0 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
1a9c0 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20        struct {. 
1a9d0 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65         u16 iOrde
1a9e0 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20  rByCol;      /* 
1a9f0 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f  For ORDER BY, co
1aa00 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72  lumn number in r
1aa10 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20  esult set */.   
1aa20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b       u16 iAlias;
1aa30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1aa40 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61  dex into Parse.a
1aa50 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d  Alias[] for zNam
1aa60 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a  e */.      } x;.
1aa70 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74        int iConst
1aa80 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a  ExprReg;      /*
1aa90 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69   Register in whi
1aaa0 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73  ch Expr value is
1aab0 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d   cached */.    }
1aac0 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   u;.  } a[1];   
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1aae0 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65  * One slot for e
1aaf0 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
1ab00 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1ab10 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1ab20 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
1ab30 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
1ab40 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
1ab50 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
1ab60 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
1ab70 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
1ab80 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
1ab90 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
1aba0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
1abb0 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
1abc0 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
1abd0 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
1abe0 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
1abf0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
1ac00 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
1ac10 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
1ac20 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
1ac30 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
1ac40 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
1ac50 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
1ac60 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
1ac70 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
1ac80 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
1ac90 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
1aca0 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
1acb0 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
1acc0 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
1acd0 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
1ace0 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
1acf0 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
1ad00 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
1ad10 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
1ad20 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
1ad30 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
1ad40 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
1ad50 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
1ad60 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
1ad70 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
1ad80 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
1ad90 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1ada0 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
1adb0 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
1adc0 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
1add0 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
1ade0 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
1adf0 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
1ae00 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
1ae10 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
1ae20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1ae30 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73  ucture describes
1ae40 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1ae50 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
1ae60 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20  tement..** Each 
1ae70 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
1ae80 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
1ae90 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61  ause is a separa
1aea0 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a  te element of.**
1aeb0 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d   the SrcList.a[]
1aec0 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69   array..**.** Wi
1aed0 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  th the addition 
1aee0 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  of multiple data
1aef0 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68  base support, th
1af00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1af10 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73  cture.** can als
1af20 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73  o be used to des
1af30 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c  cribe a particul
1af40 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73  ar table such as
1af50 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a   the table that.
1af60 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62  ** is modified b
1af70 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  y an INSERT, DEL
1af80 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73  ETE, or UPDATE s
1af90 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74  tatement.  In st
1afa0 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73  andard SQL,.** s
1afb0 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74  uch a table must
1afc0 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d   be a simple nam
1afd0 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53  e: ID.  But in S
1afe0 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65  QLite, the table
1aff0 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69   can.** now be i
1b000 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64  dentified by a d
1b010 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20  atabase name, a 
1b020 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61  dot, then the ta
1b030 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e  ble name: ID.ID.
1b040 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74  .**.** The joint
1b050 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73  ype starts out s
1b060 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20  howing the join 
1b070 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65  type between the
1b080 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a   current table.*
1b090 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74  * and the next t
1b0a0 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74  able on the list
1b0b0 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75  .  The parser bu
1b0c0 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68  ilds the list th
1b0d0 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73  is way..** But s
1b0e0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
1b0f0 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74  ftJoinType() lat
1b100 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f  er shifts the jo
1b110 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20  intypes so that 
1b120 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65  each.** jointype
1b130 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a   expresses the j
1b140 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20  oin between the 
1b150 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
1b160 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a  evious table..**
1b170 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73  .** In the colUs
1b180 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69  ed field, the hi
1b190 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69  gh-order bit (bi
1b1a0 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20  t 63) is set if 
1b1b0 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e  the table.** con
1b1c0 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  tains more than 
1b1d0 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74  63 columns and t
1b1e0 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65  he 64-th or late
1b1f0 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  r column is used
1b200 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c  ..*/.struct SrcL
1b210 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63  ist {.  int nSrc
1b220 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1b230 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20  er of tables or 
1b240 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68  subqueries in th
1b250 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
1b260 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20  .  u32 nAlloc;  
1b270 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b280 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
1b290 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
1b2a0 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
1b2b0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
1b2c0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1b2d0 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
1b2e0 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
1b2f0 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
1b300 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
1b310 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
1b320 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
1b330 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1b340 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1b350 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
1b360 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
1b370 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
1b380 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
1b390 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
1b3a0 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
1b3b0 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
1b3c0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
1b3d0 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
1b3e0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1b3f0 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
1b400 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
1b410 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
1b420 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
1b430 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
1b440 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
1b450 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
1b460 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
1b470 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
1b480 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
1b490 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
1b4a0 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
1b4b0 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
1b4c0 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
1b4d0 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e  illSub */.    in
1b4e0 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
1b4f0 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c  /* Registers hol
1b500 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20  ding results of 
1b510 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
1b520 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
1b530 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20     u8 jointype; 
1b540 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20       /* Type of 
1b550 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69  join between thi
1b560 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  s table and the 
1b570 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
1b580 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e    unsigned notIn
1b590 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20  dexed :1;    /* 
1b5a0 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
1b5b0 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63   a NOT INDEXED c
1b5c0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
1b5d0 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65  nsigned isIndexe
1b5e0 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  dBy :1;   /* Tru
1b5f0 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  e if there is an
1b600 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
1b610 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  se */.      unsi
1b620 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a  gned isTabFunc :
1b630 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  1;     /* True i
1b640 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66  f table-valued-f
1b650 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a  unction syntax *
1b660 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1b670 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31   isCorrelated :1
1b680 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75  ;  /* True if su
1b690 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65  b-query is corre
1b6a0 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75  lated */.      u
1b6b0 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75  nsigned viaCorou
1b6c0 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70  tine :1;  /* Imp
1b6d0 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f  lemented as a co
1b6e0 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
1b6f0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63    unsigned isRec
1b700 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20  ursive :1;   /* 
1b710 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69  True for recursi
1b720 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20  ve reference in 
1b730 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67  WITH */.    } fg
1b740 3b 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f  ;.    int iCurso
1b750 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56  r;      /* The V
1b760 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
1b770 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
1b780 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
1b790 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20     Expr *pOn;   
1b7a0 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63       /* The ON c
1b7b0 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
1b7c0 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70  */.    IdList *p
1b7d0 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20  Using;   /* The 
1b7e0 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
1b7f0 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69  a join */.    Bi
1b800 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20  tmask colUsed;  
1b810 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20  /* Bit N (1<<N) 
1b820 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20  set if column N 
1b830 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20  of pTab is used 
1b840 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
1b850 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65       char *zInde
1b860 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65  xedBy;    /* Ide
1b870 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e  ntifier from "IN
1b880 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78  DEXED BY <zIndex
1b890 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  >" clause */.   
1b8a0 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75     ExprList *pFu
1b8b0 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d  ncArg;  /* Argum
1b8c0 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61  ents to table-va
1b8d0 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f  lued-function */
1b8e0 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49  .    } u1;.    I
1b8f0 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20  ndex *pIBIndex; 
1b900 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
1b910 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
1b920 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64  g to u1.zIndexed
1b930 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  By */.  } a[1]; 
1b940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1b950 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
1b960 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
1b970 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
1b980 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
1b990 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
1b9a0 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
1b9b0 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
1b9c0 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
1b9d0 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
1b9e0 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
1b9f0 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
1ba00 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
1ba10 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
1ba20 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
1ba30 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
1ba40 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
1ba50 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
1ba60 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
1ba70 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
1ba80 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1ba90 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
1baa0 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
1bab0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
1bac0 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
1bad0 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
1bae0 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
1baf0 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
1bb00 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
1bb10 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
1bb20 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
1bb30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
1bb40 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
1bb50 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
1bb60 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
1bb70 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
1bb80 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
1bb90 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
1bba0 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
1bbb0 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
1bbc0 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
1bbd0 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
1bbe0 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
1bbf0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1bc00 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
1bc10 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1bc20 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53  .**     WHERE_US
1bc30 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46  E_LIMIT  == SF_F
1bc40 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65  ixedLimit.*/.#de
1bc50 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1bc60 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30  BY_NORMAL   0x00
1bc70 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23  00 /* No-op */.#
1bc80 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1bc90 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78  ERBY_MIN      0x
1bca0 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59  0001 /* ORDER BY
1bcb0 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
1bcc0 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  min() func */.#d
1bcd0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1bce0 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30  RBY_MAX      0x0
1bcf0 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  002 /* ORDER BY 
1bd00 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
1bd10 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  ax() func */.#de
1bd20 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1bd30 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30  SS_DESIRED  0x00
1bd40 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f  04 /* Want to do
1bd50 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45   one-pass UPDATE
1bd60 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  /DELETE */.#defi
1bd70 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
1bd80 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38  _MULTIROW 0x0008
1bd90 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f   /* ONEPASS is o
1bda0 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  k with multiple 
1bdb0 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1bdc0 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
1bdd0 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a  _OK    0x0010 /*
1bde0 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
1bdf0 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
1be00 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
1be10 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45  ERE_OR_SUBCLAUSE
1be20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50       0x0020 /* P
1be30 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d  rocessing a sub-
1be40 57 48 45 52 45 20 61 73 20 70 61 72 74 20 6f 66  WHERE as part of
1be50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be70 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52         ** the OR
1be80 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a   optimization  *
1be90 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1bea0 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20  GROUPBY         
1beb0 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65   0x0040 /* pOrde
1bec0 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rBy is really a 
1bed0 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1bee0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1bef0 43 54 42 59 20 20 20 20 20 20 20 30 78 30 30 38  CTBY       0x008
1bf00 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73  0 /* pOrderby is
1bf10 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e   really a DISTIN
1bf20 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  CT clause */.#de
1bf30 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f  fine WHERE_WANT_
1bf40 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 31  DISTINCT    0x01
1bf50 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74  00 /* All output
1bf60 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73   needs to be dis
1bf70 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65  tinct */.#define
1bf80 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f   WHERE_SORTBYGRO
1bf90 55 50 20 20 20 20 20 20 30 78 30 32 30 30 20 2f  UP      0x0200 /
1bfa0 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65  * Support sqlite
1bfb0 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29  3WhereIsSorted()
1bfc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1bfd0 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20  E_SEEK_TABLE    
1bfe0 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20     0x0400 /* Do 
1bff0 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20  not defer seeks 
1c000 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f  on main table */
1c010 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1c020 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20  RDERBY_LIMIT    
1c030 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42  0x0800 /* ORDERB
1c040 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69  Y+LIMIT on the i
1c050 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65  nner loop */.#de
1c060 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f  fine WHERE_SEEK_
1c070 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30  UNIQ_TABLE  0x10
1c080 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66  00 /* Do not def
1c090 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71  er seeks if uniq
1c0a0 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ue */.          
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c0c0 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20 6e       0x2000    n
1c0d0 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1c0e0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
1c0f0 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20  RE_USE_LIMIT    
1c100 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73      0x4000 /* Us
1c110 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63  e the LIMIT in c
1c120 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f  ost estimates */
1c130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c140 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1c150 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x8000    not cu
1c160 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1c170 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
1c180 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
1c190 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
1c1a0 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
1c1b0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1c1c0 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
1c1d0 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
1c1e0 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
1c1f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1c200 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
1c210 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
1c220 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
1c230 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
1c240 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
1c250 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
1c260 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
1c270 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1c280 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
1c290 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
1c2a0 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
1c2b0 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
1c2c0 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
1c2d0 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
1c2e0 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
1c2f0 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
1c300 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
1c310 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
1c320 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
1c330 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
1c340 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
1c350 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
1c360 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
1c370 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
1c380 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
1c390 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
1c3a0 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
1c3b0 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
1c3c0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
1c3d0 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
1c3e0 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
1c3f0 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
1c400 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
1c410 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
1c420 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1c430 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
1c440 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
1c450 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
1c460 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
1c470 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
1c480 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
1c490 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
1c4a0 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
1c4b0 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e  nner-most.** con
1c4c0 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
1c4d0 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
1c4e0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1c4f0 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
1c500 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
1c510 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
1c520 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
1c530 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
1c540 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
1c550 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
1c560 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
1c570 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
1c580 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
1c590 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
1c5a0 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
1c5b0 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1c5c0 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
1c5d0 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
1c5e0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
1c5f0 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
1c600 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  ted..**.** Each 
1c610 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20  subquery gets a 
1c620 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e  new NameContext.
1c630 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c    The pNext fiel
1c640 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  d points to the.
1c650 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69  ** NameContext i
1c660 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65  n the parent que
1c670 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72  ry.  Thus the pr
1c680 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e  ocess of scannin
1c690 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  g the.** NameCon
1c6a0 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73  text list corres
1c6b0 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69  ponds to searchi
1c6c0 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65  ng through succe
1c6d0 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a  ssively outer.**
1c6e0 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b   subqueries look
1c6f0 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e  ing for a match.
1c700 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43  .*/.struct NameC
1c710 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65  ontext {.  Parse
1c720 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1c730 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f  /* The parser */
1c740 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
1c750 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  List;   /* One o
1c760 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73  r more tables us
1c770 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61  ed to resolve na
1c780 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  mes */.  union {
1c790 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
1c7a0 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74  EList;    /* Opt
1c7b0 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65  ional list of re
1c7c0 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73  sult-set columns
1c7d0 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f 20   */.    AggInfo 
1c7e0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20  *pAggInfo;   /* 
1c7f0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1c800 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20  t aggregates at 
1c810 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
1c820 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65 72    Upsert *pUpser
1c830 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e  t;     /* ON CON
1c840 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 66  FLICT clause inf
1c850 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e  ormation from an
1c860 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75   upsert */.  } u
1c870 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78  NC;.  NameContex
1c880 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
1c890 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
1c8a0 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
1c8b0 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
1c8c0 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
1c8d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1c8e0 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
1c8f0 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
1c900 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
1c910 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1c920 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
1c930 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
1c940 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1c950 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67   */.  u16 ncFlag
1c960 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  s;         /* Ze
1c970 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
1c980 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
1c990 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  low */.  Select 
1c9a0 2a 70 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f 2a  *pWinSelect;  /*
1c9b0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1c9c0 74 20 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77  t for any window
1c9d0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b   functions */.};
1c9e0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1c9f0 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e  values for the N
1ca00 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c  ameContext, ncFl
1ca10 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
1ca20 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1ca30 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20  ts (all checked 
1ca40 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
1ca50 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20  *    NC_HasAgg  
1ca60 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a    == SF_HasAgg.*
1ca70 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  *    NC_MinMaxAg
1ca80 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67  g == SF_MinMaxAg
1ca90 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43  g == SQLITE_FUNC
1caa0 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64  _MINMAX.**.*/.#d
1cab0 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67  efine NC_AllowAg
1cac0 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67  g  0x0001  /* Ag
1cad0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1cae0 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65  s are allowed he
1caf0 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  re */.#define NC
1cb00 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30 30  _PartIdx   0x000
1cb10 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  2  /* True if re
1cb20 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61  solving a partia
1cb30 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f  l index WHERE */
1cb40 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68  .#define NC_IsCh
1cb50 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a  eck   0x0004  /*
1cb60 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1cb70 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48  ng names in a CH
1cb80 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ECK constraint *
1cb90 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41  /.#define NC_InA
1cba0 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f  ggFunc 0x0008  /
1cbb0 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a  * True if analyz
1cbc0 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ing arguments to
1cbd0 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a   an agg func */.
1cbe0 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
1cbf0 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  g    0x0010  /* 
1cc00 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
1cc10 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1cc20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1cc30 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30  NC_IdxExpr   0x0
1cc40 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  020  /* True if 
1cc50 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e  resolving column
1cc60 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45  s of CREATE INDE
1cc70 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  X */.#define NC_
1cc80 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34 30  VarSelect 0x0040
1cc90 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65    /* A correlate
1cca0 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20 62  d subquery has b
1ccb0 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  een seen */.#def
1ccc0 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20 20 20  ine NC_UEList   
1ccd0 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65   0x0080  /* True
1cce0 20 69 66 20 75 4e 43 2e 70 45 4c 69 73 74 20 69   if uNC.pEList i
1ccf0 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  s used */.#defin
1cd00 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20 20 30  e NC_UAggInfo  0
1cd10 78 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20 69  x0100  /* True i
1cd20 66 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f 20 69  f uNC.pAggInfo i
1cd30 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  s used */.#defin
1cd40 65 20 4e 43 5f 55 55 70 73 65 72 74 20 20 20 30  e NC_UUpsert   0
1cd50 78 30 32 30 30 20 20 2f 2a 20 54 72 75 65 20 69  x0200  /* True i
1cd60 66 20 75 4e 43 2e 70 55 70 73 65 72 74 20 69 73  f uNC.pUpsert is
1cd70 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1cd80 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78   NC_MinMaxAgg 0x
1cd90 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78  1000  /* min/max
1cda0 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e   aggregates seen
1cdb0 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76  .  See note abov
1cdc0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
1cdd0 43 6f 6d 70 6c 65 78 20 20 20 30 78 32 30 30 30  Complex   0x2000
1cde0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 66    /* True if a f
1cdf0 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62 71 75  unction or subqu
1ce00 65 72 79 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ery seen */.#def
1ce10 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57 69 6e 20  ine NC_AllowWin 
1ce20 20 30 78 34 30 30 30 20 20 2f 2a 20 57 69 6e 64   0x4000  /* Wind
1ce30 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  ow functions are
1ce40 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1ce50 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1ce60 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1ce70 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65 73 63  wing object desc
1ce80 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65 20 4f  ribes a single O
1ce90 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c  N CONFLICT.** cl
1cea0 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73 65 72  ause in an upser
1ceb0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 55 70  t..**.** The pUp
1cec0 73 65 72 74 54 61 72 67 65 74 20 66 69 65 6c 64  sertTarget field
1ced0 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69 66 20   is only set if 
1cee0 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1cef0 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65 73 0a  clause includes.
1cf00 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67  ** conflict-targ
1cf10 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49 6e 20  et clause.  (In 
1cf20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61 2c 62  "ON CONFLICT(a,b
1cf30 29 22 20 74 68 65 20 22 28 61 2c 62 29 22 20 69  )" the "(a,b)" i
1cf40 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63  s the.** conflic
1cf50 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e  t-target clause.
1cf60 29 20 20 54 68 65 20 70 55 70 73 65 72 74 54 61  )  The pUpsertTa
1cf70 72 67 65 74 57 68 65 72 65 20 69 73 20 74 68 65  rgetWhere is the
1cf80 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45   optional.** WHE
1cf90 52 45 20 63 6c 61 75 73 65 20 75 73 65 64 20 74  RE clause used t
1cfa0 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72 74 69  o identify parti
1cfb0 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65 78 65  al unique indexe
1cfc0 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65 72 74  s..**.** pUpsert
1cfd0 53 65 74 20 69 73 20 74 68 65 20 6c 69 73 74 20  Set is the list 
1cfe0 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72 20 74  of column=expr t
1cff0 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50 44 41  erms of the UPDA
1d000 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 2a  TE statement. .*
1d010 2a 20 54 68 65 20 70 55 70 73 65 72 74 53 65 74  * The pUpsertSet
1d020 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c 20 66   field is NULL f
1d030 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  or a ON CONFLICT
1d040 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 54 68   DO NOTHING.  Th
1d050 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68 65 72  e.** pUpsertWher
1d060 65 20 69 73 20 74 68 65 20 57 48 45 52 45 20 63  e is the WHERE c
1d070 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 55 50  lause for the UP
1d080 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55 4c 4c  DATE and is NULL
1d090 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45 52 45   if the.** WHERE
1d0a0 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74   clause is omitt
1d0b0 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 70  ed..*/.struct Up
1d0c0 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  sert {.  ExprLis
1d0d0 74 20 2a 70 55 70 73 65 72 74 54 61 72 67 65 74  t *pUpsertTarget
1d0e0 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64  ;  /* Optional d
1d0f0 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 63 6f  escription of co
1d100 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 20  nflicting index 
1d110 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65  */.  Expr *pUpse
1d120 72 74 54 61 72 67 65 74 57 68 65 72 65 3b 20 2f  rtTargetWhere; /
1d130 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  * WHERE clause f
1d140 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78  or partial index
1d150 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20 45 78   targets */.  Ex
1d160 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53  prList *pUpsertS
1d170 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 53  et;     /* The S
1d180 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 61  ET clause from a
1d190 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50  n ON CONFLICT UP
1d1a0 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72 20 2a  DATE */.  Expr *
1d1b0 70 55 70 73 65 72 74 57 68 65 72 65 3b 20 20 20  pUpsertWhere;   
1d1c0 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
1d1d0 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  use for the ON C
1d1e0 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a  ONFLICT UPDATE *
1d1f0 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64  /.  /* The field
1d200 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69 73 65  s above comprise
1d210 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
1d220 66 6f 72 20 74 68 65 20 75 70 73 65 72 74 20 63  for the upsert c
1d230 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68 65 20  lause..  ** The 
1d240 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61 72 65  fields below are
1d250 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73 66 65   used to transfe
1d260 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  r information fr
1d270 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a 20 20  om the INSERT.  
1d280 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 64 6f  ** processing do
1d290 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50 44 41  wn into the UPDA
1d2a0 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20 77 68  TE processing wh
1d2b0 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67 20 63  ile generating c
1d2c0 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65 72 74  ode..  ** Upsert
1d2d0 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f 72 79   owns the memory
1d2e0 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f 76 65   allocated above
1d2f0 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20 6d 65  , but not the me
1d300 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20  mory below. */. 
1d310 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72 74 49   Index *pUpsertI
1d320 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  dx;        /* Co
1d330 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20 70 55  nstraint that pU
1d340 70 73 65 72 74 54 61 72 67 65 74 20 69 64 65 6e  psertTarget iden
1d350 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72 63 4c  tifies */.  SrcL
1d360 69 73 74 20 2a 70 55 70 73 65 72 74 53 72 63 3b  ist *pUpsertSrc;
1d370 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
1d380 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a 2f 0a  o be updated */.
1d390 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b 20 20    int regData;  
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1d3b0 69 72 73 74 20 72 65 67 69 73 74 65 72 20 68 6f  irst register ho
1d3c0 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66 20 56  lding array of V
1d3d0 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74 20 69  ALUES */.  int i
1d3e0 44 61 74 61 43 75 72 3b 20 20 20 20 20 20 20 20  DataCur;        
1d3f0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1d400 20 74 68 65 20 64 61 74 61 20 63 75 72 73 6f 72   the data cursor
1d410 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75   */.  int iIdxCu
1d420 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1d430 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1d440 66 69 72 73 74 20 69 6e 64 65 78 20 63 75 72 73  first index curs
1d450 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  or */.};../*.** 
1d460 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1d470 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1d480 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1d490 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
1d4a0 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
1d4b0 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
1d4c0 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
1d4d0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
1d4e0 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
1d4f0 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63 6f  omment on the co
1d500 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69 73 74  mputeLimitRegist
1d510 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20 66 6f  ers() routine fo
1d520 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65 64 20  r a.** detailed 
1d530 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74  description of t
1d540 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
1d550 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69 4f 66  e iLimit and iOf
1d560 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a  fset fields..**.
1d570 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  ** addrOpenEphm[
1d580 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69  ] entries contai
1d590 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  n the address of
1d5a0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d5b0 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68  l opcodes..** Th
1d5c0 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75  ese addresses mu
1d5d0 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20  st be stored so 
1d5e0 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62  that we can go b
1d5f0 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a  ack and fill in.
1d600 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46  ** the P4_KEYINF
1d610 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74  O and P2 paramet
1d620 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74  ers later.  Neit
1d630 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20  her the KeyInfo 
1d640 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  nor.** the numbe
1d650 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1d660 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74  P2 can be comput
1d670 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ed at the same t
1d680 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50  ime.** as the OP
1d690 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75  _OpenEphm instru
1d6a0 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62  ction is coded b
1d6b0 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e  ecause not.** en
1d6c0 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ough information
1d6d0 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f   about the compo
1d6e0 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f  und query is kno
1d6f0 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  wn at that point
1d700 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f  ..** The KeyInfo
1d710 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
1d720 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e  n[0] and [1] con
1d730 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20  tains collating 
1d740 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72  sequences.** for
1d750 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1d760 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f    The KeyInfo fo
1d770 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  r addrOpenEphm[2
1d780 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
1d790 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
1d7a0 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20  s for the ORDER 
1d7b0 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  BY clause..*/.st
1d7c0 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20  ruct Select {.  
1d7d0 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
1d7e0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  ;      /* The fi
1d7f0 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75  elds of the resu
1d800 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  lt */.  u8 op;  
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d820 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49  * One of: TK_UNI
1d830 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54  ON TK_ALL TK_INT
1d840 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54  ERSECT TK_EXCEPT
1d850 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65   */.  LogEst nSe
1d860 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20  lectRow;     /* 
1d870 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
1d880 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
1d890 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67  */.  u32 selFlag
1d8a0 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
1d8b0 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
1d8c0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
1d8d0 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
1d8e0 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1d8f0 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
1d900 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
1d910 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 49  rs */.  u32 selI
1d920 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
1d930 2a 20 55 6e 69 71 75 65 20 69 64 65 6e 74 69 66  * Unique identif
1d940 69 65 72 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ier number for t
1d950 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  his SELECT */.  
1d960 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  int addrOpenEphm
1d970 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  [2];   /* OP_Ope
1d980 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72  nEphem opcodes r
1d990 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73  elated to this s
1d9a0 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69  elect */.  SrcLi
1d9b0 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20  st *pSrc;       
1d9c0 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c    /* The FROM cl
1d9d0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1d9e0 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20  pWhere;         
1d9f0 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
1da00 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1da10 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
1da20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59   /* The GROUP BY
1da30 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1da40 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20  r *pHaving;     
1da50 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e      /* The HAVIN
1da60 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  G clause */.  Ex
1da70 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
1da80 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45  ;    /* The ORDE
1da90 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  R BY clause */. 
1daa0 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b   Select *pPrior;
1dab0 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72          /* Prior
1dac0 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
1dad0 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
1dae0 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65  tement */.  Sele
1daf0 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ct *pNext;      
1db00 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63     /* Next selec
1db10 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e  t to the left in
1db20 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20   a compound */. 
1db30 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20   Expr *pLimit;  
1db40 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54          /* LIMIT
1db50 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
1db60 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
1db70 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
1db80 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
1db90 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
1dba0 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
1dbb0 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
1dbc0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1dbd0 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43  _OMIT_WINDOWFUNC
1dbe0 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b  .  Window *pWin;
1dbf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
1dc00 74 20 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e 63  t of window func
1dc10 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e 64 6f  tions */.  Windo
1dc20 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20 20 20  w *pWinDefn;    
1dc30 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e 61 6d    /* List of nam
1dc40 65 64 20 77 69 6e 64 6f 77 20 64 65 66 69 6e 69  ed window defini
1dc50 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
1dc60 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1dc70 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
1dc80 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
1dc90 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
1dca0 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
1dcb0 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a  lect Flag"..**.*
1dcc0 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1dcd0 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1dce0 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a   via assert()).*
1dcf0 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67 20  *     SF_HasAgg 
1dd00 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67      == NC_HasAgg
1dd10 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61  .**     SF_MinMa
1dd20 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d  xAgg  == NC_MinM
1dd30 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c  axAgg     == SQL
1dd40 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1dd50 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c  **     SF_FixedL
1dd60 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53  imit == WHERE_US
1dd70 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69  E_LIMIT.*/.#defi
1dd80 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
1dd90 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a       0x00001  /*
1dda0 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
1ddb0 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
1ddc0 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20  efine SF_All    
1ddd0 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32 20          0x00002 
1dde0 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65   /* Includes the
1ddf0 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a   ALL keyword */.
1de00 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c  #define SF_Resol
1de10 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30 30  ved       0x0000
1de20 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  4  /* Identifier
1de30 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
1de40 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lved */.#define 
1de50 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20  SF_Aggregate    
1de60 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f    0x00008  /* Co
1de70 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74  ntains agg funct
1de80 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20  ions or a GROUP 
1de90 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  BY */.#define SF
1dea0 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20 20  _HasAgg         
1deb0 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74  0x00010  /* Cont
1dec0 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
1ded0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1dee0 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
1def0 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f  eral  0x00020  /
1df00 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
1df10 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
1df20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
1df30 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30  panded       0x0
1df40 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0040  /* sqlite3
1df50 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
1df60 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
1df70 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
1df80 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30  ypeInfo    0x000
1df90 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  80  /* FROM subq
1dfa0 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
1dfb0 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
1dfc0 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
1dfd0 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30 20  d       0x00100 
1dfe0 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
1dff0 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
1e000 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
1e010 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32 30  s         0x0020
1e020 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
1e030 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
1e040 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1e050 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
1e060 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69    0x00400  /* Si
1e070 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
1e080 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1e090 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
1e0a0 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
1e0b0 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72   0x00800  /* Par
1e0c0 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
1e0d0 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
1e0e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1e0f0 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78  inMaxAgg      0x
1e100 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  01000  /* Aggreg
1e110 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
1e120 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
1e130 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
1e140 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30  rsive      0x020
1e150 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
1e160 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
1e170 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
1e180 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64  #define SF_Fixed
1e190 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30  Limit     0x0400
1e1a0 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77  0  /* nSelectRow
1e1b0 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61   set by a consta
1e1c0 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66  nt LIMIT */.#def
1e1d0 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
1e1e0 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20 2f  ert   0x08000  /
1e1f0 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
1e200 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1e210 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1e220 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64  ine SF_Converted
1e230 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20 2f        0x10000  /
1e240 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70  * By convertComp
1e250 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1e260 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1e270 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64  e SF_IncludeHidd
1e280 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20  en  0x20000  /* 
1e290 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63  Include hidden c
1e2a0 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74  olumns in output
1e2b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1e2c0 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30 78  omplexResult  0x
1e2d0 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c 74  40000  /* Result
1e2e0 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75 65   contains subque
1e2f0 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  ry or function *
1e300 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  /../*.** The res
1e310 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54  ults of a SELECT
1e320 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
1e330 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
1e340 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a  ays, as defined.
1e350 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ** by one of the
1e360 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1e370 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72  s.  The "SRT" pr
1e380 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45  efix means "SELE
1e390 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70  CT Result.** Typ
1e3a0 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  e"..**.**     SR
1e3b0 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74  T_Union       St
1e3c0 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61  ore results as a
1e3d0 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72   key in a tempor
1e3e0 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20  ary index.**    
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e400 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70   identified by p
1e410 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1e420 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63  *.**     SRT_Exc
1e430 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20  ept      Remove 
1e440 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65  results from the
1e450 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
1e460 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1e470 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1e480 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65  xists      Store
1e490 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63   a 1 in memory c
1e4a0 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ell pDest->iSDPa
1e4b0 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  rm if the result
1e4c0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e4d0 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e          set is n
1e4e0 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  ot empty..**.** 
1e4f0 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20      SRT_Discard 
1e500 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65      Throw the re
1e510 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69  sults away.  Thi
1e520 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c  s is used by SEL
1e530 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ECT.**          
1e540 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
1e550 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
1e560 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79  ggers whose only
1e570 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20   purpose is.**  
1e580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e590 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65     the side-effe
1e5a0 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73  cts of functions
1e5b0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
1e5c0 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65  he above are fre
1e5d0 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69  e to ignore thei
1e5e0 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  r ORDER BY claus
1e5f0 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a  e. Those that.**
1e600 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e   follow must hon
1e610 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1e620 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1e630 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20    SRT_Output    
1e640 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77    Generate a row
1e650 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e   of output (usin
1e660 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52  g the OP_ResultR
1e670 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1e680 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65            opcode
1e690 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  ) for each row i
1e6a0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
1e6b0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e6c0 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79  Mem         Only
1e6d0 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65   valid if the re
1e6e0 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65  sult is a single
1e6f0 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20   column..**     
1e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e710 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  Store the first 
1e720 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69  column of the fi
1e730 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a  rst result row.*
1e740 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e750 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65        in registe
1e760 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1e770 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68   then abandon th
1e780 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20  e rest.**       
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1e7a0 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69   the query.  Thi
1e7b0 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d  s destination im
1e7c0 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e  plies "LIMIT 1".
1e7d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53  .**.**     SRT_S
1e7e0 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72  et         The r
1e7f0 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20  esult must be a 
1e800 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20  single column.  
1e810 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20  Store each.**   
1e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e830 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20    row of result 
1e840 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61  as the key in ta
1e850 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1e860 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  rm..**          
1e870 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79             Apply
1e880 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44   the affinity pD
1e890 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66  est->affSdst bef
1e8a0 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20  ore storing.**  
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8c0 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65     results.  Use
1e8d0 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22  d to implement "
1e8e0 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22  IN (SELECT ...)"
1e8f0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e900 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61  EphemTab    Crea
1e910 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20  te an temporary 
1e920 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1e930 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a  Parm and store.*
1e940 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1e950 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74        the result
1e960 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73   there. The curs
1e970 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20  or is left open 
1e980 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20  after.**        
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1e9a0 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73  urning.  This is
1e9b0 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
1e9c0 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20  except that.**  
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9e0 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74     this destinat
1e9f0 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e  ion uses OP_Open
1ea00 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65  Ephemeral to cre
1ea10 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ate.**          
1ea20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74             the t
1ea30 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a  able first..**.*
1ea40 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74  *     SRT_Corout
1ea50 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61  ine   Generate a
1ea60 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74   co-routine that
1ea70 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72   returns a new r
1ea80 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20  ow of.**        
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
1eaa0 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69  ults each time i
1eab0 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54  t is invoked.  T
1eac0 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a  he entry point.*
1ead0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1eae0 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d        of the co-
1eaf0 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65  routine is store
1eb00 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44  d in register pD
1eb10 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20  est->iSDParm.** 
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb30 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75      and the resu
1eb40 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64  lt row is stored
1eb50 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74   in pDest->nDest
1eb60 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20   registers.**   
1eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb80 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20    starting with 
1eb90 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a  pDest->iSdst..**
1eba0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c  .**     SRT_Tabl
1ebb0 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1ebc0 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61  sults in tempora
1ebd0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1ebe0 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1ebf0 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1ec00 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
1ec10 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74  _EphemTab except
1ec20 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a   that the table.
1ec30 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ec40 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65         is assume
1ec50 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20  d to already be 
1ec60 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20  open.  SRT_Fifo 
1ec70 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  has.**          
1ec80 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61             the a
1ec90 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72  dditional proper
1eca0 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65  ty of being able
1ecb0 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20   to ignore.**   
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecd0 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63    the ORDER BY c
1ece0 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  lause..**.**    
1ecf0 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20   SRT_DistFifo   
1ed00 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1ed10 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61  n a temporary ta
1ed20 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1ed30 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  rm..**          
1ed40 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61             But a
1ed50 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72  lso use temporar
1ed60 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1ed70 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20  SDParm+1 as.**  
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed90 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61     a record of a
1eda0 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73  ll prior results
1edb0 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20   and ignore any 
1edc0 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20  duplicate.**    
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ede0 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61   rows.  Name mea
1edf0 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46  ns:  "Distinct F
1ee00 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ifo"..**.**     
1ee10 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20  SRT_Queue       
1ee20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1ee30 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
1ee40 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28  pDest->iSDParm (
1ee50 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20  really.**       
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
1ee70 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64   index).  Append
1ee80 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62   a sequence numb
1ee90 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65  er so that all e
1eea0 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20  ntries.**       
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1eec0 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a  e distinct..**.*
1eed0 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75  *     SRT_DistQu
1eee0 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75  eue   Store resu
1eef0 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
1ef00 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
1ef10 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20  Parm only if.** 
1ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef30 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63      the same rec
1ef40 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65  ord has never be
1ef50 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65  en stored before
1ef60 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20  .  The.**       
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1ef80 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53  dex at pDest->iS
1ef90 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c  DParm+1 hold all
1efa0 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a   prior stores..*
1efb0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e  /.#define SRT_Un
1efc0 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a  ion        1  /*
1efd0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1efe0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
1eff0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1f000 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20  _Except       2 
1f010 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c   /* Remove resul
1f020 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69  t from a UNION i
1f030 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1f040 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
1f050 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69   3  /* Store 1 i
1f060 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1f070 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65  not empty */.#de
1f080 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64  fine SRT_Discard
1f090 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e        4  /* Do n
1f0a0 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75  ot save the resu
1f0b0 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a  lts anywhere */.
1f0c0 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f  #define SRT_Fifo
1f0d0 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53           5  /* S
1f0e0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64  tore result as d
1f0f0 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ata with an auto
1f100 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23  matic rowid */.#
1f110 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46  define SRT_DistF
1f120 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69  ifo     6  /* Li
1f130 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74  ke SRT_Fifo, but
1f140 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
1f150 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1f160 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20  SRT_Queue       
1f170 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   7  /* Store res
1f180 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20  ult in an queue 
1f190 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1f1a0 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f  istQueue    8  /
1f1b0 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65  * Like SRT_Queue
1f1c0 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
1f1d0 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a  ults only */../*
1f1e0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
1f1f0 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20  ause is ignored 
1f200 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61  for all of the a
1f210 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
1f220 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79  IgnorableOrderby
1f230 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c  (X) ((X->eDest)<
1f240 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a  =SRT_DistQueue).
1f250 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74  .#define SRT_Out
1f260 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20  put       9  /* 
1f270 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20  Output each row 
1f280 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
1f290 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20  fine SRT_Mem    
1f2a0 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72       10  /* Stor
1f2b0 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65  e result in a me
1f2c0 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65  mory cell */.#de
1f2d0 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20  fine SRT_Set    
1f2e0 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72       11  /* Stor
1f2f0 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79  e results as key
1f300 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
1f310 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68  .#define SRT_Eph
1f320 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20  emTab    12  /* 
1f330 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74  Create transient
1f340 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c   tab and store l
1f350 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f  ike SRT_Table */
1f360 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72  .#define SRT_Cor
1f370 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20  outine   13  /* 
1f380 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c  Generate a singl
1f390 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  e row of result 
1f3a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54  */.#define SRT_T
1f3b0 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f  able       14  /
1f3c0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1f3d0 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
1f3e0 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
1f3f0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1f400 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
1f410 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68  ect describes wh
1f420 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68  ere to put of th
1f430 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20  e results of.** 
1f440 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1f450 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  nt..*/.struct Se
1f460 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20  lectDest {.  u8 
1f470 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20  eDest;          
1f480 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70    /* How to disp
1f490 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ose of the resul
1f4a0 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a  ts.  On of SRT_*
1f4b0 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74   above. */.  int
1f4c0 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20   iSDParm;       
1f4d0 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
1f4e0 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
1f4f0 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
1f500 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
1f510 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1f520 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
1f530 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
1f540 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
1f550 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   nSdst;         
1f560 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
1f570 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
1f580 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  ed */.  char *zA
1f590 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20  ffSdst;      /* 
1f5a0 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
1f5b0 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
1f5c0 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  t */.  ExprList 
1f5d0 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b  *pOrderBy;  /* K
1f5e0 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53  ey columns for S
1f5f0 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54  RT_Queue and SRT
1f600 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b  _DistQueue */.};
1f610 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63  ../*.** During c
1f620 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  ode generation o
1f630 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  f statements tha
1f640 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74  t do inserts int
1f650 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  o AUTOINCREMENT.
1f660 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66  ** tables, the f
1f670 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61  ollowing informa
1f680 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64  tion is attached
1f690 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e   to the Table.u.
1f6a0 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69  autoInc.p.** poi
1f6b0 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74  nter of each aut
1f6c0 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65  oincrement table
1f6d0 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20   to record some 
1f6e0 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  side information
1f6f0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64   that.** the cod
1f700 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64  e generator need
1f710 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b  s.  We have to k
1f720 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75  eep per-table au
1f730 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69  toincrement.** i
1f740 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61  nformation in ca
1f750 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64  se inserts are d
1f760 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67 67  one within trigg
1f770 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64  ers.  Triggers d
1f780 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c  o not.** normall
1f790 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  y coordinate the
1f7a0 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62  ir activities, b
1f7b0 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f  ut we do need to
1f7c0 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a   coordinate the.
1f7d0 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73  ** loading and s
1f7e0 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63  aving of autoinc
1f7f0 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69  rement informati
1f800 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  on..*/.struct Au
1f810 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75  toincInfo {.  Au
1f820 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74  toincInfo *pNext
1f830 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f  ;   /* Next info
1f840 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74   block in a list
1f850 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a   of them all */.
1f860 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1f870 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1f880 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b   this info block
1f890 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20   refers to */.  
1f8a0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1f8b0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
1f8c0 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
1f8d0 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1f8e0 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e  ing pTab */.  in
1f8f0 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20  t regCtr;       
1f900 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65      /* Memory re
1f910 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74  gister holding t
1f920 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72  he rowid counter
1f930 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74   */.};../*.** At
1f940 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
1f950 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1f960 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
1f970 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
1f980 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  ch.** trigger th
1f990 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
1f9a0 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
1f9b0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1f9c0 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
1f9d0 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
1f9e0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
1f9f0 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
1fa00 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
1fa10 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
1fa20 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
1fa30 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
1fa40 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
1fa50 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
1fa60 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
1fa70 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
1fa80 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
1fa90 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
1faa0 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
1fab0 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
1fac0 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
1fad0 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
1fae0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
1faf0 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
1fb00 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
1fb10 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
1fb20 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
1fb30 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
1fb40 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1fb50 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
1fb60 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
1fb70 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
1fb80 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
1fb90 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
1fba0 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
1fbb0 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1fbc0 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
1fbd0 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
1fbe0 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1fbf0 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
1fc00 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
1fc10 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
1fc20 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
1fc30 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ERT.** statement
1fc40 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
1fc50 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1fc60 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
1fc70 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
1fc80 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
1fc90 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
1fca0 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
1fcb0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
1fcc0 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
1fcd0 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
1fce0 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
1fcf0 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
1fd00 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
1fd10 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
1fd20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
1fd30 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
1fd40 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
1fd50 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
1fd60 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
1fd70 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
1fd80 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
1fd90 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1fdb0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1fdc0 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
1fdd0 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
1fde0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
1fdf0 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
1fe00 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
1fe10 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1fe20 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
1fe30 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
1fe40 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
1fe50 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1fe60 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
1fe70 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
1fe80 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
1fe90 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c  har yDbMask[(SQL
1fea0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1feb0 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65  +9)/8];.# define
1fec0 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1fed0 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d      (((M)[(I)/8]
1fee0 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d  &(1<<((I)&7)))!=
1fef0 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1ff00 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d  skZero(M)      m
1ff10 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65  emset((M),0,size
1ff20 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20  of(M)).# define 
1ff30 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1ff40 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28     (M)[(I)/8]|=(
1ff50 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65  1<<((I)&7)).# de
1ff60 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1ff70 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44  ro(M)   sqlite3D
1ff80 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a  bMaskAllZero(M).
1ff90 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1ffa0 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c  onZero(M)   (sql
1ffb0 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1ffc0 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20  o(M)==0).#else. 
1ffd0 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1ffe0 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
1fff0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
20000 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
20010 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  &(((yDbMask)1)<<
20020 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  (I)))!=0).# defi
20030 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
20040 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65        (M)=0.# de
20050 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
20060 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28  ,I)     (M)|=(((
20070 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
20080 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20090 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  AllZero(M)   (M)
200a0 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  ==0.# define DbM
200b0 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
200c0 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f  (M)!=0.#endif../
200d0 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
200e0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
200f0 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
20100 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
20110 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
20120 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
20130 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
20140 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
20150 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
20160 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
20170 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
20180 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
20190 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
201a0 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
201b0 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
201c0 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
201d0 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
201e0 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
201f0 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
20200 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
20210 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
20220 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
20230 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
20240 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
20250 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
20260 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
20270 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
20280 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
20290 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
202a0 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
202b0 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
202c0 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
202d0 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65  ared-cache.** fe
202e0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
202f0 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
20300 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
20310 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
20320 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
20330 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
20340 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
20350 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
20360 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
20370 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
20380 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
20390 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
203a0 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
203b0 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
203c0 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
203d0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
203e0 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
203f0 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
20400 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
20410 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
20420 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
20430 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
20440 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
20450 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
20460 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
20470 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
20480 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
20490 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
204a0 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
204b0 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
204c0 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
204d0 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
204e0 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
204f0 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
20500 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
20510 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
20520 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
20530 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
20540 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
20550 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
20560 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
20570 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
20580 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
20590 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
205a0 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
205b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
205c0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
205d0 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
205e0 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
205f0 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
20600 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
20610 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
20620 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
20630 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
20640 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
20650 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
20660 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
20670 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
20680 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
20690 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
206a0 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
206b0 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
206c0 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
206d0 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
206e0 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
206f0 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
20700 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
20710 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e  eLookaside; /* N
20720 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c  umber of times l
20730 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65  ookaside has bee
20740 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20  n disabled */.  
20750 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
20760 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
20770 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
20780 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
20790 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
207a0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
207b0 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
207c0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
207d0 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
207e0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
207f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
20800 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
20810 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
20820 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
20830 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
20840 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
20850 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
20860 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20870 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
20880 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
20890 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c   */.  int nOpAll
208a0 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  oc;        /* Nu
208b0 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c  mber of slots al
208c0 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
208d0 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
208e0 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20  szOpAlloc;      
208f0 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d   /* Bytes of mem
20900 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61  ory space alloca
20910 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
20920 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c  [] */.  int iSel
20930 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  fTab;        /* 
20940 54 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64  Table associated
20950 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20 6f   with an index o
20960 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65 67 61 74  n expr, or negat
20970 69 76 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  ive.            
20980 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 66             ** of
20990 20 74 68 65 20 62 61 73 65 20 72 65 67 69 73 74   the base regist
209a0 65 72 20 64 75 72 69 6e 67 20 63 68 65 63 6b 2d  er during check-
209b0 63 6f 6e 73 74 72 61 69 6e 74 20 65 76 61 6c 20  constraint eval 
209c0 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b  */.  int nLabel;
209d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
209e0 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
209f0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  ed */.  int *aLa
20a00 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
20a10 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
20a20 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78  e labels */.  Ex
20a30 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
20a40 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
20a50 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
20a60 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
20a70 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
20a80 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
20a90 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
20aa0 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
20ab0 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
20ac0 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
20ad0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
20ae0 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
20af0 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
20b00 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
20b10 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
20b20 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
20b30 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  s */.  int regRo
20b40 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
20b50 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
20b60 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
20b70 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
20b80 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
20b90 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
20ba0 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
20bb0 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
20bc0 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
20bd0 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
20be0 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
20bf0 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
20c00 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
20c10 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
20c20 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20   nSelect;       
20c30 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53    /* Number of S
20c40 45 4c 45 43 54 20 73 74 6d 74 73 2e 20 43 6f 75  ELECT stmts. Cou
20c50 6e 74 65 72 20 66 6f 72 20 53 65 6c 65 63 74 2e  nter for Select.
20c60 73 65 6c 49 64 20 2a 2f 0a 23 69 66 6e 64 65 66  selId */.#ifndef
20c70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
20c80 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
20c90 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
20ca0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20cb0 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
20cc0 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
20cd0 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
20ce0 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
20cf0 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
20d00 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
20d10 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
20d20 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
20d30 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
20d40 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
20d50 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
20d60 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
20d70 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
20d80 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
20d90 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
20da0 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
20db0 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
20dc0 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
20dd0 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
20de0 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  or */.  int addr
20df0 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20  CrTab;       /* 
20e00 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72  Address of OP_Cr
20e10 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65  eateBtree opcode
20e20 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   on CREATE TABLE
20e30 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79   */.  u32 nQuery
20e40 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73  Loop;      /* Es
20e50 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72  t number of iter
20e60 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72  ations of a quer
20e70 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a  y (10*log2(N)) *
20e80 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b  /.  u32 oldmask;
20e90 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
20ea0 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
20eb0 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
20ec0 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20    u32 newmask;  
20ed0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
20ee0 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
20ef0 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
20f00 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20  u8 eTriggerOp;  
20f10 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54       /* TK_UPDAT
20f20 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20  E, TK_INSERT or 
20f30 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75  TK_DELETE */.  u
20f40 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20  8 eOrconf;      
20f50 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
20f60 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
20f70 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74  y for trigger st
20f80 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  eps */.  u8 disa
20f90 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a  bleTriggers;  /*
20fa0 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65   True to disable
20fb0 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20   triggers */..  
20fc0 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
20fd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20fe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20ff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
21010 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75   Fields above mu
21020 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  st be initialize
21030 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20  d to zero.  The 
21040 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c  fields that foll
21050 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f  ow,.  ** down to
21060 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
21070 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  f the recursive 
21080 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20  section, do not 
21090 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20  need to be.  ** 
210a0 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74  initialized as t
210b0 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20  hey will be set 
210c0 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65  before being use
210d0 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  d.  The boundary
210e0 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69   is.  ** determi
210f0 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28  ned by offsetof(
21100 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29 2e  Parse,aTempReg).
21110 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
21120 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21130 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
21160 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
21170 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c  ];        /* Hol
21180 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
21190 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
211a0 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
211b0 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  meToken;       /
211c0 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
211d0 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
211e0 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a  object name */..
211f0 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
21200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
21240 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
21250 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
21260 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
21270 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
21280 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
21290 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
212a0 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
212b0 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
212c0 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
212d0 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
212e0 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
212f0 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20  stToken) so the 
21300 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64  sLastToken field
21310 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a   must be the.  *
21320 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e  * first field in
21330 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
21340 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
21350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21390 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73  */..  Token sLas
213a0 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  tToken;       /*
213b0 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
213c0 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61  parsed */.  ynVa
213d0 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  r nVar;         
213e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
213f0 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
21400 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
21410 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
21420 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
21430 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
21440 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
21450 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
21460 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
21470 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21480 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
21490 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
214a0 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
214b0 2f 0a 23 69 66 20 21 28 64 65 66 69 6e 65 64 28  /.#if !(defined(
214c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
214d0 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66  UALTABLE) && def
214e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
214f0 5f 41 4c 54 45 52 54 41 42 4c 45 29 29 0a 20 20  _ALTERTABLE)).  
21500 75 38 20 65 50 61 72 73 65 4d 6f 64 65 3b 20 20  u8 eParseMode;  
21510 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 41 52            /* PAR
21520 53 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73  SE_MODE_XXX cons
21530 74 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tant */.#endif.#
21540 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21550 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
21560 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
21570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21580 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
21590 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
215a0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
215b0 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
215c0 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
215d0 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20  ion tree height 
215e0 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73  of current sub-s
215f0 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66  elect */.#ifndef
21600 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
21610 4c 41 49 4e 0a 20 20 69 6e 74 20 61 64 64 72 45  LAIN.  int addrE
21620 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
21630 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 63   /* Address of c
21640 75 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69  urrent OP_Explai
21650 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  n opcode */.#end
21660 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69  if.  VList *pVLi
21670 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
21680 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65  * Mapping betwee
21690 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73  n variable names
216a0 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a   and numbers */.
216b0 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61    Vdbe *pReprepa
216c0 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56  re;         /* V
216d0 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72  M being reprepar
216e0 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65  ed (sqlite3Repre
216f0 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e  pare()) */.  con
21700 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20  st char *zTail; 
21710 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51         /* All SQ
21720 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
21730 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
21740 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
21750 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
21760 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20       /* A table 
21770 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
21780 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c  d by CREATE TABL
21790 45 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  E */.  Index *pN
217a0 65 77 49 6e 64 65 78 3b 20 20 20 20 20 20 20 20  ewIndex;        
217b0 20 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62 65 69   /* An index bei
217c0 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
217d0 79 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  y CREATE INDEX *
217e0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
217f0 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
21800 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
21810 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
21820 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
21830 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
21840 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
21850 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
21860 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
21870 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64  llbacks */.#ifnd
21880 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
21890 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f  IRTUALTABLE.  To
218a0 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20  ken sArg;       
218b0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
218c0 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f  ete text of a mo
218d0 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f  dule argument */
218e0 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61  .  Table **apVta
218f0 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20  bLock;       /* 
21900 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75  Pointer to virtu
21910 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e  al tables needin
21920 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e  g locking */.#en
21930 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f  dif.  Table *pZo
21940 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20  mbieTab;        
21950 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65  /* List of Table
21960 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65   objects to dele
21970 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65  te after code ge
21980 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  n */.  TriggerPr
21990 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20  g *pTriggerPrg; 
219a0 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
219b0 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72  of coded trigger
219c0 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  s */.  With *pWi
219d0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
219e0 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48   /* Current WITH
219f0 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
21a00 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
21a10 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20  hToFree;        
21a20 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54  /* Free this WIT
21a30 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20  H object at the 
21a40 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65  end of the parse
21a50 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
21a60 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
21a70 4c 45 0a 20 20 52 65 6e 61 6d 65 54 6f 6b 65 6e  LE.  RenameToken
21a80 20 2a 70 52 65 6e 61 6d 65 3b 20 20 20 20 20 2f   *pRename;     /
21a90 2a 20 54 6f 6b 65 6e 73 20 73 75 62 6a 65 63 74  * Tokens subject
21aa0 20 74 6f 20 72 65 6e 61 6d 69 6e 67 20 62 79 20   to renaming by 
21ab0 41 4c 54 45 52 20 54 41 42 4c 45 20 2a 2f 0a 23  ALTER TABLE */.#
21ac0 65 6e 64 69 66 0a 7d 3b 0a 0a 23 64 65 66 69 6e  endif.};..#defin
21ad0 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f 52  e PARSE_MODE_NOR
21ae0 4d 41 4c 20 20 20 20 20 20 20 20 30 0a 23 64 65  MAL        0.#de
21af0 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44 45 5f  fine PARSE_MODE_
21b00 44 45 43 4c 41 52 45 5f 56 54 41 42 20 20 31 0a  DECLARE_VTAB  1.
21b10 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f  #define PARSE_MO
21b20 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e  DE_RENAME_COLUMN
21b30 20 32 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45   2.#define PARSE
21b40 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 54 41 42  _MODE_RENAME_TAB
21b50 4c 45 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  LE  3../*.** Siz
21b60 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20  es and pointers 
21b70 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72 74 73  of various parts
21b80 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f 62   of the Parse ob
21b90 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ject..*/.#define
21ba0 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66   PARSE_HDR_SZ of
21bb0 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65  fsetof(Parse,aTe
21bc0 6d 70 52 65 67 29 20 2f 2a 20 52 65 63 75 72 73  mpReg) /* Recurs
21bd0 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43 6f  ive part w/o aCo
21be0 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65  lCache*/.#define
21bf0 20 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53   PARSE_RECURSE_S
21c00 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  Z offsetof(Parse
21c10 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20 20  ,sLastToken)    
21c20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72  /* Recursive par
21c30 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  t */.#define PAR
21c40 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65  SE_TAIL_SZ (size
21c50 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53 45 5f  of(Parse)-PARSE_
21c60 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e  RECURSE_SZ) /* N
21c70 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61 72  on-recursive par
21c80 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  t */.#define PAR
21c90 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63 68  SE_TAIL(X) (((ch
21ca0 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f 52  ar*)(X))+PARSE_R
21cb0 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50  ECURSE_SZ)  /* P
21cc0 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20 2a  ointer to tail *
21cd0 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  /../*.** Return 
21ce0 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
21cf0 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
21d00 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
21d10 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
21d20 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
21d30 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
21d40 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
21d50 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
21d60 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
21d70 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
21d80 3e 65 50 61 72 73 65 4d 6f 64 65 3d 3d 50 41 52  >eParseMode==PAR
21d90 53 45 5f 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f  SE_MODE_DECLARE_
21da0 56 54 41 42 29 0a 23 65 6e 64 69 66 0a 0a 23 69  VTAB).#endif..#i
21db0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
21dc0 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
21dd0 29 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 52  ).  #define IN_R
21de0 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20 30 0a 23  ENAME_OBJECT 0.#
21df0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
21e00 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43 54 20  N_RENAME_OBJECT 
21e10 28 70 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d  (pParse->eParseM
21e20 6f 64 65 3e 3d 50 41 52 53 45 5f 4d 4f 44 45 5f  ode>=PARSE_MODE_
21e30 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 0a 23  RENAME_COLUMN).#
21e40 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
21e50 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
21e60 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26 20  IRTUALTABLE) && 
21e70 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
21e80 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 29 0a  MIT_ALTERTABLE).
21e90 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 53 50 45    #define IN_SPE
21ea0 43 49 41 4c 5f 50 41 52 53 45 20 30 0a 23 65 6c  CIAL_PARSE 0.#el
21eb0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
21ec0 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20 28 70  SPECIAL_PARSE (p
21ed0 50 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64  Parse->eParseMod
21ee0 65 21 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 4e 4f  e!=PARSE_MODE_NO
21ef0 52 4d 41 4c 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RMAL).#endif../*
21f00 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
21f10 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
21f20 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62   structure can b
21f30 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20  e declared on a 
21f40 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a  stack and used.*
21f50 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61  * to save the Pa
21f60 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
21f70 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69   value so that i
21f80 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65  t can be restore
21f90 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75  d later..*/.stru
21fa0 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b  ct AuthContext {
21fb0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
21fc0 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f  AuthContext;   /
21fd0 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73  * Put saved Pars
21fe0 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68  e.zAuthContext h
21ff0 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ere */.  Parse *
22000 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
22010 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73       /* The Pars
22020 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d  e structure */.}
22030 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c  ;../*.** Bitfiel
22040 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76  d flags for P5 v
22050 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20  alue in various 
22060 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56  opcodes..**.** V
22070 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
22080 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
22090 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
220a0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
220b0 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55      == SQLITE_FU
220c0 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20  NC_LENGTH.**    
220d0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
220e0 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55      == SQLITE_FU
220f0 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20  NC_TYPEOF.**    
22100 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
22110 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c      == BTREE_BUL
22120 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c  KLOAD.**    OPFL
22130 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
22140 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  == BTREE_SEEK_EQ
22150 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f  .**    OPFLAG_FO
22160 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54  RDELETE    == BT
22170 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a  REE_FORDELETE.**
22180 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50      OPFLAG_SAVEP
22190 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45  OSITION == BTREE
221a0 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a  _SAVEPOSITION.**
221b0 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45      OPFLAG_AUXDE
221c0 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45  LETE    == BTREE
221d0 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64  _AUXDELETE.*/.#d
221e0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48  efine OPFLAG_NCH
221f0 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20  ANGE       0x01 
22200 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a     /* OP_Insert:
22210 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
22220 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20  b->nChange */.  
22230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22250 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20     /* Also used 
22260 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f  in P2 (not P5) o
22270 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23  f OP_Delete */.#
22280 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f  define OPFLAG_NO
22290 43 48 4e 47 20 20 20 20 20 20 20 20 30 78 30 31  CHNG        0x01
222a0 20 20 20 20 2f 2a 20 4f 50 5f 56 43 6f 6c 75 6d      /* OP_VColum
222b0 6e 20 6e 6f 63 68 61 6e 67 65 20 66 6f 72 20 55  n nochange for U
222c0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
222d0 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
222e0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
222f0 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
22300 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
22310 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
22320 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
22330 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65     0x20    /* Se
22340 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
22350 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
22360 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
22370 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
22380 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
22390 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
223a0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
223b0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
223c0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
223d0 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
223e0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
223f0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22400 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
22410 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
22420 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
22430 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
22440 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22450 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30  _ISNOOP        0
22460 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x40    /* OP_Del
22470 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64  ete does pre-upd
22480 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f  ate-hook only */
22490 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
224a0 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78  LENGTHARG     0x
224b0 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  40    /* OP_Colu
224c0 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
224d0 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65   length() */.#de
224e0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45  fine OPFLAG_TYPE
224f0 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20  OFARG     0x80  
22500 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
22510 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70  nly used for typ
22520 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  eof() */.#define
22530 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
22540 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
22550 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20   OP_Open** used 
22560 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72  to open bulk cur
22570 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  sor */.#define O
22580 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
22590 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f      0x02    /* O
225a0 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20  P_Open** cursor 
225b0 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c  uses EQ seek onl
225c0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
225d0 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20  LAG_FORDELETE   
225e0 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f    0x08    /* OP_
225f0 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20  Open should use 
22600 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20  BTREE_FORDELETE 
22610 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22620 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20  G_P2ISREG       
22630 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f  0x10    /* P2 to
22640 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20   OP_Open** is a 
22650 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
22660 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22670 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20  G_PERMUTE       
22680 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
22690 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70  mpare: use the p
226a0 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64  ermutation */.#d
226b0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56  efine OPFLAG_SAV
226c0 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20  EPOSITION  0x02 
226d0 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f     /* OP_Delete/
226e0 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75 72  Insert: save cur
226f0 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69  sor pos */.#defi
22700 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  ne OPFLAG_AUXDEL
22710 45 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20  ETE     0x04    
22720 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e  /* OP_Delete: in
22730 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20  dex in a DELETE 
22740 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  op */.#define OP
22750 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49  FLAG_NOCHNG_MAGI
22760 43 20 20 30 78 36 64 20 20 20 20 2f 2a 20 4f 50  C  0x6d    /* OP
22770 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 73 65 72  _MakeRecord: ser
22780 69 61 6c 74 79 70 65 20 31 30 20 69 73 20 6f 6b  ialtype 10 is ok
22790 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20   */../*. * Each 
227a0 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20  trigger present 
227b0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
227c0 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64  schema is stored
227d0 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   as an instance 
227e0 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69  of. * struct Tri
227f0 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e  gger.. *. * Poin
22800 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65  ters to instance
22810 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
22820 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69  ger are stored i
22830 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31  n two ways.. * 1
22840 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61  . In the "trigHa
22850 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28  sh" hash table (
22860 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69  part of the sqli
22870 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73  te3* that repres
22880 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64  ents the. *    d
22890 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61  atabase). This a
228a0 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74  llows Trigger st
228b0 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72  ructures to be r
228c0 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65  etrieved by name
228d0 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67  .. * 2. All trig
228e0 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20  gers associated 
228f0 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61  with a single ta
22900 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65  ble form a linke
22910 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68  d list, using th
22920 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65  e. *    pNext me
22930 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54  mber of struct T
22940 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65  rigger. A pointe
22950 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
22960 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a  lement of the. *
22970 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20      linked list 
22980 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65  is stored as the
22990 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62   "pTrigger" memb
229a0 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69  er of the associ
229b0 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63  ated. *    struc
229c0 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54  t Table.. *. * T
229d0 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
229e0 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20  ember points to 
229f0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
22a00 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69  t of a linked li
22a10 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67  st. * containing
22a20 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
22a30 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73  nts specified as
22a40 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
22a50 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74  gram.. */.struct
22a60 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61   Trigger {.  cha
22a70 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
22a80 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65       /* The name
22a90 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20   of the trigger 
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ab0 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72         */.  char
22ac0 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20   *table;        
22ad0 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65      /* The table
22ae0 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63   or view to whic
22af0 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70  h the trigger ap
22b00 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70  plies */.  u8 op
22b10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22b20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
22b30 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
22b40 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20  E, TK_INSERT    
22b50 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f       */.  u8 tr_
22b60 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  tm;             
22b70 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47    /* One of TRIG
22b80 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47  GER_BEFORE, TRIG
22b90 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45  GER_AFTER */.  E
22ba0 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20  xpr *pWhen;     
22bb0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
22bc0 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  EN clause of the
22bd0 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79   expression (may
22be0 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49   be NULL) */.  I
22bf0 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b  dList *pColumns;
22c00 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69         /* If thi
22c10 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f  s is an UPDATE O
22c20 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  F <column-list> 
22c30 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20  trigger,.       
22c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c50 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d        the <colum
22c60 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65  n-list> is store
22c70 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  d here */.  Sche
22c80 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
22c90 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
22ca0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69  ntaining the tri
22cb0 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61  gger */.  Schema
22cc0 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20   *pTabSchema;   
22cd0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
22ce0 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
22cf0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
22d00 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a  p *step_list; /*
22d10 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72   Link list of tr
22d20 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74  igger program st
22d30 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20  eps             
22d40 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
22d50 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
22d60 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73  Next trigger ass
22d70 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
22d80 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   table */.};../*
22d90 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73  .** A trigger is
22da0 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45   either a BEFORE
22db0 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69   or an AFTER tri
22dc0 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  gger.  The follo
22dd0 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a  wing constants.*
22de0 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  * determine whic
22df0 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72  h..**.** If ther
22e00 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74  e are multiple t
22e10 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67  riggers, you mig
22e20 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52  ht of some BEFOR
22e30 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52  E and some AFTER
22e40 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73  ..** In that cas
22e50 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  es, the constant
22e60 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f  s below can be O
22e70 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f  Red together..*/
22e80 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
22e90 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69  _BEFORE  1.#defi
22ea0 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  ne TRIGGER_AFTER
22eb0 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69     2../*. * An i
22ec0 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63  nstance of struc
22ed0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73  t TriggerStep is
22ee0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61   used to store a
22ef0 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74   single SQL stat
22f00 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73  ement. * that is
22f10 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69   a part of a tri
22f20 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
22f30 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66  . * Instances of
22f40 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
22f50 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69  tep are stored i
22f60 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65  n a singly linke
22f70 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20  d list (linked. 
22f80 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65  * using the "pNe
22f90 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65  xt" member) refe
22fa0 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73  renced by the "s
22fb0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
22fc0 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63   of the. * assoc
22fd0 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69  iated struct Tri
22fe0 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54  gger instance. T
22ff0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
23000 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   of the linked l
23010 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69  ist is. * the fi
23020 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20  rst step of the 
23030 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
23040 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20  . *. * The "op" 
23050 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73  member indicates
23060 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
23070 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e   a "DELETE", "IN
23080 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20  SERT", "UPDATE" 
23090 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73  or. * "SELECT" s
230a0 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65  tatement. The me
230b0 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74  anings of the ot
230c0 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64  her members is d
230d0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
230e0 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70  . * value of "op
230f0 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a  " as follows:. *
23100 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e  . * (op == TK_IN
23110 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20  SERT). * orconf 
23120 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65     -> stores the
23130 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
23140 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63  orithm. * pSelec
23150 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
23160 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
23170 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20   ... SELECT ... 
23180 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
23190 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
231a0 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f  this stores a po
231b0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c  inter to the SEL
231c0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f  ECT statement. O
231d0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
231e0 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
231f0 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
23200 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73  the table to ins
23210 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78  ert into.. * pEx
23220 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69  prList -> If thi
23230 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
23240 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e  NTO ... VALUES .
23250 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
23260 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
23270 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76     this stores v
23280 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65  alues to be inse
23290 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20  rted. Otherwise 
232a0 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74  NULL.. * pIdList
232b0 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
232c0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
232d0 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d  ... (<column-nam
232e0 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a  es>) VALUES ....
232f0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
23300 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
23310 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20  this stores the 
23320 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20  column-names to 
23330 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  be. *           
23340 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f     inserted into
23350 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
23360 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61  K_DELETE). * zTa
23370 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
23380 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
23390 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66  able to delete f
233a0 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  rom.. * pWhere  
233b0 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
233c0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c  lause of the DEL
233d0 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ETE statement if
233e0 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
233f0 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
23400 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
23410 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  L.. *. * (op == 
23420 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54  TK_UPDATE). * zT
23430 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
23440 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
23450 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e  table to update.
23460 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
23470 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
23480 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
23490 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
234a0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
234b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
234c0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
234d0 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41  * pExprList -> A
234e0 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c   list of the col
234f0 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61  umns to update a
23500 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd the expressio
23510 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20  ns to update. * 
23520 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
23530 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65  m to. See sqlite
23540 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65  3Update() docume
23550 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61  ntation of "pCha
23560 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20  nges". *        
23570 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a        argument..
23580 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72   *. */.struct Tr
23590 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38  iggerStep {.  u8
235a0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
235b0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
235c0 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
235d0 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b  E, TK_INSERT, TK
235e0 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20  _SELECT */.  u8 
235f0 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
23600 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b    /* OE_Rollback
23610 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67   etc. */.  Trigg
23620 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20  er *pTrig;      
23630 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74  /* The trigger t
23640 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73  hat this step is
23650 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20   a part of */.  
23660 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
23670 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
23680 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20  tatement or RHS 
23690 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53  of INSERT INTO S
236a0 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63  ELECT ... */.  c
236b0 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20  har *zTarget;   
236c0 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61      /* Target ta
236d0 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20  ble for DELETE, 
236e0 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a  UPDATE, INSERT *
236f0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
23700 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
23710 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
23720 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
23730 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70  E steps */.  Exp
23740 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74  rList *pExprList
23750 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20  ; /* SET clause 
23760 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 20 20  for UPDATE */.  
23770 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b  IdList *pIdList;
23780 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
23790 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20  ames for INSERT 
237a0 2a 2f 0a 20 20 55 70 73 65 72 74 20 2a 70 55 70  */.  Upsert *pUp
237b0 73 65 72 74 3b 20 20 20 20 20 2f 2a 20 55 70 73  sert;     /* Ups
237c0 65 72 74 20 63 6c 61 75 73 65 73 20 6f 6e 20 61  ert clauses on a
237d0 6e 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68  n INSERT */.  ch
237e0 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
237f0 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53     /* Original S
23800 51 4c 20 74 65 78 74 20 6f 66 20 74 68 69 73 20  QL text of this 
23810 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69  command */.  Tri
23820 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
23830 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
23840 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
23850 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
23860 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
23870 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
23880 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
23890 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
238a0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
238b0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
238c0 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
238d0 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
238e0 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
238f0 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
23900 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
23910 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
23920 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
23930 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a  s.** explicit..*
23940 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
23950 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
23960 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
23970 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
23980 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
23990 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
239a0 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
239b0 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
239c0 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
239d0 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
239e0 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
239f0 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72  ma */.  int bVar
23a00 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43  Only;       /* C
23a10 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c  heck for variabl
23a20 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c  e references onl
23a30 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  y */.  const cha
23a40 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61  r *zDb;    /* Ma
23a50 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65  ke sure all obje
23a60 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  cts are containe
23a70 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61  d in this databa
23a80 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
23a90 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54  ar *zType;  /* T
23aa0 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ype of the conta
23ab0 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
23ac0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
23ad0 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  /.  const Token 
23ae0 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20  *pName; /* Name 
23af0 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
23b00 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
23b10 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b  r messages */.};
23b20 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
23b30 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75  ted used to accu
23b40 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20  mulate the text 
23b50 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72  of a string wher
23b60 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e  e we.** do not n
23b70 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
23b80 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69  how big the stri
23b90 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68  ng will be in th
23ba0 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
23bb0 20 73 71 6c 69 74 65 33 5f 73 74 72 20 7b 0a 20   sqlite3_str {. 
23bc0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
23bd0 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
23be0 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
23bf0 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
23c00 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
23c10 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
23c20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
23c30 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
23c40 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63  */.  u32  nAlloc
23c50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f  ;         /* Amo
23c60 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c  unt of space all
23c70 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20  ocated in zText 
23c80 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f  */.  u32  mxAllo
23c90 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  c;        /* Max
23ca0 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c  imum allowed all
23cb0 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20  ocation.  0 for 
23cc0 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20  no malloc usage 
23cd0 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b  */.  u32  nChar;
23ce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
23cf0 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
23d00 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38  g so far */.  u8
23d10 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
23d20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d     /* SQLITE_NOM
23d30 45 4d 20 6f 72 20 53 51 4c 49 54 45 5f 54 4f 4f  EM or SQLITE_TOO
23d40 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72  BIG */.  u8   pr
23d50 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a  intfFlags;    /*
23d60 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66   SQLITE_PRINTF f
23d70 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  lags below */.};
23d80 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
23d90 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20  PRINTF_INTERNAL 
23da0 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61  0x01  /* Interna
23db0 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65  l-use-only conve
23dc0 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f  rters allowed */
23dd0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
23de0 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20  PRINTF_SQLFUNC  
23df0 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e  0x02  /* SQL fun
23e00 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20  ction arguments 
23e10 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23  to VXPrintf */.#
23e20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
23e30 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78  INTF_MALLOCED 0x
23e40 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78  04  /* True if x
23e50 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65  Text is allocate
23e60 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66  d space */..#def
23e70 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58  ine isMalloced(X
23e80 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66  )  (((X)->printf
23e90 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50  Flags & SQLITE_P
23ea0 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21  RINTF_MALLOCED)!
23eb0 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f  =0).../*.** A po
23ec0 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
23ed0 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
23ee0 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69  to communicate i
23ef0 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72  nformation.** fr
23f00 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61  om sqlite3Init a
23f10 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  nd OP_ParseSchem
23f20 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74  a into the sqlit
23f30 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a  e3InitCallback..
23f40 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
23f50 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t {.  sqlite3 *d
23f60 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
23f70 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20   database being 
23f80 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
23f90 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
23fa0 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65  ;    /* Error me
23fb0 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72  ssage stored her
23fc0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  e */.  int iDb; 
23fd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
23fe0 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73  for main databas
23ff0 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20  e.  1 for TEMP, 
24000 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64  2.. for ATTACHed
24010 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
24020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
24030 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20  ult code stored 
24040 68 65 72 65 20 2a 2f 0a 20 20 75 33 32 20 6d 49  here */.  u32 mI
24050 6e 69 74 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a  nitFlags;     /*
24060 20 46 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 6c 69   Flags controlli
24070 6e 67 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ng error message
24080 73 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b  s */.} InitData;
24090 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
240a0 76 61 6c 75 65 73 20 66 6f 72 20 6d 49 6e 69 74  values for mInit
240b0 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  Flags.*/.#define
240c0 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72 54   INITFLAG_AlterT
240d0 61 62 6c 65 20 20 20 30 78 30 30 30 31 20 20 2f  able   0x0001  /
240e0 2a 20 54 68 69 73 20 69 73 20 61 20 72 65 70 61  * This is a repa
240f0 72 73 65 20 61 66 74 65 72 20 41 4c 54 45 52 20  rse after ALTER 
24100 54 41 42 4c 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  TABLE */../*.** 
24110 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
24120 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
24130 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
24140 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
24150 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
24160 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
24170 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
24180 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
24190 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
241a0 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
241b0 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
241c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241d0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
241e0 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
241f0 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
24200 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
24210 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
24220 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
24230 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
24240 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
24250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24260 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
24270 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
24280 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
24290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242a0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
242b0 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
242c0 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
242d0 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242f0 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
24300 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
24310 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
24320 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b  nt bSmallMalloc;
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24340 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67 65 20   /* Avoid large 
24350 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
24360 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  ns if true */.  
24370 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24390 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
243a0 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
243b0 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74  int neverCorrupt
243c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
243d0 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
243e0 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72   always well-for
243f0 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  med */.  int szL
24400 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
24410 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
24420 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
24430 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
24440 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24460 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
24470 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
24480 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ount */.  int nS
24490 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20  tmtSpill;       
244a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
244b0 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c  tmt-journal spil
244c0 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68  l-to-disk thresh
244d0 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  old */.  sqlite3
244e0 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
244f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
24500 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
24510 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
24520 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
24530 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
24540 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
24550 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
24560 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
24570 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
24580 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
24590 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
245a0 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
245b0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
245c0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
245d0 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
245e0 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
245f0 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
24600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24610 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
24620 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
24630 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24650 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
24660 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
24670 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
24680 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
24690 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
246a0 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
246b0 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
246c0 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
246d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
246e0 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
246f0 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
24700 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
24710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24720 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
24730 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
24740 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24760 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
24770 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
24780 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
247b0 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
247c0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
247d0 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
247e0 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
247f0 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
24800 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
24810 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
24820 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
24830 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
24840 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
24850 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75  e enabled */.  u
24860 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20  32 szPma;       
24870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24880 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74   /* Maximum Sort
24890 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20  er PMA size */. 
248a0 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
248b0 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
248c0 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
248d0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
248e0 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
248f0 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
24900 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
24910 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
24920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24930 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
24940 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
24950 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
24960 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
24970 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
24980 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
24990 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
249a0 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
249b0 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
249c0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
249d0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
249e0 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
249f0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
24a00 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
24a10 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
24a20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
24a30 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
24a40 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
24a50 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24a70 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
24a80 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
24a90 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
24aa0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
24ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
24ac0 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
24ad0 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
24ae0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
24af0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
24b00 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
24b10 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
24b20 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
24b30 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
24b40 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
24b50 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
24b60 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
24b70 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b90 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
24ba0 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
24bb0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
24bc0 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
24bd0 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
24be0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
24bf0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
24c00 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
24c10 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
24c20 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
24c30 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
24c40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
24c50 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
24c60 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
24c70 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
24c80 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
24c90 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
24ca0 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
24cb0 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
24cc0 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
24cd0 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
24ce0 6e 63 68 29 28 76 6f 69 64 2a 2c 75 6e 73 69 67  nch)(void*,unsig
24cf0 6e 65 64 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  ned iSrcLine,u8 
24d00 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
24d10 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
24d20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
24d30 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
24d60 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
24d70 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
24d80 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
24d90 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
24da0 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
24db0 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
24dc0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
24dd0 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
24de0 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
24df0 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
24e00 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
24e10 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
24e20 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63  ls */.  int iOnc
24e30 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b  eResetThreshold;
24e40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
24e50 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e  n to reset OP_On
24e60 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  ce counters */. 
24e70 20 75 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66   u32 szSorterRef
24e80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24e90 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69     /* Min size i
24ea0 6e 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 73  n bytes to use s
24eb0 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b  orter-refs */.};
24ec0 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
24ed0 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
24ee0 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
24ef0 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69  atements to indi
24f00 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65  cate that.** the
24f10 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20   assert is only 
24f20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d  valid on a well-
24f30 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e  formed database.
24f40 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a    Instead of:.**
24f50 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
24f60 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77  X );.**.** One w
24f70 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rites:.**.**    
24f80 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f   assert( X || CO
24f90 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a  RRUPT_DB );.**.*
24fa0 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  * CORRUPT_DB is 
24fb0 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d  true during norm
24fc0 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43  al operation.  C
24fd0 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e  ORRUPT_DB does n
24fe0 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74  ot indicate.** t
24ff0 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65  hat the database
25000 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63   is definitely c
25010 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61  orrupt, only tha
25020 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f  t it might be co
25030 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f  rrupt..** For mo
25040 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43  st test cases, C
25050 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74  ORRUPT_DB is set
25060 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20   to false using 
25070 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c  a special.** sql
25080 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
25090 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c  l().  This enabl
250a0 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74  es assert() stat
250b0 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a  ements to prove.
250c0 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61  ** things that a
250d0 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66  re always true f
250e0 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64  or well-formed d
250f0 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65  atabases..*/.#de
25100 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20  fine CORRUPT_DB 
25110 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e   (sqlite3Config.
25120 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29  neverCorrupt==0)
25130 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
25140 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
25150 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
25160 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
25170 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
25180 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
251b0 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
251c0 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
251d0 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
251e0 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
251f0 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
25200 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
25210 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
25220 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
25230 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
25240 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
25250 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
25260 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
25270 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
25280 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
25290 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
252a0 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
252b0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
252c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
252d0 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
252e0 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f  ries */.  u8 eCo
252f0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25310 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70      /* A small p
25320 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a  rocessing code *
25330 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
25340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25360 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
25370 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
25380 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
25390 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
253a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
253b0 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
253c0 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20     int n;       
253d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
253f0 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20  A counter */.   
25400 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20   int iCur;      
25410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25420 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
25430 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
25440 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
25450 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
25460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25470 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
25480 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
25490 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
254a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
254b0 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
254c0 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
254d0 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48      struct CCurH
254e0 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20  int *pCCurHint; 
254f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25500 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72   Used by codeCur
25510 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20  sorHint() */.   
25520 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20   int *aiCol;    
25530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72             /* ar
25550 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ray of column in
25560 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  dexes */.    str
25570 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49  uct IdxCover *pI
25580 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20  dxCover;        
25590 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
255a0 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61  for index covera
255b0 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ge */.    struct
255c0 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70   IdxExprTrans *p
255d0 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20  IdxTrans;       
255e0 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69      /* Convert i
255f0 64 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c  dxed expr to col
25600 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  umn */.    ExprL
25610 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
25620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25630 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59       /* GROUP BY
25640 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53   clause */.    S
25650 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25670 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49           /* HAVI
25680 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75  NG to WHERE clau
25690 73 65 20 63 74 78 20 2a 2f 0a 20 20 20 20 73 74  se ctx */.    st
256a0 72 75 63 74 20 57 69 6e 64 6f 77 52 65 77 72 69  ruct WindowRewri
256b0 74 65 20 2a 70 52 65 77 72 69 74 65 3b 20 20 20  te *pRewrite;   
256c0 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f          /* Windo
256d0 77 20 72 65 77 72 69 74 65 20 63 6f 6e 74 65 78  w rewrite contex
256e0 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  t */.    struct 
256f0 57 68 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f 6e  WhereConst *pCon
25700 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
25710 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
25720 73 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  se constants */.
25730 20 20 20 20 73 74 72 75 63 74 20 52 65 6e 61 6d      struct Renam
25740 65 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20 20  eCtx *pRename;  
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25760 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 63   RENAME COLUMN c
25770 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b  ontext */.  } u;
25780 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
25790 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
257a0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
257b0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
257c0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
257d0 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
257e0 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
257f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
25800 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
25810 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
25820 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
25830 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
25840 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
25850 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
25860 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
25870 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25880 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  ExprWalkNoop(Wal
25890 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
258a0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
258b0 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
258c0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
258d0 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b  qlite3SelectWalk
258e0 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Fail(Walker*, Se
258f0 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53  lect*);.#ifdef S
25900 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64  QLITE_DEBUG.void
25910 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
25920 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72  lkAssert2(Walker
25930 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e  *, Select*);.#en
25940 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
25950 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
25960 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
25970 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
25980 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
25990 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
259a0 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
259b0 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
259c0 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
259d0 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
259e0 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
259f0 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
25a00 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
25a10 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
25a20 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
25a30 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
25a40 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
25a50 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
25a60 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
25a70 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
25a80 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
25a90 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
25aa0 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
25ab0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
25ac0 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
25ad0 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
25ae0 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
25af0 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
25b00 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
25b10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
25b20 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
25b30 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
25b40 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
25b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b60 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
25b70 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
25b80 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
25b90 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
25ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
25bb0 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
25bc0 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
25bd0 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
25be0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
25bf0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
25c00 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
25c10 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
25c20 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
25c30 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
25c40 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
25c50 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
25c60 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
25c70 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
25c80 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
25c90 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
25ca0 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
25cb0 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20  char *zCteErr;  
25cc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
25cd0 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
25ce0 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
25cf0 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
25d00 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
25d10 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
25d20 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
25d30 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
25d40 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
25d50 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
25d60 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
25d70 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
25d80 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
25d90 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
25da0 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
25db0 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
25dc0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
25dd0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
25de0 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
25df0 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
25e00 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
25e10 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
25e20 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
25e30 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
25e40 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
25e50 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
25e60 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
25e70 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   This object is 
25e80 75 73 65 64 20 69 6e 20 76 61 72 69 6f 69 75 73  used in varioius
25e90 20 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61 74   ways, all relat
25ea0 65 64 20 74 6f 20 77 69 6e 64 6f 77 20 66 75 6e  ed to window fun
25eb0 63 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28  ctions.**.**   (
25ec0 31 29 20 41 20 73 69 6e 67 6c 65 20 69 6e 73 74  1) A single inst
25ed0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
25ee0 75 63 74 75 72 65 20 69 73 20 61 74 74 61 63 68  ucture is attach
25ef0 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20  ed to the.**    
25f00 20 20 20 74 68 65 20 45 78 70 72 2e 70 57 69 6e     the Expr.pWin
25f10 20 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20   field for each 
25f20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20  window function 
25f30 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  in an expression
25f40 20 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20   tree..**       
25f50 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64  This object hold
25f60 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  s the informatio
25f70 6e 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  n contained in t
25f80 68 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a  he OVER clause,.
25f90 2a 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61 64  **       plus ad
25fa0 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20  ditional fields 
25fb0 75 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65  used during code
25fc0 20 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a   generation..**.
25fd0 2a 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e  **   (2) All win
25fe0 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  dow functions in
25ff0 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
26000 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c   form a linked-l
26010 69 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74  ist.**       att
26020 61 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e  ached to Select.
26030 70 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f  pWin.  The Windo
26040 77 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64  w.pFunc and Wind
26050 6f 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20  ow.pExpr.**     
26060 20 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62    fields point b
26070 61 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65  ack to the expre
26080 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ssion that is th
26090 65 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f  e window functio
260a0 6e 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54  n..**.**   (3) T
260b0 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20  he terms of the 
260c0 57 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66  WINDOW clause of
260d0 20 61 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e   a SELECT are in
260e0 73 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a  stances of this.
260f0 2a 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  **       object 
26100 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
26110 20 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c   attached to Sel
26120 65 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a  ect.pWinDefn..**
26130 0a 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31 29  .** The uses (1)
26140 20 61 6e 64 20 28 32 29 20 61 72 65 20 72 65 61   and (2) are rea
26150 6c 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e  lly the same Win
26160 64 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20  dow object that 
26170 6a 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20  just happens.** 
26180 74 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c 65  to be accessible
26190 20 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e   in two differen
261a0 74 20 77 61 79 73 2e 20 20 55 73 65 20 28 33 29  t ways.  Use (3)
261b0 20 69 73 20 61 72 65 20 73 65 70 61 72 61 74 65   is are separate
261c0 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
261d0 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63  uct Window {.  c
261e0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
261f0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
26200 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65  f window (may be
26210 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72   NULL) */.  Expr
26220 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e  List *pPartition
26230 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e  ;   /* PARTITION
26240 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
26250 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
26260 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52  By;     /* ORDER
26270 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
26280 75 38 20 65 54 79 70 65 3b 20 20 20 20 20 20 20  u8 eType;       
26290 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41          /* TK_RA
262a0 4e 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53 20 2a  NGE or TK_ROWS *
262b0 2f 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20 20  /.  u8 eStart;  
262c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
262d0 4e 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e  NBOUNDED, CURREN
262e0 54 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20  T, PRECEDING or 
262f0 46 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75  FOLLOWING */.  u
26300 38 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20  8 eEnd;         
26310 20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e         /* UNBOUN
26320 44 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52  DED, CURRENT, PR
26330 45 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f  ECEDING or FOLLO
26340 57 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72 20 2a  WING */.  Expr *
26350 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20  pStart;         
26360 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
26370 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43  for "<expr> PREC
26380 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72  EDING" */.  Expr
26390 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
263a0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
263b0 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f  n for "<expr> FO
263c0 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69  LLOWING" */.  Wi
263d0 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20  ndow *pNextWin; 
263e0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
263f0 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62 65  ndow function be
26400 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69 73 20  longing to this 
26410 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70 72  SELECT */.  Expr
26420 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20 20 20   *pFilter;      
26430 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c 54 45      /* The FILTE
26440 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  R expression */.
26450 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
26460 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
26470 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69   function */.  i
26480 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20 20 20  nt iEphCsr;     
26490 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74 69 74         /* Partit
264a0 69 6f 6e 20 62 75 66 66 65 72 20 6f 72 20 50 65  ion buffer or Pe
264b0 65 72 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69  er buffer */.  i
264c0 6e 74 20 72 65 67 41 63 63 75 6d 3b 0a 20 20 69  nt regAccum;.  i
264d0 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 0a 20 20  nt regResult;.  
264e0 69 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20 20  int csrApp;     
264f0 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74          /* Funct
26500 69 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65 64  ion cursor (used
26510 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a   by min/max) */.
26520 20 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20 20    int regApp;   
26530 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e            /* Fun
26540 63 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20 28  ction register (
26550 61 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69 6e  also used by min
26560 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72  /max) */.  int r
26570 65 67 50 61 72 74 3b 20 20 20 20 20 20 20 20 20  egPart;         
26580 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 20 61     /* First in a
26590 20 73 65 74 20 6f 66 20 72 65 67 69 73 74 65 72   set of register
265a0 73 20 68 6f 6c 64 69 6e 67 20 50 41 52 54 49 54  s holding PARTIT
265b0 49 4f 4e 20 42 59 0a 20 20 20 20 20 20 20 20 20  ION BY.         
265c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265d0 20 2a 2a 20 61 6e 64 20 4f 52 44 45 52 20 42 59   ** and ORDER BY
265e0 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
265f0 77 69 6e 64 6f 77 20 2a 2f 0a 20 20 45 78 70 72  window */.  Expr
26600 20 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20 20 20   *pOwner;       
26610 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
26620 6e 20 6f 62 6a 65 63 74 20 74 68 69 73 20 77 69  n object this wi
26630 6e 64 6f 77 20 69 73 20 61 74 74 61 63 68 65 64  ndow is attached
26640 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75   to */.  int nBu
26650 66 66 65 72 43 6f 6c 3b 20 20 20 20 20 20 20 20  fferCol;        
26660 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
26670 6c 75 6d 6e 73 20 69 6e 20 62 75 66 66 65 72 20  lumns in buffer 
26680 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69  table */.  int i
26690 41 72 67 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  ArgCol;         
266a0 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20     /* Offset of 
266b0 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66  first argument f
266c0 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
266d0 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66 20   */.};..#ifndef 
266e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
266f0 4f 57 46 55 4e 43 0a 76 6f 69 64 20 73 71 6c 69  OWFUNC.void sqli
26700 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28  te3WindowDelete(
26710 73 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64 6f 77  sqlite3*, Window
26720 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26730 57 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65  WindowListDelete
26740 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69  (sqlite3 *db, Wi
26750 6e 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77  ndow *p);.Window
26760 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41   *sqlite3WindowA
26770 6c 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74  lloc(Parse*, int
26780 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e  , int, Expr*, in
26790 74 20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t , Expr*);.void
267a0 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74   sqlite3WindowAt
267b0 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
267c0 72 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e  r*, Window*);.in
267d0 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43  t sqlite3WindowC
267e0 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 20 57  ompare(Parse*, W
267f0 69 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29  indow*, Window*)
26800 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
26810 6e 64 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72  ndowCodeInit(Par
26820 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76  se*, Window*);.v
26830 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
26840 77 43 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a  wCodeStep(Parse*
26850 2c 20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65  , Select*, Where
26860 49 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Info*, int, int)
26870 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e  ;.int sqlite3Win
26880 64 6f 77 52 65 77 72 69 74 65 28 50 61 72 73 65  dowRewrite(Parse
26890 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
268a0 20 73 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75   sqlite3ExpandSu
268b0 62 71 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73  bquery(Parse*, s
268c0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
268d0 65 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  em*);.void sqlit
268e0 65 33 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50  e3WindowUpdate(P
268f0 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20  arse*, Window*, 
26900 57 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66  Window*, FuncDef
26910 2a 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69  *);.Window *sqli
26920 74 65 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c  te3WindowDup(sql
26930 69 74 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a  ite3 *db, Expr *
26940 70 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a  pOwner, Window *
26950 70 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69  p);.Window *sqli
26960 74 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70  te3WindowListDup
26970 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69  (sqlite3 *db, Wi
26980 6e 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73  ndow *p);.void s
26990 71 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63  qlite3WindowFunc
269a0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 23 65 6c  tions(void);.#el
269b0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
269c0 74 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28  te3WindowDelete(
269d0 61 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71  a,b).# define sq
269e0 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74  lite3WindowFunct
269f0 69 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20  ions().# define 
26a00 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74  sqlite3WindowAtt
26a10 61 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69  ach(a,b,c).#endi
26a20 66 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  f../*.** Assumin
26a30 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
26a40 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
26a50 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
26a60 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
26a70 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
26a80 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
26a90 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
26aa0 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
26ab0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
26ac0 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ae0 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
26af0 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
26b00 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
26b20 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
26b30 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
26b40 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
26b50 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b90 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
26ba0 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
26bb0 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
26bc0 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
26bd0 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
26be0 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
26bf0 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
26c00 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
26c10 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
26c20 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
26c30 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
26c40 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
26c50 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
26c60 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
26c70 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
26c80 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
26c90 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
26ca0 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
26cb0 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
26cc0 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
26cd0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70  /.int sqlite3Rep
26ce0 6f 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72  ortError(int iEr
26cf0 72 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63  r, int lineno, c
26d00 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
26d10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
26d20 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b  rruptError(int);
26d30 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75  .int sqlite3Misu
26d40 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  seError(int);.in
26d50 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  t sqlite3Cantope
26d60 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65  nError(int);.#de
26d70 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
26d80 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  UPT_BKPT sqlite3
26d90 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
26da0 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
26db0 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
26dc0 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  T sqlite3MisuseE
26dd0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
26de0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41  define SQLITE_CA
26df0 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69  NTOPEN_BKPT sqli
26e00 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
26e10 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65  (__LINE__).#ifde
26e20 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
26e30 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65   int sqlite3Nome
26e40 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69  mError(int);.  i
26e50 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e  nt sqlite3Ioerrn
26e60 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a  omemError(int);.
26e70 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72    int sqlite3Cor
26e80 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e  ruptPgnoError(in
26e90 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e  t,Pgno);.# defin
26ea0 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
26eb0 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  KPT sqlite3Nomem
26ec0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
26ed0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
26ee0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
26ef0 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d   sqlite3Ioerrnom
26f00 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
26f10 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
26f20 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50  E_CORRUPT_PGNO(P
26f30 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  ) sqlite3Corrupt
26f40 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  PgnoError(__LINE
26f50 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20  __,(P)).#else.# 
26f60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
26f70 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
26f80 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53  NOMEM.# define S
26f90 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
26fa0 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f  M_BKPT SQLITE_IO
26fb0 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69  ERR_NOMEM.# defi
26fc0 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
26fd0 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65  T_PGNO(P) sqlite
26fe0 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f  3CorruptError(__
26ff0 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a  LINE__).#endif..
27000 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46  /*.** FTS3 and F
27010 54 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65  TS4 both require
27020 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
27030 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65  upport.*/.#if de
27040 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
27050 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
27060 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
27070 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64  NABLE_FTS3.# und
27080 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
27090 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _FTS4.#endif../*
270a0 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c  .** FTS4 is real
270b0 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ly an extension 
270c0 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73  for FTS3.  It is
270d0 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74   enabled using t
270e0 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  he.** SQLITE_ENA
270f0 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20  BLE_FTS3 macro. 
27100 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f   But to avoid co
27110 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20  nfusion we also 
27120 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49  call.** the SQLI
27130 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d  TE_ENABLE_FTS4 m
27140 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73  acro to serve as
27150 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51   an alias for SQ
27160 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
27170 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
27180 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
27190 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64  TS4) && !defined
271a0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
271b0 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TS3).# define SQ
271c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
271d0 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
271e0 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
271f0 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
27200 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
27210 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
27220 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
27230 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
27240 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
27250 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
27260 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
27270 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
27280 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
27290 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
272a0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
272b0 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
272c0 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
272d0 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
272e0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
272f0 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
27300 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
27310 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
27320 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
27330 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
27340 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
27350 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
27360 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
27370 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
27380 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
27390 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
273a0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
273b0 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
273c0 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
273d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
273e0 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
273f0 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
27400 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
27410 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
27420 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
27430 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
27440 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
27450 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
27460 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
27470 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
27480 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
27490 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
274a0 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
274b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
274c0 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
274d0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
274e0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
274f0 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
27500 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
27510 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
27520 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
27530 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
27540 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
27550 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
27560 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
27570 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
27580 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
27590 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
275a0 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
275b0 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
275c0 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65   char)(x)]).# de
275d0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
275e0 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ote(x)   (sqlite
275f0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
27600 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
27610 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  80).#else.# defi
27620 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
27630 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28  r(x)   toupper((
27640 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27650 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
27660 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
27670 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65  isspace((unsigne
27680 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
27690 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
276a0 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d  num(x)   isalnum
276b0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
276c0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
276d0 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
276e0 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67    isalpha((unsig
276f0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
27700 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
27710 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67  digit(x)   isdig
27720 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
27730 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
27740 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
27750 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e  x)  isxdigit((un
27760 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
27770 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27780 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f  3Tolower(x)   to
27790 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20  lower((unsigned 
277a0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
277b0 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74  ne sqlite3Isquot
277c0 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27  e(x)   ((x)=='"'
277d0 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29  ||(x)=='\''||(x)
277e0 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29  =='['||(x)=='`')
277f0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
27800 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b  te3IsIdChar(u8);
27810 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c  ../*.** Internal
27820 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74   function protot
27830 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ypes.*/.int sqli
27840 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74  te3StrICmp(const
27850 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
27860 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
27870 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  Strlen30(const c
27880 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73  har*);.#define s
27890 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e  qlite3Strlen30NN
278a0 28 43 29 20 28 73 74 72 6c 65 6e 28 43 29 26 30  (C) (strlen(C)&0
278b0 78 33 66 66 66 66 66 66 66 29 0a 63 68 61 72 20  x3fffffff).char 
278c0 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79  *sqlite3ColumnTy
278d0 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a  pe(Column*,char*
278e0 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
278f0 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
27900 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
27910 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
27920 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
27930 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
27940 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
27950 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
27960 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
27970 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
27980 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
27990 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
279a0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
279b0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
279c0 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
279d0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
279e0 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c  bMallocRawNN(sql
279f0 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61  ite3*, u64);.cha
27a00 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
27a10 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
27a20 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
27a30 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
27a40 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
27a50 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61  char*, u64);.cha
27a60 72 20 2a 73 71 6c 69 74 65 33 44 62 53 70 61 6e  r *sqlite3DbSpan
27a70 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
27a80 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
27a90 68 61 72 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  har*);.void *sql
27aa0 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
27ab0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
27ac0 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
27ad0 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
27ae0 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
27af0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
27b00 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
27b10 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
27b20 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
27b30 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
27b40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27b50 44 62 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33  DbFreeNN(sqlite3
27b60 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
27b70 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
27b80 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
27b90 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
27ba0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
27bb0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
27bc0 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  PageMalloc(int);
27bd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67  .void sqlite3Pag
27be0 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  eFree(void*);.vo
27bf0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74  id sqlite3MemSet
27c00 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23  Default(void);.#
27c10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
27c20 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71  TESTABLE.void sq
27c30 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f  lite3BenignMallo
27c40 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28  cHooks(void (*)(
27c50 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28  void), void (*)(
27c60 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69  void));.#endif.i
27c70 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
27c80 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
27c90 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
27ca0 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
27cb0 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
27cc0 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
27cd0 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
27ce0 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
27cf0 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
27d00 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
27d10 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
27d20 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
27d30 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
27d40 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
27d50 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
27d60 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
27d70 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
27d80 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
27d90 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
27da0 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
27db0 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
27dc0 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
27dd0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
27de0 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
27df0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
27e00 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
27e10 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
27e20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
27e30 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
27e40 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
27e50 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
27e60 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
27e70 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23  ree(D,P).#else.#
27e80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
27e90 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
27ea0 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  )   sqlite3DbMal
27eb0 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65  locRaw(D,N).# de
27ec0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
27ed0 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
27ee0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
27ef0 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69  Zero(D,N).# defi
27f00 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
27f10 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73  ree(D,P)       s
27f20 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50  qlite3DbFree(D,P
27f30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20  ).#endif../* Do 
27f40 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d  not allow both M
27f50 45 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59  EMSYS5 and MEMSY
27f60 53 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64  S3 to be defined
27f70 20 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74   together.  If t
27f80 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61  hey.** are, disa
27f90 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23  ble MEMSYS3.*/.#
27fa0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
27fb0 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
27fc0 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
27fd0 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
27fe0 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
27ff0 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45  );.#undef SQLITE
28000 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
28010 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
28020 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
28030 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
28040 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
28050 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
28060 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
28070 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
28080 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
28090 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
280a0 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
280b0 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
280c0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
280d0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
280e0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
280f0 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
28100 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
28110 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
28120 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
28130 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
28140 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
28150 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
28160 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  );.#endif.#if !d
28170 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
28180 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65  TEX_OMIT) && !de
28190 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
281a0 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20  EX_NOOP).  void 
281b0 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
281c0 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73  rier(void);.#els
281d0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
281e0 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
281f0 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65  ).#endif..sqlite
28200 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
28210 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
28220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
28230 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b  tusUp(int, int);
28240 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
28250 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74  tusDown(int, int
28260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
28270 74 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69  tatusHighwater(i
28280 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
28290 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73  lite3LookasideUs
282a0 65 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a  ed(sqlite3*,int*
282b0 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f  );../* Access to
282c0 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79   mutexes used by
282d0 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
282e0 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74  ) */.sqlite3_mut
282f0 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68  ex *sqlite3Pcach
28300 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73  e1Mutex(void);.s
28310 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
28320 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78  lite3MallocMutex
28330 28 76 6f 69 64 29 3b 0a 0a 23 69 66 20 64 65 66  (void);..#if def
28340 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
28350 4c 45 5f 4d 55 4c 54 49 54 48 52 45 41 44 45 44  LE_MULTITHREADED
28360 5f 43 48 45 43 4b 53 29 20 26 26 20 21 64 65 66  _CHECKS) && !def
28370 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
28380 58 5f 4f 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c  X_OMIT).void sql
28390 69 74 65 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43  ite3MutexWarnOnC
283a0 6f 6e 74 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65  ontention(sqlite
283b0 33 5f 6d 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65  3_mutex*);.#else
283c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
283d0 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74  3MutexWarnOnCont
283e0 65 6e 74 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66  ention(x).#endif
283f0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
28400 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
28410 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  OINT.  int sqlit
28420 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b  e3IsNaN(double);
28430 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28440 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20  sqlite3IsNaN(X) 
28450 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
28460 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
28470 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
28480 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
28490 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
284a0 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  SQL.** functions
284b0 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
284c0 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65  are the paramete
284d0 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66  rs to the printf
284e0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  () function..*/.
284f0 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
28500 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e  uments {.  int n
28510 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
28520 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d      /* Total num
28530 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
28540 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b   */.  int nUsed;
28550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28560 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
28570 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61  ments used so fa
28580 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  r */.  sqlite3_v
28590 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20  alue **apArg;   
285a0 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  /* The argument 
285b0 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68  values */.};..ch
285c0 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
285d0 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
285e0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
285f0 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
28600 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
28610 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
28620 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  st);.#if defined
28630 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
28640 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
28650 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a  _HAVE_OS_TRACE).
28660 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
28670 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  bugPrintf(const 
28680 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
28690 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
286a0 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76  SQLITE_TEST).  v
286b0 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74  oid *sqlite3Test
286c0 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20  TextToPtr(const 
286d0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
286e0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
286f0 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
28700 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
28710 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20  Expr(TreeView*, 
28720 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29  const Expr*, u8)
28730 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
28740 54 72 65 65 56 69 65 77 42 61 72 65 45 78 70 72  TreeViewBareExpr
28750 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
28760 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c  const ExprList*,
28770 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
28780 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
28790 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72  eViewExprList(Tr
287a0 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
287b0 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f  xprList*, u8, co
287c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
287d0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
287e0 65 77 53 72 63 4c 69 73 74 28 54 72 65 65 56 69  ewSrcList(TreeVi
287f0 65 77 2a 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69  ew*, const SrcLi
28800 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
28810 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65  ite3TreeViewSele
28820 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ct(TreeView*, co
28830 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29  nst Select*, u8)
28840 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
28850 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65  TreeViewWith(Tre
28860 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
28870 74 68 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65  th*, u8);.#ifnde
28880 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
28890 4e 44 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20  NDOWFUNC.  void 
288a0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
288b0 69 6e 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c  indow(TreeView*,
288c0 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20   const Window*, 
288d0 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
288e0 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 46 75  te3TreeViewWinFu
288f0 6e 63 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  nc(TreeView*, co
28900 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29  nst Window*, u8)
28910 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
28920 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
28930 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
28940 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
28950 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
28960 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61  lite3ErrorMsg(Pa
28970 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
28980 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
28990 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
289a0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
289b0 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e  3TokenInit(Token
289c0 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  *,char*);.int sq
289d0 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65  lite3KeywordCode
289e0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
289f0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
28a00 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
28a10 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  r(Parse*, const 
28a20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  char*, char **);
28a30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e  .void sqlite3Fin
28a40 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a  ishCoding(Parse*
28a50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
28a60 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29  tTempReg(Parse*)
28a70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
28a80 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72  leaseTempReg(Par
28a90 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  se*,int);.int sq
28aa0 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67  lite3GetTempRang
28ab0 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
28ac0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
28ad0 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  seTempRange(Pars
28ae0 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  e*,int,int);.voi
28af0 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65  d sqlite3ClearTe
28b00 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65  mpRegCache(Parse
28b10 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
28b20 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
28b30 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67  te3NoTempsInRang
28b40 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
28b50 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a  );.#endif.Expr *
28b60 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63  sqlite3ExprAlloc
28b70 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
28b80 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  nst Token*,int);
28b90 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
28ba0 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  pr(sqlite3*,int,
28bb0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
28bc0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74  id sqlite3ExprAt
28bd0 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c  tachSubtrees(sql
28be0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72  ite3*,Expr*,Expr
28bf0 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
28c00 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72  sqlite3PExpr(Par
28c10 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c  se*, int, Expr*,
28c20 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
28c30 6c 69 74 65 33 50 45 78 70 72 41 64 64 53 65 6c  lite3PExprAddSel
28c40 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
28c50 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70  *, Select*);.Exp
28c60 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
28c70 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
28c80 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
28c90 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
28ca0 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
28cb0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ist*, Token*, in
28cc0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28cd0 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
28ce0 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
28cf0 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
28d00 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28  lite3ExprDelete(
28d10 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29  sqlite3*, Expr*)
28d20 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
28d30 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
28d40 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  d(Parse*,ExprLis
28d50 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  t*,Expr*);.ExprL
28d60 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
28d70 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72  ListAppendVector
28d80 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
28d90 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29  *,IdList*,Expr*)
28da0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28db0 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64  prListSetSortOrd
28dc0 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  er(ExprList*,int
28dd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28de0 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50  xprListSetName(P
28df0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
28e00 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
28e10 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
28e20 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c  tSetSpan(Parse*,
28e30 45 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  ExprList*,const 
28e40 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
28e50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28e60 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
28e70 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
28e80 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  t*);.u32 sqlite3
28e90 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f  ExprListFlags(co
28ea0 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nst ExprList*);.
28eb0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28  int sqlite3Init(
28ec0 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a  sqlite3*, char**
28ed0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
28ee0 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a  itCallback(void*
28ef0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63  , int, char**, c
28f00 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
28f10 74 65 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69 74  te3InitOne(sqlit
28f20 65 33 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a  e3*, int, char**
28f30 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
28f40 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65  ite3Pragma(Parse
28f50 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
28f60 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66  Token*,int);.#if
28f70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28f80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f  _VIRTUALTABLE.Mo
28f90 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61  dule *sqlite3Pra
28fa0 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28  gmaVtabRegister(
28fb0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28fc0 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e  har *zName);.#en
28fd0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
28fe0 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
28ff0 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
29000 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
29010 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
29020 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
29030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
29040 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
29050 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
29060 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
29070 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
29080 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
29090 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c  sqlite3DeleteCol
290a0 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33  umnNames(sqlite3
290b0 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  *,Table*);.int s
290c0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f  qlite3ColumnsFro
290d0 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
290e0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c  ,ExprList*,i16*,
290f0 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20  Column**);.void 
29100 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64  sqlite3SelectAdd
29110 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c  ColumnTypeAndCol
29120 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  lation(Parse*,Ta
29130 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54  ble*,Select*);.T
29140 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
29150 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
29160 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  arse*,Select*);.
29170 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
29180 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
29190 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78  e *, int);.Index
291a0 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79   *sqlite3Primary
291b0 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29  KeyIndex(Table*)
291c0 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c  ;.i16 sqlite3Col
291d0 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78  umnOfIndex(Index
291e0 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71  *, i16);.void sq
291f0 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
29200 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
29210 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
29220 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54  ,int);.#if SQLIT
29230 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
29240 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73  COLUMNS.  void s
29250 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
29260 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
29270 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  able*, Column*);
29280 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
29290 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
292a0 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
292b0 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  T,C) /* no-op */
292c0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
292d0 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
292e0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
292f0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
29300 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73  3AddNotNull(Pars
29310 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
29320 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79  qlite3AddPrimary
29330 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
29340 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
29350 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
29360 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74  te3AddCheckConst
29370 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78  raint(Parse*, Ex
29380 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
29390 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
293a0 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  e(Parse*,Expr*,c
293b0 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
293c0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
293d0 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
293e0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
293f0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
29400 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
29410 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75  ,Token*,Token*,u
29420 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  8,Select*);.int 
29430 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
29440 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
29450 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
29460 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
29470 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
29480 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
29490 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20  char **);.Btree 
294a0 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f  *sqlite3DbNameTo
294b0 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63  Btree(sqlite3*,c
294c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69  onst char*);..#i
294d0 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  fdef SQLITE_UNTE
294e0 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20  STABLE.# define 
294f0 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
29500 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c  X) SQLITE_OK.#el
29510 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  se.  int sqlite3
29520 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23  FaultSim(int);.#
29530 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73  endif..Bitvec *s
29540 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61  qlite3BitvecCrea
29550 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  te(u32);.int sql
29560 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42  ite3BitvecTest(B
29570 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
29580 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
29590 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65  estNotNull(Bitve
295a0 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
295b0 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42  lite3BitvecSet(B
295c0 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f  itvec*, u32);.vo
295d0 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
295e0 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75  Clear(Bitvec*, u
295f0 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  32, void*);.void
29600 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65   sqlite3BitvecDe
29610 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a  stroy(Bitvec*);.
29620 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65  u32 sqlite3Bitve
29630 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a  cSize(Bitvec*);.
29640 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
29650 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71  NTESTABLE.int sq
29660 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74  lite3BitvecBuilt
29670 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29  inTest(int,int*)
29680 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74  ;.#endif..RowSet
29690 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49   *sqlite3RowSetI
296a0 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  nit(sqlite3*);.v
296b0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
296c0 74 44 65 6c 65 74 65 28 76 6f 69 64 2a 29 3b 0a  tDelete(void*);.
296d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
296e0 65 74 43 6c 65 61 72 28 76 6f 69 64 2a 29 3b 0a  etClear(void*);.
296f0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
29700 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a  etInsert(RowSet*
29710 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
29720 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f  te3RowSetTest(Ro
29730 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63  wSet*, int iBatc
29740 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  h, i64);.int sql
29750 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52  ite3RowSetNext(R
29760 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a  owSet*, i64*);..
29770 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
29780 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f  teView(Parse*,To
29790 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
297a0 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
297b0 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
297c0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
297d0 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
297e0 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
297f0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
29800 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
29810 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
29820 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
29830 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
29840 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
29850 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
29860 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66  B) 0.#endif..#if
29870 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
29880 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71  CHED>30.  int sq
29890 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
298a0 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e  ro(yDbMask);.#en
298b0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
298c0 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
298d0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
298e0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
298f0 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65  te3CodeDropTable
29900 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
29910 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
29920 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61   sqlite3DeleteTa
29930 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
29940 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
29950 74 65 33 46 72 65 65 49 6e 64 65 78 28 73 71 6c  te3FreeIndex(sql
29960 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
29970 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29980 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
29990 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
299a0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
299b0 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
299c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
299d0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
299e0 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
299f0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
29a00 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
29a10 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
29a20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
29a30 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
29a40 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
29a50 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
29a60 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65  e*, SrcList*, Se
29a70 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
29a80 69 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b 0a 76  int, Upsert*);.v
29a90 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
29aa0 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
29ab0 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
29ac0 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20  *,int*);.IdList 
29ad0 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70  *sqlite3IdListAp
29ae0 70 65 6e 64 28 50 61 72 73 65 2a 2c 20 49 64 4c  pend(Parse*, IdL
29af0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
29b00 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  nt sqlite3IdList
29b10 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f  Index(IdList*,co
29b20 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c  nst char*);.SrcL
29b30 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
29b40 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74  istEnlarge(sqlit
29b50 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  e3*, SrcList*, i
29b60 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73  nt, int);.SrcLis
29b70 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
29b80 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
29b90 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
29ba0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63  n*, Token*);.Src
29bb0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
29bc0 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65  ListAppendFromTe
29bd0 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rm(Parse*, SrcLi
29be0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
29bf0 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c10 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
29c20 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
29c30 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
29c40 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
29c50 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20  IndexedBy(Parse 
29c60 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f  *, SrcList *, To
29c70 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
29c80 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41  ite3SrcListFuncA
29c90 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rgs(Parse*, SrcL
29ca0 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ist*, ExprList*)
29cb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
29cc0 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72  exedByLookup(Par
29cd0 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63  se *, struct Src
29ce0 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f  List_item *);.vo
29cf0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
29d00 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53  tShiftJoinType(S
29d10 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
29d20 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73  qlite3SrcListAss
29d30 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65  ignCursors(Parse
29d40 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  *, SrcList*);.vo
29d50 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  id sqlite3IdList
29d60 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
29d70 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
29d80 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65  sqlite3SrcListDe
29d90 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
29da0 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20  rcList*);.Index 
29db0 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65  *sqlite3Allocate
29dc0 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69  IndexObject(sqli
29dd0 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61  te3*,i16,int,cha
29de0 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
29df0 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
29e00 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
29e10 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
29e20 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
29e30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
29e40 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
29e50 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  *, int, int, u8)
29e60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ;.void sqlite3Dr
29e70 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  opIndex(Parse*, 
29e80 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
29e90 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
29ea0 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  t(Parse*, Select
29eb0 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
29ec0 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
29ed0 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a  SelectNew(Parse*
29ee0 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  ,ExprList*,SrcLi
29ef0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
29f00 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
29f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
29f20 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33  pr*,ExprList*,u3
29f30 32 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  2,Expr*);.void s
29f40 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
29f50 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
29f60 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
29f70 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
29f80 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
29f90 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
29fa0 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
29fb0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
29fc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
29fd0 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
29fe0 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
29ff0 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
2a000 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2a010 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
2a020 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
2a030 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2a040 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
2a050 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
2a060 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
2a070 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
2a080 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2a090 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
2a0a0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2a0b0 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
2a0c0 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45  cList*, Expr*, E
2a0d0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29  xprList*, Expr*)
2a0e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70  ;.void sqlite3Up
2a0f0 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63  date(Parse*, Src
2a100 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
2a110 2c 45 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c  ,Expr*,int,ExprL
2a120 69 73 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20  ist*,Expr*,.    
2a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
2a140 70 73 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e  psert*);.WhereIn
2a150 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65  fo *sqlite3Where
2a160 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63  Begin(Parse*,Src
2a170 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
2a180 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
2a190 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  u16,int);.void s
2a1a0 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57  qlite3WhereEnd(W
2a1b0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45  hereInfo*);.LogE
2a1c0 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  st sqlite3WhereO
2a1d0 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68  utputRowCount(Wh
2a1e0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2a1f0 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
2a200 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a  tinct(WhereInfo*
2a210 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2a220 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65  ereIsOrdered(Whe
2a230 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2a240 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65 72 42  lite3WhereOrderB
2a250 79 4c 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28 57  yLimitOptLabel(W
2a260 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
2a270 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
2a280 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
2a290 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
2a2a0 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
2a2b0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
2a2c0 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
2a2d0 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
2a2e0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
2a2f0 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
2a300 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
2a310 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  ;.#define ONEPAS
2a320 53 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20  S_OFF      0    
2a330 20 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e      /* Use of ON
2a340 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65  EPASS not allowe
2a350 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45  d */.#define ONE
2a360 50 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20  PASS_SINGLE   1 
2a370 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53         /* ONEPAS
2a380 53 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69  S valid for a si
2a390 6e 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20  ngle row update 
2a3a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
2a3b0 53 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20  SS_MULTI    2   
2a3c0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
2a3d0 69 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c  is valid for mul
2a3e0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f  tiple rows */.vo
2a3f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2a400 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d  deLoadIndexColum
2a410 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  n(Parse*, Index*
2a420 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
2a430 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a440 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
2a450 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2a460 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
2a470 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a480 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
2a490 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54  OfTable(Vdbe*, T
2a4a0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
2a4b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2a4c0 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
2a4d0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
2a4e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a4f0 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
2a500 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2a510 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2a520 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65  prCodeCopy(Parse
2a530 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2a540 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a550 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50  CodeFactorable(P
2a560 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
2a570 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
2a580 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61  xprCodeAtInit(Pa
2a590 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a5a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a5b0 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
2a5c0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
2a5d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2a5e0 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
2a5f0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2a600 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a610 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
2a620 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2a630 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2a640 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
2a650 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2a660 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
2a670 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2a680 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
2a690 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
2a6a0 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
2a6b0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2a6c0 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
2a6d0 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
2a6e0 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
2a6f0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
2a700 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20  ITE_ECEL_REF    
2a710 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45    0x04  /* Use E
2a720 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
2a730 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69  erByCol */.#defi
2a740 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f  ne SQLITE_ECEL_O
2a750 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a  MITREF  0x08  /*
2a760 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73   Omit if ExprLis
2a770 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
2a780 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
2a790 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
2a7a0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2a7b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a7c0 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
2a7d0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
2a7e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a7f0 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
2a800 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
2a810 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
2a820 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
2a830 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
2a840 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2a850 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
2a860 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20   LOCATE_VIEW    
2a870 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43  0x01.#define LOC
2a880 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32  ATE_NOERR   0x02
2a890 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
2a8a0 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
2a8b0 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73  *,u32 flags,cons
2a8c0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2a8d0 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
2a8e0 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
2a8f0 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20  Item(Parse*,u32 
2a900 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63  flags,struct Src
2a910 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
2a920 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
2a930 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
2a940 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2a950 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2a960 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2a970 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
2a980 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
2a990 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2a9a0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2a9b0 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
2a9c0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
2a9d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2a9e0 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65  cuum(Parse*,Toke
2a9f0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2aa00 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a  RunVacuum(char**
2aa10 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  , sqlite3*, int)
2aa20 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
2aa30 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c  ameFromToken(sql
2aa40 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
2aa50 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2aa60 6f 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 45 78  ompare(Parse*,Ex
2aa70 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2aa80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2aa90 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78 70  rCompareSkip(Exp
2aaa0 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
2aab0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2aac0 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72  ListCompare(Expr
2aad0 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
2aae0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2aaf0 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78  te3ExprImpliesEx
2ab00 70 72 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  pr(Parse*,Expr*,
2ab10 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
2ab20 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
2ab30 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52 6f 77 28 45  liesNonNullRow(E
2ab40 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  xpr*,int);.void 
2ab50 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
2ab60 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
2ab70 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
2ab80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2ab90 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
2aba0 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
2abb0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2abc0 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65  qlite3ExprCovere
2abd0 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20  dByIndex(Expr*, 
2abe0 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20  int iCur, Index 
2abf0 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69  *pIdx);.int sqli
2ac00 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54  te3FunctionUsesT
2ac10 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72  hisSrc(Expr*, Sr
2ac20 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  cList*);.Vdbe *s
2ac30 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
2ac40 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  rse*);.#ifndef S
2ac50 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
2ac60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
2ac70 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
2ac80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
2ac90 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
2aca0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  oid);.#endif.voi
2acb0 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
2acc0 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e  kAll(sqlite3*,in
2acd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2ace0 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
2acf0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
2ad00 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
2ad10 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61  erifyNamedSchema
2ad20 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2ad30 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20  har *zDb);.void 
2ad40 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e  sqlite3BeginTran
2ad50 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  saction(Parse*, 
2ad60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2ad70 65 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e  e3EndTransaction
2ad80 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
2ad90 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
2ada0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2adb0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2adc0 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
2add0 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
2ade0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
2adf0 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
2ae00 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
2ae10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2ae20 72 49 64 54 6f 54 72 75 65 46 61 6c 73 65 28 45  rIdToTrueFalse(E
2ae30 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2ae40 65 33 45 78 70 72 54 72 75 74 68 56 61 6c 75 65  e3ExprTruthValue
2ae50 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69  (const Expr*);.i
2ae60 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2ae70 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
2ae80 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2ae90 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
2aea0 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
2aeb0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
2aec0 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
2aed0 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  pr*, u8);.int sq
2aee0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
2aef0 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72  antOrGroupBy(Par
2af00 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
2af10 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2af20 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
2af30 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
2af40 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2af50 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
2af60 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  INTS.int sqlite3
2af70 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71  ExprContainsSubq
2af80 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e  uery(Expr*);.#en
2af90 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  dif.int sqlite3E
2afa0 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
2afb0 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
2afc0 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
2afd0 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
2afe0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2aff0 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
2b000 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
2b010 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
2b020 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
2b030 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66 64  nst char*);.#ifd
2b040 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2b050 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 69 6e 74 20 73  _NORMALIZE.int s
2b060 71 6c 69 74 65 33 49 73 52 6f 77 69 64 4e 28 63  qlite3IsRowidN(c
2b070 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
2b080 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2b090 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
2b0a0 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73  Delete(.    Pars
2b0b0 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65  e*,Table*,Trigge
2b0c0 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  r*,int,int,int,i
2b0d0 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29  16,u8,u8,u8,int)
2b0e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
2b0f0 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
2b100 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
2b110 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2b120 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  nt*, int);.int s
2b130 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e  qlite3GenerateIn
2b140 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49  dexKey(Parse*, I
2b150 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
2b160 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78   int, int*,Index
2b170 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2b180 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49  ite3ResolvePartI
2b190 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69  dxLabel(Parse*,i
2b1a0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2b1b0 45 78 70 72 52 65 66 65 72 65 6e 63 65 73 55 70  ExprReferencesUp
2b1c0 64 61 74 65 64 43 6f 6c 75 6d 6e 28 45 78 70 72  datedColumn(Expr
2b1d0 2a 2c 69 6e 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  *,int*,int);.voi
2b1e0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
2b1f0 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
2b200 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
2b210 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
2b220 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b240 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38             u8,u8
2b250 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 55  ,int,int*,int*,U
2b260 70 73 65 72 74 2a 29 3b 0a 23 69 66 64 65 66 20  psert*);.#ifdef 
2b270 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55  SQLITE_ENABLE_NU
2b280 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73  LL_TRIM.  void s
2b290 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63  qlite3SetMakeRec
2b2a0 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c  ordP5(Vdbe*,Tabl
2b2b0 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
2b2c0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61  ine sqlite3SetMa
2b2d0 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a  keRecordP5(A,B).
2b2e0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2b2f0 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
2b300 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
2b310 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
2b320 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
2b330 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
2b340 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
2b350 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2b360 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75   int, u8, int, u
2b370 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  8*, int*, int*);
2b380 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
2b390 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
2b3a0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
2b3b0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b3c0 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
2b3d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b3e0 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
2b3f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
2b400 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
2b410 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63  se*, int, int, c
2b420 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76  har*, i8, u8);.v
2b430 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75  oid sqlite3Uniqu
2b440 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  eConstraint(Pars
2b450 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29  e*, int, Index*)
2b460 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
2b470 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  widConstraint(Pa
2b480 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  rse*, int, Table
2b490 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2b4a0 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
2b4b0 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
2b4c0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
2b4d0 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
2b4e0 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
2b4f0 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
2b500 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
2b510 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
2b520 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
2b530 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
2b540 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
2b550 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
2b560 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
2b570 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
2b580 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2b590 5f 45 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a  _ENABLE_NORMALIZ
2b5a0 45 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  E.FuncDef *sqlit
2b5b0 65 33 46 75 6e 63 74 69 6f 6e 53 65 61 72 63 68  e3FunctionSearch
2b5c0 4e 28 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  N(int,const char
2b5d0 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 76  *,int);.#endif.v
2b5e0 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
2b5f0 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75  tBuiltinFuncs(Fu
2b600 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e  ncDef*,int);.Fun
2b610 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
2b620 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2b630 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
2b640 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  nt,u8,u8);.void 
2b650 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
2b660 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
2b670 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2b680 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
2b690 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
2b6a0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2b6b0 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65  RegisterPerConne
2b6c0 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63  ctionBuiltinFunc
2b6d0 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
2b6e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
2b6f0 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65  tyCheckOk(sqlite
2b700 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2b710 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f  SafetyCheckSickO
2b720 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  rOk(sqlite3*);.v
2b730 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67  oid sqlite3Chang
2b740 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20  eCookie(Parse*, 
2b750 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
2b760 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2b770 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65  VIEW) && !define
2b780 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
2b790 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69  IGGER).void sqli
2b7a0 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69  te3MaterializeVi
2b7b0 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ew(Parse*, Table
2b7c0 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69  *, Expr*, ExprLi
2b7d0 73 74 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  st*,Expr*,int);.
2b7e0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2b7f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2b800 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  GER.  void sqlit
2b810 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50  e3BeginTrigger(P
2b820 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f  arse*, Token*,To
2b830 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c  ken*,int,int,IdL
2b840 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20  ist*,SrcList*,. 
2b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b860 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
2b870 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
2b880 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54  d sqlite3FinishT
2b890 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
2b8a0 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b  riggerStep*, Tok
2b8b0 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  en*);.  void sql
2b8c0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28  ite3DropTrigger(
2b8d0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
2b8e0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2b8f0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
2b900 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69  rPtr(Parse*, Tri
2b910 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  gger*);.  Trigge
2b920 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
2b930 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c  rsExist(Parse *,
2b940 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78   Table*, int, Ex
2b950 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d  prList*, int *pM
2b960 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20  ask);.  Trigger 
2b970 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c  *sqlite3TriggerL
2b980 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
2b990 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  le *);.  void sq
2b9a0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
2b9b0 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
2b9c0 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72  ger *, int, Expr
2b9d0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  List*, int, Tabl
2b9e0 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  e *,.           
2b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba00 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2ba10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2ba20 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
2ba30 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69  ect(Parse *, Tri
2ba40 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  gger *, Table *,
2ba50 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2ba60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69  .  void sqliteVi
2ba70 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65  ewTriggers(Parse
2ba80 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
2ba90 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
2baa0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2bab0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74  3DeleteTriggerSt
2bac0 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  ep(sqlite3*, Tri
2bad0 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72  ggerStep*);.  Tr
2bae0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2baf0 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53  e3TriggerSelectS
2bb00 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  tep(sqlite3*,Sel
2bb10 65 63 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ect*,.          
2bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2bb40 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
2bb50 63 68 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  char*);.  Trigge
2bb60 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
2bb70 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28  iggerInsertStep(
2bb80 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  Parse*,Token*, I
2bb90 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbc0 53 65 6c 65 63 74 2a 2c 75 38 2c 55 70 73 65 72  Select*,u8,Upser
2bbd0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
2bc00 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
2bc10 61 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ar*);.  TriggerS
2bc20 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
2bc30 67 65 72 55 70 64 61 74 65 53 74 65 70 28 50 61  gerUpdateStep(Pa
2bc40 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  rse*,Token*,Expr
2bc50 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38  List*, Expr*, u8
2bc60 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc80 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2bc90 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2bca0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2bcb0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2bcc0 72 44 65 6c 65 74 65 53 74 65 70 28 50 61 72 73  rDeleteStep(Pars
2bcd0 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  e*,Token*, Expr*
2bce0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2bd10 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2bd20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2bd30 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
2bd40 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
2bd50 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
2bd60 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2bd70 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
2bd80 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
2bd90 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  r*);.  u32 sqlit
2bda0 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
2bdb0 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a  (Parse*,Trigger*
2bdc0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69  ,ExprList*,int,i
2bdd0 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  nt,Table*,int);.
2bde0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2bdf0 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
2be00 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
2be10 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65   ? (p)->pTopleve
2be20 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e  l : (p)).# defin
2be30 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65  e sqlite3IsTople
2be40 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
2be50 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65  plevel==0).#else
2be60 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2be70 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42  3TriggersExist(B
2be80 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65  ,C,D,E,F) 0.# de
2be90 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65  fine sqlite3Dele
2bea0 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23  teTrigger(A,B).#
2beb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
2bec0 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c  ropTriggerPtr(A,
2bed0 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
2bee0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2bef0 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29  teTrigger(A,B,C)
2bf00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2bf10 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
2bf20 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c  A,B,C,D,E,F,G,H,
2bf30 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  I).# define sqli
2bf40 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2bf50 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c  rDirect(A,B,C,D,
2bf60 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E,F).# define sq
2bf70 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
2bf80 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e  (X, Y) 0.# defin
2bf90 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
2bfa0 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65  plevel(p) p.# de
2bfb0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f  fine sqlite3IsTo
2bfc0 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65  plevel(p) 1.# de
2bfd0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
2bfe0 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43  gerColmask(A,B,C
2bff0 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64  ,D,E,F,G) 0.#end
2c000 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
2c010 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
2c020 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
2c030 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2c040 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
2c050 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
2c060 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
2c070 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
2c080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2c090 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
2c0a0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
2c0b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c0c0 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
2c0d0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2c0e0 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
2c0f0 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73  *,Schema*,SrcLis
2c100 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2c110 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73  e3AuthCheck(Pars
2c120 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  e*,int, const ch
2c130 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2c140 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2c150 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
2c160 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61  thContextPush(Pa
2c170 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78  rse*, AuthContex
2c180 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2c190 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c1a0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41  AuthContextPop(A
2c1b0 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20  uthContext*);.  
2c1c0 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52  int sqlite3AuthR
2c1d0 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63  eadCol(Parse*, c
2c1e0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
2c1f0 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
2c200 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2c210 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
2c220 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e  a,b,c,d).# defin
2c230 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  e sqlite3AuthChe
2c240 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20  ck(a,b,c,d,e)   
2c250 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
2c260 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
2c270 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63  ontextPush(a,b,c
2c280 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2c290 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
2c2a0 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29  (a)  ((void)(a))
2c2b0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2c2c0 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65  ite3Attach(Parse
2c2d0 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  *, Expr*, Expr*,
2c2e0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2c2f0 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73  lite3Detach(Pars
2c300 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
2c310 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28   sqlite3FixInit(
2c320 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a  DbFixer*, Parse*
2c330 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2c340 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
2c350 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2c360 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72  xSrcList(DbFixer
2c370 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
2c380 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65  t sqlite3FixSele
2c390 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c  ct(DbFixer*, Sel
2c3a0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
2c3b0 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65  e3FixExpr(DbFixe
2c3c0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
2c3d0 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69  sqlite3FixExprLi
2c3e0 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  st(DbFixer*, Exp
2c3f0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
2c400 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74  ite3FixTriggerSt
2c410 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69  ep(DbFixer*, Tri
2c420 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20  ggerStep*);.int 
2c430 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73  sqlite3AtoF(cons
2c440 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c  t char *z, doubl
2c450 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  e*, int, u8);.in
2c460 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  t sqlite3GetInt3
2c470 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  2(const char *, 
2c480 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
2c490 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61  e3Atoi(const cha
2c4a0 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  r*);.#ifndef SQL
2c4b0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69  ITE_OMIT_UTF16.i
2c4c0 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42  nt sqlite3Utf16B
2c4d0 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69  yteLen(const voi
2c4e0 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43  d *pData, int nC
2c4f0 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  har);.#endif.int
2c500 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72   sqlite3Utf8Char
2c510 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Len(const char *
2c520 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65  pData, int nByte
2c530 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74  );.u32 sqlite3Ut
2c540 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a  f8Read(const u8*
2c550 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
2c560 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c  e3LogEst(u64);.L
2c570 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
2c580 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f  EstAdd(LogEst,Lo
2c590 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  gEst);.#ifndef S
2c5a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2c5b0 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73  ALTABLE.LogEst s
2c5c0 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d  qlite3LogEstFrom
2c5d0 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a  Double(double);.
2c5e0 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
2c5f0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2c600 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
2c610 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) || \.    defin
2c620 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2c630 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29  _STAT3_OR_STAT4)
2c640 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
2c650 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e  d(SQLITE_EXPLAIN
2c660 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29  _ESTIMATED_ROWS)
2c670 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45  .u64 sqlite3LogE
2c680 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b  stToInt(LogEst);
2c690 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73  .#endif.VList *s
2c6a0 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28 73  qlite3VListAdd(s
2c6b0 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63  qlite3*,VList*,c
2c6c0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69  onst char*,int,i
2c6d0 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt);.const char 
2c6e0 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d  *sqlite3VListNum
2c6f0 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e  ToName(VList*,in
2c700 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  t);.int sqlite3V
2c710 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c  ListNameToNum(VL
2c720 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
2c730 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  ,int);../*.** Ro
2c740 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
2c750 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
2c760 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
2c770 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
2c780 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
2c790 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
2c7a0 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
2c7b0 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
2c7c0 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
2c7d0 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
2c7e0 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
2c7f0 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  ned char*, u64);
2c800 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
2c810 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
2c820 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
2c830 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
2c840 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
2c850 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2c860 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
2c870 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
2c880 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
2c890 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20   common case is 
2c8a0 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20  for a varint to 
2c8b0 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  be a single byte
2c8c0 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e  .  They followin
2c8d0 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64  g.** macros hand
2c8e0 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
2c8f0 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f  se without a pro
2c900 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74  cedure call, but
2c910 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68   then call.** th
2c920 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20  e procedure for 
2c930 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a  larger varints..
2c940 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
2c950 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
2c960 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
2c970 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
2c980 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
2c990 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
2c9a0 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
2c9b0 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
2c9c0 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
2c9d0 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
2c9e0 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
2c9f0 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
2ca00 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
2ca10 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a  arint((A),(B))).
2ca20 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
2ca30 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
2ca40 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
2ca50 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
2ca60 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
2ca70 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2ca80 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
2ca90 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  r(sqlite3*, Inde
2caa0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2cab0 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56  3TableAffinity(V
2cac0 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
2cad0 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
2cae0 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
2caf0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
2cb00 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
2cb10 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
2cb20 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
2cb30 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
2cb40 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
2cb50 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69  3TableColumnAffi
2cb60 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29  nity(Table*,int)
2cb70 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78  ;.char sqlite3Ex
2cb80 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  prAffinity(Expr 
2cb90 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
2cba0 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74  ite3Atoi64(const
2cbb0 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e   char*, i64*, in
2cbc0 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
2cbd0 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
2cbe0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
2cbf0 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  4*);.void sqlite
2cc00 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71  3ErrorWithMsg(sq
2cc10 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2cc20 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
2cc30 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2cc40 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2cc50 76 6f 69 64 20 73 71 6c 69 74 65 33 53 79 73 74  void sqlite3Syst
2cc60 65 6d 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  emError(sqlite3*
2cc70 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,int);.void *sql
2cc80 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
2cc90 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
2cca0 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
2ccb0 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
2ccc0 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
2ccd0 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
2cce0 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
2ccf0 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2cd00 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69  n **);..#if defi
2cd10 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ned(SQLITE_NEED_
2cd20 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20  ERR_NAME).const 
2cd30 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
2cd40 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
2cd50 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2cd60 5f 45 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c  _ENABLE_DESERIAL
2cd70 49 5a 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  IZE.int sqlite3M
2cd80 65 6d 64 62 49 6e 69 74 28 76 6f 69 64 29 3b 0a  emdbInit(void);.
2cd90 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68  #endif..const ch
2cda0 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74  ar *sqlite3ErrSt
2cdb0 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
2cdc0 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61  te3ReadSchema(Pa
2cdd0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f  rse *pParse);.Co
2cde0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69  llSeq *sqlite3Fi
2cdf0 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65  ndCollSeq(sqlite
2ce00 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74  3*,u8 enc, const
2ce10 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74   char*,int);.int
2ce20 20 73 71 6c 69 74 65 33 49 73 42 69 6e 61 72 79   sqlite3IsBinary
2ce30 28 63 6f 6e 73 74 20 43 6f 6c 6c 53 65 71 2a 29  (const CollSeq*)
2ce40 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2ce50 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28  e3LocateCollSeq(
2ce60 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
2ce70 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29  onst char*zName)
2ce80 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2ce90 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61  e3ExprCollSeq(Pa
2cea0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2ceb0 72 20 2a 70 45 78 70 72 29 3b 0a 43 6f 6c 6c 53  r *pExpr);.CollS
2cec0 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4e  eq *sqlite3ExprN
2ced0 4e 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  NCollSeq(Parse *
2cee0 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45  pParse, Expr *pE
2cef0 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
2cf00 33 45 78 70 72 43 6f 6c 6c 53 65 71 4d 61 74 63  3ExprCollSeqMatc
2cf10 68 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 45  h(Parse*,Expr*,E
2cf20 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
2cf30 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
2cf40 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70  teToken(Parse *p
2cf50 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f  Parse, Expr*, co
2cf60 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  nst Token*, int)
2cf70 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2cf80 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72  xprAddCollateStr
2cf90 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ing(Parse*,Expr*
2cfa0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45  ,const char*);.E
2cfb0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2cfc0 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72  SkipCollate(Expr
2cfd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2cfe0 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73  heckCollSeq(Pars
2cff0 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b  e *, CollSeq *);
2d000 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 72 69 74  .int sqlite3Writ
2d010 61 62 6c 65 53 63 68 65 6d 61 28 73 71 6c 69 74  ableSchema(sqlit
2d020 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2d030 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65  3CheckObjectName
2d040 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20  (Parse *, const 
2d050 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  char *);.void sq
2d060 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
2d070 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  ges(sqlite3 *, i
2d080 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2d090 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  AddInt64(i64*,i6
2d0a0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
2d0b0 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ubInt64(i64*,i64
2d0c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  );.int sqlite3Mu
2d0d0 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  lInt64(i64*,i64)
2d0e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73  ;.int sqlite3Abs
2d0f0 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64  Int32(int);.#ifd
2d100 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2d110 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20  _8_3_NAMES.void 
2d120 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2d130 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  x3(const char*, 
2d140 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
2d150 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69  define sqlite3Fi
2d160 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23  leSuffix3(X,Y).#
2d170 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33  endif.u8 sqlite3
2d180 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
2d190 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63   char *z,u8);..c
2d1a0 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
2d1b0 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69  e3ValueText(sqli
2d1c0 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
2d1d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
2d1e0 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76  eBytes(sqlite3_v
2d1f0 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  alue*, u8);.void
2d200 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2d210 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Str(sqlite3_valu
2d220 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  e*, int, const v
2d230 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20  oid *,u8,.      
2d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d250 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
2d260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2d270 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69  alueSetNull(sqli
2d280 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69  te3_value*);.voi
2d290 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
2d2a0 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
2d2b0 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
2d2c0 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
2d2d0 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23  ew(sqlite3 *);.#
2d2e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d2f0 49 54 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73  IT_UTF16.char *s
2d300 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
2d310 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2d320 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
2d330 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2d340 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
2d350 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
2d360 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
2d370 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
2d380 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2d390 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
2d3a0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
2d3b0 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
2d3c0 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
2d3d0 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
2d3e0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2d3f0 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
2d400 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
2d410 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
2d420 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78  3StrBINARY[];.ex
2d430 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2d440 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2d450 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a  UpperToLower[];.
2d460 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2d470 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2d480 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78  e3CtypeMap[];.ex
2d490 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  tern const Token
2d4a0 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e   sqlite3IntToken
2d4b0 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  s[];.extern SQLI
2d4c0 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71  TE_WSD struct Sq
2d4d0 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69  lite3Config sqli
2d4e0 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72  te3Config;.exter
2d4f0 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  n FuncDefHash sq
2d500 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63  lite3BuiltinFunc
2d510 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
2d520 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
2d530 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
2d540 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
2d550 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64  ndif.#endif.#ifd
2d560 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
2d570 65 78 74 65 72 6e 20 73 71 6c 69 74 65 33 5f 75  extern sqlite3_u
2d580 69 6e 74 36 34 20 73 71 6c 69 74 65 33 4e 50 72  int64 sqlite3NPr
2d590 6f 66 69 6c 65 43 6e 74 3b 0a 23 65 6e 64 69 66  ofileCnt;.#endif
2d5a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
2d5b0 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
2d5c0 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
2d5d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2d5e0 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
2d5f0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2d600 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2d610 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
2d620 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
2d630 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
2d640 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2d650 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2d660 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
2d670 61 6d 65 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  ameColumn(Parse*
2d680 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2d690 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
2d6a0 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
2d6b0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2d6c0 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
2d6d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2d6e0 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 69  ABLE_NORMALIZE.i
2d6f0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
2d700 65 6e 4e 6f 72 6d 61 6c 69 7a 65 64 28 63 6f 6e  enNormalized(con
2d710 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2d720 20 2a 2c 20 69 6e 74 20 2a 2c 20 69 6e 74 20 2a   *, int *, int *
2d730 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2d740 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
2d750 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
2d760 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
2d770 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
2d780 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
2d790 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
2d7a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
2d7b0 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
2d7c0 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
2d7d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2d7e0 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
2d7f0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
2d800 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
2d810 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
2d820 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f  rongNumTermsErro
2d830 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  r(Parse *pParse,
2d840 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74   Select *p);.int
2d850 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
2d860 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
2d870 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2d880 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2d890 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
2d8a0 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
2d8b0 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
2d8c0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  xt*, Expr*);.int
2d8d0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2d8e0 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d  xprListNames(Nam
2d8f0 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c  eContext*, ExprL
2d900 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
2d910 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74  te3ResolveSelect
2d920 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65  Names(Parse*, Se
2d930 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2d940 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
2d950 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66  e3ResolveSelfRef
2d960 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61  erence(Parse*,Ta
2d970 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45  ble*,int,Expr*,E
2d980 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
2d990 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64  qlite3ResolveOrd
2d9a0 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  erGroupBy(Parse*
2d9b0 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c  , Select*, ExprL
2d9c0 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
2d9d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2d9e0 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64  ColumnDefault(Vd
2d9f0 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  be *, Table *, i
2da00 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2da10 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73  qlite3AlterFinis
2da20 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  hAddColumn(Parse
2da30 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
2da40 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42  id sqlite3AlterB
2da50 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61  eginAddColumn(Pa
2da60 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
2da70 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2da80 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61 70 28 50  RenameTokenMap(P
2da90 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c 20 54 6f  arse*, void*, To
2daa0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2dab0 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 52 65  te3RenameTokenRe
2dac0 6d 61 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64  map(Parse*, void
2dad0 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a 70 46 72   *pTo, void *pFr
2dae0 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  om);.void sqlite
2daf0 33 52 65 6e 61 6d 65 45 78 70 72 55 6e 6d 61 70  3RenameExprUnmap
2db00 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
2db10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6e  .void sqlite3Ren
2db20 61 6d 65 45 78 70 72 6c 69 73 74 55 6e 6d 61 70  ameExprlistUnmap
2db30 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2db40 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  t*);.CollSeq *sq
2db50 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
2db60 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
2db70 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
2db80 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
2db90 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
2dba0 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f 6c 75 6d  nst char*, Colum
2dbb0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2dbc0 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
2dbd0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
2dbe0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
2dbf0 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
2dc00 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20 73 71 6c  usyHandler*, sql
2dc10 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a 69 6e 74  ite3_file*);.int
2dc20 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
2dc30 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2dc40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2dc50 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
2dc60 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2dc70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
2dc80 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
2dc90 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
2dca0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
2dcb0 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
2dcc0 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
2dcd0 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
2dce0 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
2dcf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2dd00 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
2dd10 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
2dd20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2dd30 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
2dd40 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
2dd50 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
2dd60 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
2dd70 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
2dd80 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
2dd90 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
2dda0 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
2ddb0 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
2ddc0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
2ddd0 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
2dde0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2ddf0 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
2de00 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
2de10 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
2de20 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
2de30 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2de40 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
2de50 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2de60 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
2de70 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
2de80 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2de90 74 65 33 4b 65 79 49 6e 66 6f 46 72 6f 6d 45 78  te3KeyInfoFromEx
2dea0 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
2deb0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2dec0 6e 74 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  nt);..#ifdef SQL
2ded0 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
2dee0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
2def0 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
2df00 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2df10 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
2df20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2df30 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
2df40 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69  t, void *,.  voi
2df50 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2df60 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2df70 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
2df80 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2df90 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2dfa0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2dfb0 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c   .  void (*)(sql
2dfc0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
2dfd0 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2dfe0 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
2dff0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2e000 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2e010 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2e020 20 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74   .  FuncDestruct
2e030 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
2e040 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
2e050 6f 6f 70 44 65 73 74 72 75 63 74 6f 72 28 76 6f  oopDestructor(vo
2e060 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
2e070 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74  e3OomFault(sqlit
2e080 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
2e090 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74  e3OomClear(sqlit
2e0a0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2e0b0 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33  3ApiExit(sqlite3
2e0c0 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   *db, int);.int 
2e0d0 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
2e0e0 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
2e0f0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ;..void sqlite3S
2e100 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
2e110 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ccum*, sqlite3*,
2e120 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
2e130 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
2e140 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
2e150 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
2e160 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
2e170 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
2e180 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
2e190 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
2e1a0 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
2e1b0 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
2e1c0 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
2e1d0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
2e1e0 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
2e1f0 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
2e200 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
2e210 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
2e220 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
2e230 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  u8 *);..#ifndef 
2e240 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
2e250 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33  UERY.int sqlite3
2e260 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73  ExprCheckIN(Pars
2e270 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73  e*, Expr*);.#els
2e280 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2e290 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c  e3ExprCheckIN(x,
2e2a0 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e  y) SQLITE_OK.#en
2e2b0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2e2c0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
2e2d0 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
2e2e0 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
2e2f0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
2e300 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
2e310 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20  beSetValue(.    
2e320 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
2e330 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
2e340 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  xpr*,int,int,int
2e350 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2e360 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70  tat4ValueFromExp
2e370 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
2e380 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
2e390 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ue**);.void sqli
2e3a0 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65  te3Stat4ProbeFre
2e3b0 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  e(UnpackedRecord
2e3c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2e3d0 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74  tat4Column(sqlit
2e3e0 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  e3*, const void*
2e3f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69  , int, int, sqli
2e400 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68  te3_value**);.ch
2e410 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43  ar sqlite3IndexC
2e420 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71  olumnAffinity(sq
2e430 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20  lite3*, Index*, 
2e440 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  int);.#endif../*
2e450 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
2e460 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
2e470 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
2e480 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2e490 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20  E_AMALGAMATION. 
2e4a0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61   void *sqlite3Pa
2e4b0 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28  rserAlloc(void*(
2e4c0 2a 29 28 75 36 34 29 2c 20 50 61 72 73 65 2a 29  *)(u64), Parse*)
2e4d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2e4e0 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
2e4f0 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
2e500 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2e510 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
2e520 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 29 3b  d*, int, Token);
2e530 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
2e540 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e 74 29 3b  erFallback(int);
2e550 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
2e560 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
2e570 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
2e580 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
2e590 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
2e5a0 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
2e5b0 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
2e5c0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2e5d0 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
2e5e0 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
2e5f0 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
2e600 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2e610 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2e620 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2e630 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
2e640 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e650 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
2e660 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
2e670 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
2e680 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
2e690 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2e6a0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2e6b0 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
2e6c0 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
2e6d0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2e6e0 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
2e6f0 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
2e700 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
2e710 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2e720 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2e730 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
2e740 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
2e750 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
2e760 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
2e770 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
2e780 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2e790 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
2e7a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2e7b0 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
2e7c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2e7d0 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
2e7e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2e7f0 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65  tabLock(X).#  de
2e800 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2e810 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
2e820 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
2e830 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
2e840 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2e850 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
2e860 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
2e870 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2e880 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
2e890 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
2e8a0 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
2e8b0 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
2e8c0 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
2e8d0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2e8e0 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
2e8f0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
2e900 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
2e910 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
2e920 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65  qlite3 *db, Vdbe
2e930 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
2e940 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73  e3VtabRollback(s
2e950 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2e960 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2e970 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64  ommit(sqlite3 *d
2e980 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  b);.   void sqli
2e990 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62  te3VtabLock(VTab
2e9a0 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2e9b0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2e9c0 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
2e9d0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
2e9e0 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65  nlockList(sqlite
2e9f0 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  3*);.   int sqli
2ea00 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
2ea10 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c  (sqlite3 *, int,
2ea20 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73   int);.   void s
2ea30 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2ea40 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71  Errmsg(Vdbe*, sq
2ea50 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20  lite3_vtab*);.  
2ea60 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33   VTable *sqlite3
2ea70 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65  GetVTable(sqlite
2ea80 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  3*, Table*);.   
2ea90 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 56  Module *sqlite3V
2eaa0 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  tabCreateModule(
2eab0 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a  .     sqlite3*,.
2eac0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2ead0 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71 6c  ,.     const sql
2eae0 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20  ite3_module*,.  
2eaf0 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76     void*,.     v
2eb00 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20  oid(*)(void*).  
2eb10 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71   );.#  define sq
2eb20 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2eb30 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
2eb40 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
2eb50 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
2eb60 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2eb70 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e  EponymousTableIn
2eb80 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65  it(Parse*,Module
2eb90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2eba0 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
2ebb0 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  leClear(sqlite3*
2ebc0 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20  ,Module*);.void 
2ebd0 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
2ebe0 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
2ebf0 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
2ec00 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
2ec10 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
2ec20 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2ec30 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2ec40 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
2ec50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2ec60 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2ec70 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
2ec80 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
2ec90 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
2eca0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2ecb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2ecc0 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
2ecd0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2ece0 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
2ecf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2ed00 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
2ed10 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
2ed20 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2ed30 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
2ed40 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2ed50 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2ed60 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
2ed70 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
2ed80 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
2ed90 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
2eda0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
2edb0 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
2edc0 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 73 71  nArg, Expr*);.sq
2edd0 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
2ede0 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69  te3StmtCurrentTi
2edf0 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  me(sqlite3_conte
2ee00 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
2ee10 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
2ee20 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  dex(Vdbe*, const
2ee30 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
2ee40 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  t sqlite3Transfe
2ee50 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  rBindings(sqlite
2ee60 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65  3_stmt *, sqlite
2ee70 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20  3_stmt *);.void 
2ee80 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73  sqlite3ParserRes
2ee90 65 74 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  et(Parse*);.#ifd
2eea0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2eeb0 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 76 6f 69 64 20  _NORMALIZE.void 
2eec0 73 71 6c 69 74 65 33 4e 6f 72 6d 61 6c 69 7a 65  sqlite3Normalize
2eed0 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
2eee0 61 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  ar*, int, u8);.#
2eef0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2ef00 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
2ef10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2ef20 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
2ef30 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
2ef40 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
2ef50 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
2ef60 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
2ef70 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
2ef80 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
2ef90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
2efa0 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
2efb0 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
2efc0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
2efd0 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
2efe0 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
2eff0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
2f000 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
2f010 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
2f020 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2f030 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
2f040 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
2f050 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
2f060 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2f070 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
2f080 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54  f SQLITE_OMIT_CT
2f090 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65  E.  With *sqlite
2f0a0 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c  3WithAdd(Parse*,
2f0b0 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  With*,Token*,Exp
2f0c0 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b  rList*,Select*);
2f0d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
2f0e0 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ithDelete(sqlite
2f0f0 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69  3*,With*);.  voi
2f100 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  d sqlite3WithPus
2f110 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c  h(Parse*, With*,
2f120 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66   u8);.#else.#def
2f130 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50  ine sqlite3WithP
2f140 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69  ush(x,y,z).#defi
2f150 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  ne sqlite3WithDe
2f160 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66  lete(x,y).#endif
2f170 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f180 4f 4d 49 54 5f 55 50 53 45 52 54 0a 20 20 55 70  OMIT_UPSERT.  Up
2f190 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73  sert *sqlite3Ups
2f1a0 65 72 74 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c  ertNew(sqlite3*,
2f1b0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
2f1c0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
2f1d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f1e0 55 70 73 65 72 74 44 65 6c 65 74 65 28 73 71 6c  UpsertDelete(sql
2f1f0 69 74 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ite3*,Upsert*);.
2f200 20 20 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65    Upsert *sqlite
2f210 33 55 70 73 65 72 74 44 75 70 28 73 71 6c 69 74  3UpsertDup(sqlit
2f220 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20  e3*,Upsert*);.  
2f230 69 6e 74 20 73 71 6c 69 74 65 33 55 70 73 65 72  int sqlite3Upser
2f240 74 41 6e 61 6c 79 7a 65 54 61 72 67 65 74 28 50  tAnalyzeTarget(P
2f250 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55  arse*,SrcList*,U
2f260 70 73 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20  psert*);.  void 
2f270 73 71 6c 69 74 65 33 55 70 73 65 72 74 44 6f 55  sqlite3UpsertDoU
2f280 70 64 61 74 65 28 50 61 72 73 65 2a 2c 55 70 73  pdate(Parse*,Ups
2f290 65 72 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65  ert*,Table*,Inde
2f2a0 78 2a 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  x*,int);.#else.#
2f2b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70  define sqlite3Up
2f2c0 73 65 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c  sertNew(v,w,x,y,
2f2d0 7a 29 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a  z) ((Upsert*)0).
2f2e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55  #define sqlite3U
2f2f0 70 73 65 72 74 44 65 6c 65 74 65 28 78 2c 79 29  psertDelete(x,y)
2f300 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2f310 55 70 73 65 72 74 44 75 70 28 78 2c 79 29 20 20  UpsertDup(x,y)  
2f320 20 20 20 20 20 28 28 55 70 73 65 72 74 2a 29 30       ((Upsert*)0
2f330 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65  ).#endif.../* De
2f340 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
2f350 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
2f360 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
2f370 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
2f380 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
2f390 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
2f3a0 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
2f3b0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
2f3c0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
2f3d0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
2f3e0 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
2f3f0 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
2f400 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
2f410 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
2f420 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
2f430 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
2f440 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
2f450 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
2f460 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
2f470 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
2f480 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
2f490 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65  ty is.** provide
2f4a0 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  d (enforcement o
2f4b0 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  f FK constraints
2f4c0 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72   requires the tr
2f4d0 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65  iggers sub-syste
2f4e0 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  m)..*/.#if !defi
2f4f0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2f500 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
2f510 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2f520 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
2f530 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68  void sqlite3FkCh
2f540 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  eck(Parse*, Tabl
2f550 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
2f560 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
2f570 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
2f580 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
2f590 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
2f5a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2f5b0 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
2f5c0 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
2f5d0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  *, int, int*, in
2f5e0 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
2f5f0 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73  3FkRequired(Pars
2f600 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a  e*, Table*, int*
2f610 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71  , int);.  u32 sq
2f620 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50  lite3FkOldmask(P
2f630 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
2f640 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46    FKey *sqlite3F
2f650 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c  kReferences(Tabl
2f660 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  e *);.#else.  #d
2f670 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41  efine sqlite3FkA
2f680 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65  ctions(a,b,c,d,e
2f690 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
2f6a0 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62  lite3FkCheck(a,b
2f6b0 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
2f6c0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  ine sqlite3FkDro
2f6d0 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20  pTable(a,b,c).  
2f6e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2f6f0 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20  kOldmask(a,b)   
2f700 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e        0.  #defin
2f710 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  e sqlite3FkRequi
2f720 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20  red(a,b,c,d)    
2f730 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2f740 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
2f750 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64  a)        0.#end
2f760 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2f770 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2f780 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
2f790 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
2f7a0 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
2f7b0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
2f7c0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
2f7d0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
2f7e0 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
2f7f0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2f800 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
2f810 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2f820 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
2f830 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
2f840 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
2f850 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
2f860 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
2f870 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
2f880 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
2f890 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
2f8a0 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
2f8b0 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
2f8c0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
2f8d0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
2f8e0 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
2f8f0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
2f900 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
2f910 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
2f920 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
2f930 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
2f940 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
2f950 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
2f960 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73  UNTESTABLE.** is
2f970 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
2f980 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f990 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f 69  UNTESTABLE.  voi
2f9a0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  d sqlite3BeginBe
2f9b0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
2f9c0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2f9d0 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
2f9e0 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23  void);.#else.  #
2f9f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65  define sqlite3Be
2fa00 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
2fa10 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2fa20 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
2fa30 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  oc().#endif../*.
2fa40 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  ** Allowed retur
2fa50 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
2fa60 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
2fa70 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ().*/.#define IN
2fa80 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20  _INDEX_ROWID    
2fa90 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63      1   /* Searc
2faa0 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  h the rowid of t
2fab0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  he table */.#def
2fac0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48  ine IN_INDEX_EPH
2fad0 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a            2   /*
2fae0 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d   Search an ephem
2faf0 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23  eral b-tree */.#
2fb00 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2fb10 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20  INDEX_ASC    3  
2fb20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
2fb30 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  ex ASCENDING */.
2fb40 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2fb50 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20  _INDEX_DESC   4 
2fb60 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2fb70 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a  dex DESCENDING *
2fb80 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2fb90 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20  EX_NOOP         
2fba0 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20  5   /* No table 
2fbb0 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63  available. Use c
2fbc0 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a  omparisons */./*
2fbd0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67  .** Allowed flag
2fbe0 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61  s for the 3rd pa
2fbf0 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
2fc00 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e  e3FindInIndex().
2fc10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
2fc20 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20  NDEX_NOOP_OK    
2fc30 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74   0x0001  /* OK t
2fc40 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45  o return IN_INDE
2fc50 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e  X_NOOP */.#defin
2fc60 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45  e IN_INDEX_MEMBE
2fc70 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f  RSHIP  0x0002  /
2fc80 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
2fc90 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69  ed for membershi
2fca0 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e  p test */.#defin
2fcb0 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20  e IN_INDEX_LOOP 
2fcc0 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
2fcd0 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
2fce0 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a  ed as a loop */.
2fcf0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
2fd00 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
2fd10 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74  Expr *, u32, int
2fd20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73  *, int*);..int s
2fd30 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
2fd40 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
2fd50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
2fd60 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
2fd70 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
2fd80 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
2fd90 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
2fda0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2fdb0 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49  ITE_ENABLE_ATOMI
2fdc0 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64  C_WRITE) \. || d
2fdd0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
2fde0 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49  ABLE_BATCH_ATOMI
2fdf0 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73  C_WRITE).  int s
2fe00 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65  qlite3JournalCre
2fe10 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ate(sqlite3_file
2fe20 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74   *);.#endif..int
2fe30 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49   sqlite3JournalI
2fe40 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65  sInMemory(sqlite
2fe50 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64  3_file *p);.void
2fe60 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
2fe70 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
2fe80 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  ile *);..void sq
2fe90 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
2fea0 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65  htAndFlags(Parse
2feb0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
2fec0 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  p);.#if SQLITE_M
2fed0 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
2fee0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c    int sqlite3Sel
2fef0 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65  ectExprHeight(Se
2ff00 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73  lect *);.  int s
2ff10 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
2ff20 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e  eight(Parse*, in
2ff30 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  t);.#else.  #def
2ff40 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
2ff50 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
2ff60 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2ff70 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
2ff80 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
2ff90 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
2ffa0 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
2ffb0 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
2ffc0 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
2ffd0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2ffe0 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
2fff0 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
30000 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
30010 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
30020 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
30030 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
30040 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
30050 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
30060 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
30070 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
30080 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
30090 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
300a0 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
300b0 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
300c0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
300d0 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
300e0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
300f0 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
30100 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
30110 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
30120 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
30130 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
30140 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  r *);.#endif.#if
30150 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52   defined(YYCOVER
30160 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  AGE).  int sqlit
30170 65 33 50 61 72 73 65 72 43 6f 76 65 72 61 67 65  e3ParserCoverage
30180 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a  (FILE*);.#endif.
30190 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
301a0 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
301b0 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
301c0 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
301d0 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
301e0 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
301f0 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
30200 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
30210 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
30220 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
30230 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
30240 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
30250 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  CE.# define IOTR
30260 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69  ACE(A)  if( sqli
30270 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71  te3IoTrace ){ sq
30280 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20  lite3IoTrace A; 
30290 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  }.  void sqlite3
302a0 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56  VdbeIOTraceSql(V
302b0 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50  dbe*);.SQLITE_AP
302c0 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  I SQLITE_EXTERN 
302d0 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45  void (SQLITE_CDE
302e0 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61  CL *sqlite3IoTra
302f0 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ce)(const char*,
30300 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ...);.#else.# de
30310 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a  fine IOTRACE(A).
30320 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
30330 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58  VdbeIOTraceSql(X
30340 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
30350 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61  These routines a
30360 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  re available for
30370 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75   the mem2.c debu
30380 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c  gging memory all
30390 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20  ocator.** only. 
303a0 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74   They are used t
303b0 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69  o verify that di
303c0 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20  fferent "types" 
303d0 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c  of memory.** all
303e0 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  ocations are pro
303f0 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79  perly tracked by
30400 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a   the system..**.
30410 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
30420 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73  ugSetType() sets
30430 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61   the "type" of a
30440 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20  n allocation to 
30450 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45  one of.** the ME
30460 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64  MTYPE_* macros d
30470 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54  efined below.  T
30480 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20  he type must be 
30490 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a  a bitmask with.*
304a0 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73  * a single bit s
304b0 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  et..**.** sqlite
304c0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
304d0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
304e0 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69  if any of the bi
304f0 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
30500 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
30510 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
30520 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
30530 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
30540 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c  etType()..** sql
30550 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
30560 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65  ype() is intende
30570 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  d for use inside
30580 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
30590 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  ents..**.** sqli
305a0 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
305b0 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
305c0 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
305d0 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
305e0 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
305f0 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
30600 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
30610 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
30620 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a  gSetType()..**.*
30630 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f  * Perhaps the mo
30640 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69  st important poi
30650 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72  nt is the differ
30660 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d  ence between MEM
30670 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64  TYPE_HEAP.** and
30680 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
30690 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63  DE.  If an alloc
306a0 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45  ation is MEMTYPE
306b0 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74  _LOOKASIDE, that
306c0 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67   means.** it mig
306d0 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  ht have been all
306e0 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73  ocated by lookas
306f0 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20  ide, except the 
30700 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a  allocation was.*
30710 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c  * too large or l
30720 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72  ookaside was alr
30730 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69  eady full.  It i
30740 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76  s important to v
30750 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c  erify.** that al
30760 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  locations that m
30770 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73  ight have been s
30780 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b  atisfied by look
30790 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a  aside are not.**
307a0 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20   passed back to 
307b0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
307c0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20  ee() routines.  
307d0 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20  Asserts such as 
307e0 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61  the.** example a
307f0 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20  bove are placed 
30800 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61  on the non-looka
30810 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
30820 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a  ines to verify.*
30830 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  * this constrain
30840 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  t..**.** All of 
30850 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
30860 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
30870 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
30880 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
30890 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
308a0 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
308b0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
308c0 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
308d0 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
308e0 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
308f0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
30900 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
30910 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30920 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
30930 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
30940 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
30950 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
30960 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
30970 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
30980 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
30990 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
309a0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
309b0 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
309c0 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
309d0 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
309e0 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
309f0 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
30a00 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
30a10 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
30a20 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
30a30 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
30a40 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61  DE  0x02  /* Hea
30a50 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  p that might hav
30a60 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65  e been lookaside
30a70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
30a80 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30  YPE_PCACHE     0
30a90 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63  x04  /* Page cac
30aa0 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  he allocations *
30ab0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69  /../*.** Threadi
30ac0 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a  ng interface.*/.
30ad0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  #if SQLITE_MAX_W
30ae0 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a  ORKER_THREADS>0.
30af0 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
30b00 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68  dCreate(SQLiteTh
30b10 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28  read**,void*(*)(
30b20 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69  void*),void*);.i
30b30 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
30b40 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61  Join(SQLiteThrea
30b50 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e  d*, void**);.#en
30b60 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
30b70 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  (SQLITE_ENABLE_D
30b80 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64  BPAGE_VTAB) || d
30b90 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
30ba0 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  ST).int sqlite3D
30bb0 62 70 61 67 65 52 65 67 69 73 74 65 72 28 73 71  bpageRegister(sq
30bc0 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a  lite3*);.#endif.
30bd0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
30be0 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54  TE_ENABLE_DBSTAT
30bf0 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65  _VTAB) || define
30c00 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69  d(SQLITE_TEST).i
30c10 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74  nt sqlite3Dbstat
30c20 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
30c30 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
30c40 73 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f  sqlite3ExprVecto
30c50 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70  rSize(Expr *pExp
30c60 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  r);.int sqlite3E
30c70 78 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72  xprIsVector(Expr
30c80 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
30c90 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65  sqlite3VectorFie
30ca0 6c 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c  ldSubexpr(Expr*,
30cb0 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
30cc0 69 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f  ite3ExprForVecto
30cd0 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78  rField(Parse*,Ex
30ce0 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  pr*,int);.void s
30cf0 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f  qlite3VectorErro
30d00 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70  rMsg(Parse*, Exp
30d10 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  r*);..#ifndef SQ
30d20 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
30d30 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f  EOPTION_DIAGS.co
30d40 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74  nst char **sqlit
30d50 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  e3CompileOptions
30d60 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65  (int *pnOpt);.#e
30d70 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
30d80 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a     SQLITEINT_H */.