/ Hex Artifact Content
Login

Artifact 866311ac436c0c2039fccc7ea976fbc79d40c1c2ea687161fa4ba64379b53ae6:


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 20 20 20 20 20 20 20 20 30 78  GACY          0x
b9d0: 34 30 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68  40     /* Use th
b9e0: 65 20 6c 65 67 61 63 79 20 78 54 72 61 63 65 20  e legacy xTrace 
b9f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba00: 45 5f 54 52 41 43 45 5f 58 50 52 4f 46 49 4c 45  E_TRACE_XPROFILE
ba10: 20 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20          0x80    
ba20: 20 2f 2a 20 55 73 65 20 74 68 65 20 6c 65 67 61   /* Use the lega
ba30: 63 79 20 78 50 72 6f 66 69 6c 65 20 2a 2f 0a 23  cy xProfile */.#
ba40: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c  else.#define SQL
ba50: 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
ba60: 20 20 20 20 20 20 20 20 20 20 30 0a 23 64 65 66            0.#def
ba70: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
ba80: 5f 58 50 52 4f 46 49 4c 45 20 20 20 20 20 20 20  _XPROFILE       
ba90: 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   0.#endif /* SQL
baa0: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
bab0: 54 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  TED */.#define S
bac0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4e 4f 4e 4c  QLITE_TRACE_NONL
bad0: 45 47 41 43 59 5f 4d 41 53 4b 20 20 30 78 30 66  EGACY_MASK  0x0f
bae0: 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 66       /* Normal f
baf0: 6c 61 67 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  lags */.../*.** 
bb00: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  Each database co
bb10: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69  nnection is an i
bb20: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
bb30: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
bb40: 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71  re..*/.struct sq
bb50: 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65  lite3 {.  sqlite
bb60: 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20  3_vfs *pVfs;    
bb70: 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e          /* OS In
bb80: 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72  terface */.  str
bb90: 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b  uct Vdbe *pVdbe;
bba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
bbb0: 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72  st of active vir
bbc0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f  tual machines */
bbd0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c  .  CollSeq *pDfl
bbe0: 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  tColl;          
bbf0: 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20   /* The default 
bc00: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
bc10: 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20  ce (BINARY) */. 
bc20: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
bc30: 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f  mutex;         /
bc40: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  * Connection mut
bc50: 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b  ex */.  Db *aDb;
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc70: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63        /* All bac
bc80: 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  kends */.  int n
bc90: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
bca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bcb0: 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63  er of backends c
bcc0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
bcd0: 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c 61 67  */.  u32 mDbFlag
bce0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
bcf0: 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65 63 6f     /* flags reco
bd00: 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c 20 73  rding internal s
bd10: 74 61 74 65 20 2a 2f 0a 20 20 75 36 34 20 66 6c  tate */.  u64 fl
bd20: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61 67 73          /* flags
bd40: 20 73 65 74 74 61 62 6c 65 20 62 79 20 70 72 61   settable by pra
bd50: 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  gmas. See below 
bd60: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
bd70: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
bd80: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
bd90: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
bda0: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
bdb0: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdd0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
bde0: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
bdf0: 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61 4c 6f  .  u32 nSchemaLo
be00: 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
be10: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73 65 74   /* Do not reset
be20: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
be30: 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 75   non-zero */.  u
be40: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
be50: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
be60: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
be70: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
be80: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
be90: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
bea0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
beb0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
bec0: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
bed0: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bef0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
bf00: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
bf10: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
bf20: 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20   int iSysErrno; 
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf40: 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72  * Errno value fr
bf50: 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65  om last system e
bf60: 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62  rror */.  u16 db
bf70: 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20  OptFlags;       
bf80: 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73          /* Flags
bf90: 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62   to enable/disab
bfa0: 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  le optimizations
bfb0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfd0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
bfe0: 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74  ding */.  u8 aut
bff0: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
c000: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
c010: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
c020: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
c030: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
c040: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
c050: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
c060: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
c070: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
c080: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
c090: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
c0a0: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
c0b0: 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d  */.  u8 bBenignM
c0c0: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
c0d0: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71     /* Do not req
c0e0: 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75  uire OOMs if tru
c0f0: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
c100: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
c110: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
c120: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
c130: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
c140: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
c150: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
c160: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
c170: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
c180: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
c190: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
c1a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
c1b0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
c1c0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
c1d0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
c1e0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
c1f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
c200: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
c210: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
c220: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
c230: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
c240: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
c250: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
c260: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
c270: 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20  */.  u8 mTrace; 
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c290: 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f     /* zero or mo
c2a0: 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20  re SQLITE_TRACE 
c2b0: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 6e 6f  flags */.  u8 no
c2c0: 53 68 61 72 65 64 43 61 63 68 65 3b 20 20 20 20  SharedCache;    
c2d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
c2e0: 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61   if no shared-ca
c2f0: 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  che backends */.
c300: 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20    u8 nSqlExec;  
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c320: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e  /* Number of pen
c330: 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20  ding OP_SqlExec 
c340: 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74  opcodes */.  int
c350: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
c360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
c370: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
c380: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75  UUM if >0 */.  u
c390: 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20  32 magic;       
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c3b0: 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72  Magic number for
c3c0: 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20   detect library 
c3d0: 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  misuse */.  int 
c3e0: 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  nChange;        
c3f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
c400: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
c410: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
c420: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c   */.  int nTotal
c430: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
c440: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
c450: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
c460: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
c470: 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74   */.  int aLimit
c480: 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d  [SQLITE_N_LIMIT]
c490: 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f  ;   /* Limits */
c4a0: 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65  .  int nMaxSorte
c4b0: 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  rMmap;          
c4c0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65   /* Maximum size
c4d0: 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70   of regions mapp
c4e0: 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a  ed by sorter */.
c4f0: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
c500: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
c510: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
c520: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
c530: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
c540: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c560: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
c570: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
c580: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44  zed */.    u8 iD
c590: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c5a0: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
c5b0: 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67  db file is being
c5c0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
c5d0: 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20      u8 busy;    
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65  /* TRUE if curre
c600: 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e  ntly initializin
c610: 67 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  g */.    unsigne
c620: 64 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 20  d orphanTrigger 
c630: 3a 20 31 3b 20 2f 2a 20 4c 61 73 74 20 73 74 61  : 1; /* Last sta
c640: 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e  tement is orphan
c650: 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20  ed TEMP trigger 
c660: 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
c670: 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 20 3a 20  imposterTable : 
c680: 31 3b 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61  1; /* Building a
c690: 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65  n imposter table
c6a0: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
c6b0: 20 72 65 6f 70 65 6e 4d 65 6d 64 62 20 3a 20 31   reopenMemdb : 1
c6c0: 3b 20 20 20 2f 2a 20 41 54 54 41 43 48 20 69 73  ;   /* ATTACH is
c6d0: 20 72 65 61 6c 6c 79 20 61 20 72 65 6f 70 65 6e   really a reopen
c6e0: 20 75 73 69 6e 67 20 4d 65 6d 44 42 20 2a 2f 0a   using MemDB */.
c6f0: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
c700: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
c710: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c720: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
c730: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
c740: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
c750: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
c760: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c770: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c780: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
c790: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
c7a0: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
c7b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c7c0: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c7d0: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
c7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
c7f0: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
c800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c810: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
c820: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
c830: 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20  int nVDestroy;  
c840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c850: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c860: 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70  e OP_VDestroy op
c870: 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  erations */.  in
c880: 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  t nExtension;   
c890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c8a0: 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20  umber of loaded 
c8b0: 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20  extensions */.  
c8c0: 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f  void **aExtensio
c8d0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
c8e0: 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64   Array of shared
c8f0: 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73   library handles
c900: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61   */.  int (*xTra
c910: 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f  ce)(u32,void*,vo
c920: 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20  id*,void*);     
c930: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
c940: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
c950: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c980: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
c990: 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  on */.#ifndef SQ
c9a0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
c9b0: 41 54 45 44 0a 20 20 76 6f 69 64 20 28 2a 78 50  ATED.  void (*xP
c9c0: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
c9d0: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
c9e0: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
c9f0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
ca00: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
ca30: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
ca40: 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ction */.#endif.
ca50: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
ca60: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
ca70: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
ca80: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
ca90: 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ck() */.  int (*
caa0: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
cab0: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
cac0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
cad0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
cae0: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb00: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
cb10: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
cb20: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52  ) */.  void (*xR
cb30: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
cb40: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
cb50: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
cb60: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
cb70: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
cb80: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
cb90: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
cba0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
cbb0: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
cbc0: 69 6e 74 36 34 29 3b 0a 20 20 50 61 72 73 65 20  int64);.  Parse 
cbd0: 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
cbe0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
cbf0: 6e 74 20 70 61 72 73 65 20 2a 2f 0a 23 69 66 64  nt parse */.#ifd
cc00: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
cc10: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
cc20: 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61    void *pPreUpda
cc30: 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  teArg;          
cc40: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
cc50: 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43  t to xPreUpdateC
cc60: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
cc70: 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61  d (*xPreUpdateCa
cc80: 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65  llback)(   /* Re
cc90: 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73  gistered using s
cca0: 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65  qlite3_preupdate
ccb0: 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76  _hook() */.    v
ccc0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
ccd0: 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68  t,char const*,ch
cce0: 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65  ar const*,sqlite
ccf0: 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f  3_int64,sqlite3_
cd00: 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65  int64.  );.  Pre
cd10: 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61  Update *pPreUpda
cd20: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  te;        /* Co
cd30: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
cd40: 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c   pre-update call
cd50: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  back */.#endif /
cd60: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
cd70: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a  PREUPDATE_HOOK *
cd80: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
cd90: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
cda0: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
cdb0: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
cdc0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
cdd0: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
cde0: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
cdf0: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
ce00: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
ce10: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
ce20: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
ce30: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
ce40: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
ce50: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
ce60: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
ce70: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
ce80: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
ce90: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
cea0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
ceb0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
cec0: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
ced0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
cee0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
cef0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
cf00: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
cf10: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
cf20: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
cf30: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
cf40: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
cf50: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
cf60: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
cf70: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
cf80: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
cf90: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
cfa0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
cfb0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
cfc0: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
cfd0: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
cfe0: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
cff0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
d000: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
d010: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
d020: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
d030: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
d040: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
d050: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
d060: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
d070: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
d080: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
d090: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
d0a0: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
d0b0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
d0c0: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
d0d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
d0e0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
d0f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
d100: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
d110: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
d120: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
d130: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
d140: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
d150: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
d160: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
d170: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
d180: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
d190: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
d1a0: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
d1b0: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
d1c0: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
d1d0: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
d1e0: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
d1f0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
d200: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
d210: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
d220: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
d230: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
d240: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
d250: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
d260: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
d270: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
d280: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
d290: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
d2a0: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
d2b0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
d2c0: 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69  sconnect these i
d2d0: 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70  n next sqlite3_p
d2e0: 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64  repare() */.#end
d2f0: 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b  if.  Hash aFunc;
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d310: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
d320: 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66   of connection f
d330: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61  unctions */.  Ha
d340: 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20  sh aCollSeq;    
d350: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
d360: 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ll collating seq
d370: 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79  uences */.  Busy
d380: 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64  Handler busyHand
d390: 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73  ler;      /* Bus
d3a0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
d3b0: 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b  Db aDbStatic[2];
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d3d0: 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f   Static space fo
d3e0: 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20  r the 2 default 
d3f0: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61  backends */.  Sa
d400: 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
d410: 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  int;        /* L
d420: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61  ist of active sa
d430: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
d440: 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20  t busyTimeout;  
d450: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
d460: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65  usy handler time
d470: 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a  out, in msec */.
d480: 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74    int nSavepoint
d490: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d4a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  /* Number of non
d4b0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
d4c0: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
d4d0: 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20   nStatement;    
d4e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d4f0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73  mber of nested s
d500: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
d510: 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20  tions  */.  i64 
d520: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
d530: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
d540: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
d550: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
d560: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34  action. */.  i64
d570: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
d580: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  s;         /* Ne
d590: 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64  t deferred immed
d5a0: 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  iate constraints
d5b0: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
d5c0: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
d5d0: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
d5e0: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
d5f0: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
d600: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
d610: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
d620: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
d630: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
d640: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
d650: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
d660: 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75  C_MASTER.  ** mu
d670: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
d680: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
d690: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
d6a0: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20   in notify.c..  
d6b0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
d6c0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
d6d0: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
d6e0: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
d6f0: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
d700: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
d710: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
d720: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
d730: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
d740: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
d750: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
d760: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
d770: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
d780: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
d790: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
d7a0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
d7b0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
d7c0: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
d7d0: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
d7e0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
d7f0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
d800: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
d810: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
d820: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
d830: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
d840: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
d850: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
d860: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
d870: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d890: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
d8a0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
d8b0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
d8c0: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
d8d0: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
d8e0: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
d8f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
d900: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
d910: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
d920: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
d930: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
d940: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
d950: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
d960: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
d970: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
d980: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
d990: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
d9a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
d9b0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
d9c0: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
d9d0: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
d9e0: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
d9f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
da00: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
da10: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
da20: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
da30: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
da40: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
da50: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
da60: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
da70: 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  .flags..**.** Va
da80: 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
da90: 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
daa0: 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
dab0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
dac0: 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46  c     == PAGER_F
dad0: 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20  ULLFSYNC.**     
dae0: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
daf0: 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43  FSync == PAGER_C
db00: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a  KPT_FULLFSYNC.**
db10: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63        SQLITE_Cac
db20: 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41  heSpill    == PA
db30: 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a  GER_CACHE_SPILL.
db40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
db50: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
db60: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
db70: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
db80: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64  ITE_MASTER */.#d
db90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
dba0: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
dbb0: 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74  000002  /* Creat
dbc0: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
dbd0: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
dbe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
dbf0: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
dc00: 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77  0000004  /* Show
dc10: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
dc20: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
dc30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
dc40: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
dc50: 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65  00000008  /* Use
dc60: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
dc70: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
dc80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
dc90: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
dca0: 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66  000010  /* Use f
dcb0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
dcc0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
dcd0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65  ine SQLITE_Cache
dce0: 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30  Spill     0x0000
dcf0: 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73  0020  /* OK to s
dd00: 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65  pill pager cache
dd10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd20: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
dd30: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
dd40: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
dd50: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
dd60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
dd70: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
dd80: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
dd90: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
dda0: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
dde0: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
ddf0: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
de30: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
de40: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
de50: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
de60: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
de70: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
de80: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
de90: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
ded0: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
dee0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
def0: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
df00: 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  000200  /* Do no
df10: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
df20: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
df30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
df40: 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30  adUncommit   0x0
df50: 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44  0000400  /* READ
df60: 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20   UNCOMMITTED in 
df70: 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a  shared-cache */.
df80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
df90: 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78  oCkptOnClose  0x
dfa0: 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20  00000800  /* No 
dfb0: 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c  checkpoint on cl
dfc0: 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a  ose()/DETACH */.
dfd0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
dfe0: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
dff0: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76  00001000  /* Rev
e000: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
e010: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
e020: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
e030: 67 65 72 73 20 20 20 20 30 78 30 30 30 30 32 30  gers    0x000020
e040: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
e050: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
e060: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e070: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
e080: 20 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a    0x00004000  /*
e090: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
e0a0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
e0b0: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
e0c0: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
e0d0: 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f     0x00008000  /
e0e0: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
e0f0: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
e100: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
e110: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
e120: 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  010000  /* Enabl
e130: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
e140: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e150: 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20  TE_LoadExtFunc  
e160: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
e170: 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74   Enable load_ext
e180: 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e  ension() SQL fun
e190: 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  c */.#define SQL
e1a0: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
e1b0: 72 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f  r  0x00040000  /
e1c0: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
e1d0: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
e1e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
e1f0: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 30 30  rFKs       0x000
e200: 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  80000  /* Defer 
e210: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
e220: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
e230: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
e240: 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20      0x00100000  
e250: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
e260: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
e270: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65  define SQLITE_Ce
e280: 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30  llSizeCk     0x0
e290: 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63  0200000  /* Chec
e2a0: 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a  k btree cell siz
e2b0: 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64  es on load */.#d
e2c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73  efine SQLITE_Fts
e2d0: 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30  3Tokenizer  0x00
e2e0: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
e2f0: 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72  e fts3_tokenizer
e300: 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  (2) */.#define S
e310: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47  QLITE_EnableQPSG
e320: 20 20 20 20 20 30 78 30 30 38 30 30 30 30 30 20       0x00800000 
e330: 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65   /* Query Planne
e340: 72 20 53 74 61 62 69 6c 69 74 79 20 47 75 61 72  r Stability Guar
e350: 61 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20  antee*/.#define 
e360: 53 51 4c 49 54 45 5f 54 72 69 67 67 65 72 45 51  SQLITE_TriggerEQ
e370: 50 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30  P     0x01000000
e380: 20 20 2f 2a 20 53 68 6f 77 20 74 72 69 67 67 65    /* Show trigge
e390: 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  r EXPLAIN QUERY 
e3a0: 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  PLAN */.#define 
e3b0: 53 51 4c 49 54 45 5f 52 65 73 65 74 44 61 74 61  SQLITE_ResetData
e3c0: 62 61 73 65 20 20 30 78 30 32 30 30 30 30 30 30  base  0x02000000
e3d0: 20 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 64    /* Reset the d
e3e0: 61 74 61 62 61 73 65 20 2a 2f 0a 23 64 65 66 69  atabase */.#defi
e3f0: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
e400: 41 6c 74 65 72 20 20 20 20 30 78 30 34 30 30 30  Alter    0x04000
e410: 30 30 30 20 20 2f 2a 20 4c 65 67 61 63 79 20 41  000  /* Legacy A
e420: 4c 54 45 52 20 54 41 42 4c 45 20 62 65 68 61 76  LTER TABLE behav
e430: 69 6f 75 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  iour */.#define 
e440: 53 51 4c 49 54 45 5f 4e 6f 53 63 68 65 6d 61 45  SQLITE_NoSchemaE
e450: 72 72 6f 72 20 20 30 78 30 38 30 30 30 30 30 30  rror  0x08000000
e460: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 70 6f    /* Do not repo
e470: 72 74 20 73 63 68 65 6d 61 20 70 61 72 73 65 20  rt schema parse 
e480: 65 72 72 6f 72 73 2a 2f 0a 23 64 65 66 69 6e 65  errors*/.#define
e490: 20 53 51 4c 49 54 45 5f 44 65 66 65 6e 73 69 76   SQLITE_Defensiv
e4a0: 65 20 20 20 20 20 20 30 78 31 30 30 30 30 30 30  e      0x1000000
e4b0: 30 20 20 2f 2a 20 49 6e 70 75 74 20 53 51 4c 20  0  /* Input SQL 
e4c0: 69 73 20 6c 69 6b 65 6c 79 20 68 6f 73 74 69 6c  is likely hostil
e4d0: 65 20 2a 2f 0a 0a 2f 2a 20 46 6c 61 67 73 20 75  e */../* Flags u
e4e0: 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65 62 75  sed only if debu
e4f0: 67 67 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  gging */.#define
e500: 20 48 49 28 58 29 20 20 28 28 75 36 34 29 28 58   HI(X)  ((u64)(X
e510: 29 3c 3c 33 32 29 0a 23 69 66 64 65 66 20 53 51  )<<32).#ifdef SQ
e520: 4c 49 54 45 5f 44 45 42 55 47 0a 23 64 65 66 69  LITE_DEBUG.#defi
e530: 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61  ne SQLITE_SqlTra
e540: 63 65 20 20 20 20 20 20 20 48 49 28 30 78 30 30  ce       HI(0x00
e550: 30 31 29 20 20 2f 2a 20 44 65 62 75 67 20 70 72  01)  /* Debug pr
e560: 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78  int SQL as it ex
e570: 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ecutes */.#defin
e580: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e SQLITE_VdbeLis
e590: 74 69 6e 67 20 20 20 20 48 49 28 30 78 30 30 30  ting    HI(0x000
e5a0: 32 29 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73  2)  /* Debug lis
e5b0: 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72  tings of VDBE pr
e5c0: 6f 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ogs */.#define S
e5d0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
e5e0: 20 20 20 20 20 48 49 28 30 78 30 30 30 34 29 20       HI(0x0004) 
e5f0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
e600: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
e610: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e620: 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63  TE_VdbeAddopTrac
e630: 65 20 48 49 28 30 78 30 30 30 38 29 20 20 2f 2a  e HI(0x0008)  /*
e640: 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64   Trace sqlite3Vd
e650: 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20  beAddOp() calls 
e660: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e670: 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20  E_VdbeEQP       
e680: 20 48 49 28 30 78 30 30 31 30 29 20 20 2f 2a 20   HI(0x0010)  /* 
e690: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
e6a0: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66  ERY PLAN */.#def
e6b0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 61 72 73 65  ine SQLITE_Parse
e6c0: 72 54 72 61 63 65 20 20 20 20 48 49 28 30 78 30  rTrace    HI(0x0
e6d0: 30 32 30 29 20 20 2f 2a 20 50 52 41 47 4d 41 20  020)  /* PRAGMA 
e6e0: 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f 4e 20  parser_trace=ON 
e6f0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
e700: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
e710: 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62 46  for sqlite3.mDbF
e720: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
e730: 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61  DBFLAG_SchemaCha
e740: 6e 67 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a  nge   0x0001  /*
e750: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
e760: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
e770: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
e780: 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20  G_PreferBuiltin 
e790: 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65 66   0x0002  /* Pref
e7a0: 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d  erence to built-
e7b0: 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66  in funcs */.#def
e7c0: 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75  ine DBFLAG_Vacuu
e7d0: 6d 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34  m         0x0004
e7e0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69    /* Currently i
e7f0: 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64  n a VACUUM */.#d
e800: 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63  efine DBFLAG_Vac
e810: 75 75 6d 49 6e 74 6f 20 20 20 20 20 30 78 30 30  uumInto     0x00
e820: 30 38 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79  08  /* Currently
e830: 20 72 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20   running VACUUM 
e840: 49 4e 54 4f 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INTO */.#define 
e850: 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f  DBFLAG_SchemaKno
e860: 77 6e 4f 6b 20 20 30 78 30 30 31 30 20 20 2f 2a  wnOk  0x0010  /*
e870: 20 53 63 68 65 6d 61 20 69 73 20 6b 6e 6f 77 6e   Schema is known
e880: 20 74 6f 20 62 65 20 76 61 6c 69 64 20 2a 2f 0a   to be valid */.
e890: 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74  ./*.** Bits of t
e8a0: 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74  he sqlite3.dbOpt
e8b0: 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74  Flags field that
e8c0: 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65   are used by the
e8d0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
e8e0: 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f  _control(SQLITE_
e8f0: 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a  TESTCTRL_OPTIMIZ
e900: 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65  ATIONS,...) inte
e910: 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65  rface to.** sele
e920: 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20  ctively disable 
e930: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
e940: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
e950: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c  e SQLITE_QueryFl
e960: 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20  attener 0x0001  
e970: 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65   /* Query flatte
e980: 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ning */.#define 
e990: 53 51 4c 49 54 45 5f 57 69 6e 64 6f 77 46 75 6e  SQLITE_WindowFun
e9a0: 63 20 20 20 20 20 30 78 30 30 30 32 20 20 20 2f  c     0x0002   /
e9b0: 2a 20 55 73 65 20 78 49 6e 76 65 72 73 65 20 66  * Use xInverse f
e9c0: 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  or window functi
e9d0: 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
e9e0: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
e9f0: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
ea00: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
ea10: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
ea20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
ea30: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
ea40: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
ea50: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65  factoring */.#de
ea60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
ea70: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 31  inctOpt    0x001
ea80: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
ea90: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
eaa0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eab0: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
eac0: 78 30 30 32 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0020   /* Cover
ead0: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
eae0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eaf0: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
eb00: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 4f 52 44   0x0040   /* ORD
eb10: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
eb20: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
eb30: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73  ine SQLITE_Trans
eb40: 69 74 69 76 65 20 20 20 20 20 30 78 30 30 38 30  itive     0x0080
eb50: 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65     /* Transitive
eb60: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
eb70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
eb80: 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78  mitNoopJoin   0x
eb90: 30 31 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75  0100   /* Omit u
eba0: 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20  nused tables in 
ebb0: 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  joins */.#define
ebc0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56   SQLITE_CountOfV
ebd0: 69 65 77 20 20 20 20 30 78 30 32 30 30 20 20 20  iew    0x0200   
ebe0: 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d  /* The count-of-
ebf0: 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f  view optimizatio
ec00: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ec10: 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20  ITE_CursorHints 
ec20: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 41     0x0400   /* A
ec30: 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74  dd OP_CursorHint
ec40: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66   opcodes */.#def
ec50: 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33  ine SQLITE_Stat3
ec60: 34 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30  4         0x0800
ec70: 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20     /* Use STAT3 
ec80: 6f 72 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f  or STAT4 data */
ec90: 0a 20 20 20 2f 2a 20 54 48 33 20 65 78 70 65 63  .   /* TH3 expec
eca0: 74 73 20 74 68 65 20 53 74 61 74 33 34 20 20 5e  ts the Stat34  ^
ecb0: 5e 5e 5e 5e 5e 20 76 61 6c 75 65 20 74 6f 20 62  ^^^^^ value to b
ecc0: 65 20 30 78 30 38 30 30 2e 20 20 44 6f 6e 27 74  e 0x0800.  Don't
ecd0: 20 63 68 61 6e 67 65 20 69 74 20 2a 2f 0a 23 64   change it */.#d
ece0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 75 73  efine SQLITE_Pus
ecf0: 68 44 6f 77 6e 20 20 20 20 20 20 20 30 78 31 30  hDown       0x10
ed00: 30 30 20 20 20 2f 2a 20 54 68 65 20 70 75 73 68  00   /* The push
ed10: 2d 64 6f 77 6e 20 6f 70 74 69 6d 69 7a 61 74 69  -down optimizati
ed20: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
ed30: 4c 49 54 45 5f 53 69 6d 70 6c 69 66 79 4a 6f 69  LITE_SimplifyJoi
ed40: 6e 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20  n   0x2000   /* 
ed50: 43 6f 6e 76 65 72 74 20 4c 45 46 54 20 4a 4f 49  Convert LEFT JOI
ed60: 4e 20 74 6f 20 4a 4f 49 4e 20 2a 2f 0a 23 64 65  N to JOIN */.#de
ed70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 6b 69 70  fine SQLITE_Skip
ed80: 53 63 61 6e 20 20 20 20 20 20 20 30 78 34 30 30  Scan       0x400
ed90: 30 20 20 20 2f 2a 20 53 6b 69 70 2d 73 63 61 6e  0   /* Skip-scan
eda0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
edb0: 49 54 45 5f 50 72 6f 70 61 67 61 74 65 43 6f 6e  ITE_PropagateCon
edc0: 73 74 20 30 78 38 30 30 30 20 20 20 2f 2a 20 54  st 0x8000   /* T
edd0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f 70  he constant prop
ede0: 61 67 61 74 69 6f 6e 20 6f 70 74 20 2a 2f 0a 23  agation opt */.#
edf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
ee00: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
ee10: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
ee20: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
ee30: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
ee40: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
ee50: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
ee60: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
ee70: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
ee80: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
ee90: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
eea0: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
eeb0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
eec0: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
eed0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
eee0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
eef0: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
ef00: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a  gs&(mask))==0)..
ef10: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
ef20: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
ef30: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
ef40: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
ef50: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
ef60: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
ef70: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
ef80: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
ef90: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
efa0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
efb0: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
efc0: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
efd0: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
efe0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
eff0: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
f000: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
f010: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
f020: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
f030: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
f040: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
f050: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
f060: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
f070: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
f080: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
f090: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
f0a0: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
f0b0: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
f0c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
f0d0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
f0e0: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
f0f0: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
f100: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
f110: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
f120: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
f130: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
f140: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
f150: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
f160: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
f170: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
f180: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
f190: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f1a0: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
f1b0: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
f1c0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
f1d0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
f1e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f1f0: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
f200: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
f210: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
f220: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
f230: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
f240: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
f250: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
f260: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
f270: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
f280: 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20  re.  For global 
f290: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
f2a0: 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28 29  ns (ex: substr()
f2b0: 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29  , max(), count()
f2c0: 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  ).** a pointer t
f2d0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
f2e0: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
f2f0: 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
f300: 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a  nctions object..
f310: 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65  ** For per-conne
f320: 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f  ction applicatio
f330: 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
f340: 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74  ons, a pointer t
f350: 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  o this.** struct
f360: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
f370: 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73  he db->aHash has
f380: 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  h table..**.** T
f390: 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64  he u.pHash field
f3a0: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
f3b0: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73  global built-ins
f3c0: 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72 75  .  The u.pDestru
f3d0: 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73  ctor.** field is
f3e0: 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e   used by per-con
f3f0: 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20  nection app-def 
f400: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74  functions..*/.st
f410: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
f420: 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20   i8 nArg;       
f430: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f440: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
f450: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
f460: 64 20 2a 2f 0a 20 20 75 33 32 20 66 75 6e 63 46  d */.  u32 funcF
f470: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
f480: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
f490: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
f4a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
f4b0: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
f4c0: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
f4d0: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
f4e0: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
f4f0: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
f500: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
f510: 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28   void (*xSFunc)(
f520: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
f530: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
f540: 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f  ue**); /* func o
f550: 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  r agg-step */.  
f560: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
f570: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
f580: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
f590: 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e        /* Agg fin
f5a0: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64  alizer */.  void
f5b0: 20 28 2a 78 56 61 6c 75 65 29 28 73 71 6c 69 74   (*xValue)(sqlit
f5c0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
f5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5e0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 67 67    /* Current agg
f5f0: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 76 6f 69 64   value */.  void
f600: 20 28 2a 78 49 6e 76 65 72 73 65 29 28 73 71 6c   (*xInverse)(sql
f610: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
f620: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
f630: 2a 29 3b 20 2f 2a 20 69 6e 76 65 72 73 65 20 61  *); /* inverse a
f640: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 63 6f 6e  gg-step */.  con
f650: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
f660: 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66    /* SQL name of
f670: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a   the function. *
f680: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
f690: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
f6a0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
f6b0: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
f6c0: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
f6d0: 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63  hash */.    Func
f6e0: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
f6f0: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
f700: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
f710: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
f720: 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  ion */.  } u;.};
f730: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
f740: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
f750: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
f760: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
f770: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
f780: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
f790: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
f7a0: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
f7b0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
f7c0: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
f7d0: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
f7e0: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
f7f0: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
f800: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
f810: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
f820: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
f830: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
f840: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
f850: 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  is set to.** the
f860: 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44   number of FuncD
f870: 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74  ef objects creat
f880: 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20  ed (either 1 or 
f890: 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  3, depending on 
f8a0: 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f  whether.** or no
f8b0: 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
f8c0: 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49  encoding is SQLI
f8d0: 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e  TE_ANY). The Fun
f8e0: 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72  cDef.pDestructor
f8f0: 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61  .** member of ea
f900: 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75  ch of the new Fu
f910: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
f920: 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
f930: 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a   the allocated.*
f940: 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  * FuncDestructor
f950: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74  ..**.** Thereaft
f960: 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20  er, when one of 
f970: 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  the FuncDef obje
f980: 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20  cts is deleted, 
f990: 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a  the reference.**
f9a0: 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f   count on this o
f9b0: 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65  bject is decreme
f9c0: 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65  nted. When it re
f9d0: 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73  aches 0, the des
f9e0: 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e  tructor.** is in
f9f0: 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75  voked and the Fu
fa00: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72  ncDestructor str
fa10: 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f  ucture freed..*/
fa20: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74  .struct FuncDest
fa30: 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e  ructor {.  int n
fa40: 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  Ref;.  void (*xD
fa50: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
fa60: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
fa70: 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ta;.};../*.** Po
fa80: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
fa90: 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e  r FuncDef.flags.
faa0: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
fab0: 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50  _LENGTH and _TYP
fac0: 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75  EOF.** values mu
fad0: 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  st correspond to
fae0: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
faf0: 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
fb00: 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20  EOFARG.  And.** 
fb10: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
fb20: 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65  TANT must be the
fb30: 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f   same as SQLITE_
fb40: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20  DETERMINISTIC.  
fb50: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
fb60: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
fb70: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
fb80: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a  verify this..**.
fb90: 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
fba0: 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
fbb0: 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
fbc0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
fbd0: 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e  _MINMAX    ==  N
fbe0: 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
fbf0: 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
fc00: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
fc10: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d  UNC_LENGTH    ==
fc20: 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
fc30: 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  RG.**     SQLITE
fc40: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20  _FUNC_TYPEOF    
fc50: 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ==  OPFLAG_TYPEO
fc60: 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  FARG.**     SQLI
fc70: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
fc80: 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54    ==  SQLITE_DET
fc90: 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20  ERMINISTIC from 
fca0: 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53  the API.**     S
fcb0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
fcc0: 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20  SK   depends on 
fcd0: 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72  SQLITE_UTF* macr
fce0: 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f  os in the API.*/
fcf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fd00: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
fd10: 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  0003 /* SQLITE_U
fd20: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
fd30: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
fd40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
fd50: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
fd60: 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  x0004 /* Candida
fd70: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
fd80: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
fd90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
fda0: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
fdb0: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
fdc0: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
fdd0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
fde0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fdf0: 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20  EPHEM    0x0010 
fe00: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
fe10: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
fe20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
fe30: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
fe40: 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65  0x0020 /* sqlite
fe50: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
fe60: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
fe70: 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  d*/.#define SQLI
fe80: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
fe90: 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74   0x0040 /* Built
fea0: 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  -in length() fun
feb0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
fec0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
fed0: 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20  EOF   0x0080 /* 
fee0: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
fef0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
ff00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ff10: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30  C_COUNT    0x010
ff20: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
ff30: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
ff40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ff50: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
ff60: 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74   0x0200 /* Built
ff70: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
ff80: 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64  r ifnull() */.#d
ff90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ffa0: 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30  C_UNLIKELY 0x040
ffb0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
ffc0: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
ffd0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ffe0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fff0: 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73  T 0x0800 /* Cons
10000 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
10010 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
10020 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ut */.#define SQ
10030 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
10040 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75     0x1000 /* Tru
10050 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
10060 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
10070 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
10080 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
10090 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77   0x2000 /* "Slow
100a0 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20   Change". Value 
100b0 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20  constant during 
100c0 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a.              
100d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100e0 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20        ** single 
100f0 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68  query - might ch
10100 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a  ange over time *
10110 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10120 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30  _FUNC_AFFINITY 0
10130 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x4000 /* Built-i
10140 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e  n affinity() fun
10150 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
10160 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4f 46 46   SQLITE_FUNC_OFF
10170 53 45 54 20 20 20 30 78 38 30 30 30 20 2f 2a 20  SET   0x8000 /* 
10180 42 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65 5f  Built-in sqlite_
10190 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f  offset() functio
101a0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
101b0 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 20  ITE_FUNC_WINDOW 
101c0 20 20 30 78 30 30 30 31 30 30 30 30 20 2f 2a 20    0x00010000 /* 
101d0 42 75 69 6c 74 2d 69 6e 20 77 69 6e 64 6f 77 2d  Built-in window-
101e0 6f 6e 6c 79 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  only function */
101f0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10200 46 55 4e 43 5f 49 4e 54 45 52 4e 41 4c 20 30 78  FUNC_INTERNAL 0x
10210 30 30 30 34 30 30 30 30 20 2f 2a 20 46 6f 72 20  00040000 /* For 
10220 75 73 65 20 62 79 20 4e 65 73 74 65 64 50 61 72  use by NestedPar
10230 73 65 28 29 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a  se() only */../*
10240 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
10250 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
10260 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
10270 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
10280 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
10290 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
102a0 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
102b0 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
102c0 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
102d0 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
102e0 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
102f0 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
10300 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
10310 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
10320 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
10330 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
10340 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
10350 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
10360 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
10370 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
10380 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
10390 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
103a0 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
103b0 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
103c0 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
103d0 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
103e0 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
103f0 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
10400 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a  he function. If.
10410 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
10420 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
10430 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
10440 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
10450 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
10460 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
10470 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10480 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
10490 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
104a0 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
104b0 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
104c0 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
104d0 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
104e0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
104f0 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
10500 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
10510 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
10520 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
10530 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
10540 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
10550 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
10560 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
10570 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
10580 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
10590 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
105a0 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
105b0 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
105c0 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
105d0 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
105e0 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
105f0 20 20 54 68 65 20 69 41 72 67 20 69 73 20 69 67    The iArg is ig
10600 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73 65 72  nored.  The user
10610 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79 73 20  -data is always 
10620 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20 61 20  set.**     to a 
10630 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
10640 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
10650 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
10660 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54 45 28  .**   PURE_DATE(
10670 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10680 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
10690 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72 20 22  *     Used for "
106a0 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d 65 20  pure" date/time 
106b0 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69 73 20  functions, this 
106c0 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20 44 46  macro is like DF
106d0 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20 20 65  UNCTION.**     e
106e0 78 63 65 70 74 20 74 68 61 74 20 69 74 20 64 6f  xcept that it do
106f0 65 73 20 73 65 74 20 74 68 65 20 53 51 4c 49 54  es set the SQLIT
10700 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
10710 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69 73 0a  flags.  iArg is.
10720 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64 20 61  **     ignored a
10730 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  nd the user-data
10740 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e 63 74   for these funct
10750 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f 20 61  ions is set to a
10760 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69 74 72  n .**     arbitr
10770 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69  ary non-NULL poi
10780 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
10790 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
107a0 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  used..**.**   AG
107b0 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
107c0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
107d0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
107e0 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
107f0 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
10800 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
10810 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
10820 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
10830 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
10840 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
10850 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
10860 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
10870 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
10880 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
10890 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
108a0 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
108b0 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
108c0 2a 0a 2a 2a 20 20 20 57 46 55 4e 43 54 49 4f 4e  *.**   WFUNCTION
108d0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
108e0 72 67 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  rg, xStep, xFina
108f0 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49 6e 76 65  l, xValue, xInve
10900 72 73 65 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  rse).**     Used
10910 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
10920 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10930 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
10940 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
10950 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
10960 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
10970 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
10980 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
10990 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
109a0 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
109b0 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
109c0 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
109d0 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
109e0 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
109f0 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
10a00 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
10a10 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
10a20 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
10a30 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
10a40 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
10a50 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
10a60 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
10a70 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
10a80 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
10a90 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
10aa0 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
10ab0 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
10ac0 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
10ad0 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
10ae0 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
10af0 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
10b00 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
10b10 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
10b20 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
10b30 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
10b40 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
10b50 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
10b60 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
10b70 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
10b80 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
10b90 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10ba0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10bb0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10bc0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
10bd0 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
10be0 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
10bf0 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
10c00 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
10c10 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
10c20 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10c30 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10c40 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
10c50 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10c60 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10c70 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10c80 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10c90 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10ca0 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10cb0 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
10cc0 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  xFunc, 0, 0, 0, 
10cd0 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10ce0 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
10cf0 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10d00 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
10d10 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10d20 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
10d30 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20  LITE_UTF8, \.   
10d40 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  0, 0, xFunc, 0, 
10d50 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  0, 0, #zName, {0
10d60 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45  } }.#define PURE
10d70 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
10d80 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
10d90 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
10da0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
10db0 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
10dc0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10dd0 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64  TANT, \.   (void
10de0 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  *)&sqlite3Config
10df0 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10e00 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10e10 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
10e20 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
10e30 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10e40 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
10e50 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
10e60 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10e70 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
10e80 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10e90 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
10ea0 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
10eb0 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
10ec0 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30  , xFunc, 0, 0, 0
10ed0 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10ee0 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
10ef0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
10f00 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
10f10 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10f20 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10f30 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NG|SQLITE_UTF8|(
10f40 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
10f50 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
10f60 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
10f70 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  0, 0, 0, #zName,
10f80 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
10f90 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
10fa0 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
10fb0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10fc0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10fd0 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
10fe0 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
10ff0 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
11000 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
11010 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
11020 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
11030 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
11040 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61  tep, xFinal, xVa
11050 6c 75 65 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  lue) \.  {nArg, 
11060 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
11070 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
11080 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
11090 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
110a0 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
110b0 6e 61 6c 2c 78 56 61 6c 75 65 2c 30 2c 23 7a 4e  nal,xValue,0,#zN
110c0 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e  ame, {0}}.#defin
110d0 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61  e AGGREGATE2(zNa
110e0 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
110f0 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
11100 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
11110 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
11120 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
11130 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
11140 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20  xtraFlags, \.   
11150 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
11160 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
11170 2c 78 46 69 6e 61 6c 2c 78 46 69 6e 61 6c 2c 30  ,xFinal,xFinal,0
11180 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64  ,#zName, {0}}.#d
11190 65 66 69 6e 65 20 57 41 47 47 52 45 47 41 54 45  efine WAGGREGATE
111a0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
111b0 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
111c0 69 6e 61 6c 2c 20 78 56 61 6c 75 65 2c 20 78 49  inal, xValue, xI
111d0 6e 76 65 72 73 65 2c 20 66 29 20 5c 0a 20 20 7b  nverse, f) \.  {
111e0 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
111f0 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
11200 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 66 2c 20 5c  C_NEEDCOLL)|f, \
11210 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
11220 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
11230 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c  Step,xFinal,xVal
11240 75 65 2c 78 49 6e 76 65 72 73 65 2c 23 7a 4e 61  ue,xInverse,#zNa
11250 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65  me, {0}}.#define
11260 20 49 4e 54 45 52 4e 41 4c 5f 46 55 4e 43 54 49   INTERNAL_FUNCTI
11270 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
11280 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
11290 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 49 4e  , SQLITE_FUNC_IN
112a0 54 45 52 4e 41 4c 7c 53 51 4c 49 54 45 5f 55 54  TERNAL|SQLITE_UT
112b0 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  F8|SQLITE_FUNC_C
112c0 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 30 2c  ONSTANT, \.   0,
112d0 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
112e0 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
112f0 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  }.../*.** All cu
11300 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
11310 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
11320 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
11330 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
11340 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
11350 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
11360 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
11370 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
11380 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
11390 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
113a0 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
113b0 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
113c0 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
113d0 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
113e0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
113f0 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
11400 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11420 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
11430 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
11440 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
11450 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
11460 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11470 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
11480 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
11490 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
114a0 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
114b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
114c0 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
114d0 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
114e0 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11500 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
11510 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
11520 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
11530 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
11540 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
11550 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
11560 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
11570 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
11580 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
11590 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
115a0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
115b0 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
115c0 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
115d0 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
115e0 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
115f0 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
11600 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
11610 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
11620 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
11630 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
11640 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
11650 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
11660 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
11670 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
11680 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
11690 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
116a0 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
116b0 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
116c0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
116d0 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
116e0 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
116f0 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
11700 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11720 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
11730 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
11740 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
11770 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
11780 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
11790 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
117a0 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
117b0 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
117c0 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
117d0 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ion */.  Table *
117e0 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20  pEpoTab;        
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11800 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65   Eponymous table
11810 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65   for this module
11820 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e   */.};../*.** in
11830 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
11840 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  each column of a
11850 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68  n SQL table is h
11860 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e  eld in an instan
11870 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
11880 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
11890 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68  ct Column {.  ch
118a0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f  ar *zName;     /
118b0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63  * Name of this c
118c0 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65  olumn, \000, the
118d0 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20  n the type */.  
118e0 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20  Expr *pDflt;    
118f0 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75   /* Default valu
11900 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
11910 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
11920 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
11930 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
11940 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
11950 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
11960 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
11970 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72   An OE_ code for
11980 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20   handling a NOT 
11990 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
119a0 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
119b0 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
119c0 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
119d0 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  .. values */.  u
119e0 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20  8 szEst;        
119f0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
11a00 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68  e of value in th
11a10 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f  is column. sizeo
11a20 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75  f(INT)==1 */.  u
11a30 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20  8 colFlags;     
11a40 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  /* Boolean prope
11a50 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46  rties.  See COLF
11a60 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c  LAG_ defines bel
11a70 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  ow */.};../* All
11a80 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
11a90 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a  Column.colFlags:
11aa0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46  .*/.#define COLF
11ab0 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30  LAG_PRIMKEY  0x0
11ac0 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  001    /* Column
11ad0 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
11ae0 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
11af0 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
11b00 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20  IDDEN   0x0002  
11b10 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f    /* A hidden co
11b20 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61  lumn in a virtua
11b30 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
11b40 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59  ne COLFLAG_HASTY
11b50 50 45 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  PE  0x0004    /*
11b60 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f   Type name follo
11b70 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a  ws column name *
11b80 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
11b90 47 5f 55 4e 49 51 55 45 20 20 20 30 78 30 30 30  G_UNIQUE   0x000
11ba0 38 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64  8    /* Column d
11bb0 65 66 20 63 6f 6e 74 61 69 6e 73 20 22 55 4e 49  ef contains "UNI
11bc0 51 55 45 22 20 6f 72 20 22 50 4b 22 20 2a 2f 0a  QUE" or "PK" */.
11bd0 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
11be0 53 4f 52 54 45 52 52 45 46 20 30 78 30 30 31 30  SORTERREF 0x0010
11bf0 20 20 20 2f 2a 20 55 73 65 20 73 6f 72 74 65 72     /* Use sorter
11c00 2d 72 65 66 73 20 77 69 74 68 20 74 68 69 73 20  -refs with this 
11c10 63 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  column */../*.**
11c20 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
11c30 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
11c40 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
11c50 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
11c60 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
11c70 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
11c80 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
11c90 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
11ca0 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
11cb0 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
11cc0 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
11cd0 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
11ce0 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
11cf0 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d  * If CollSeq.xCm
11d00 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65  p is NULL, it me
11d10 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ans that the.** 
11d20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11d30 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ce is undefined.
11d40 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20    Indices built 
11d50 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a  on an undefined.
11d60 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
11d70 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65  uence may not be
11d80 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e   read or written
11d90 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c  ..*/.struct Coll
11da0 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  Seq {.  char *zN
11db0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
11dc0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   Name of the col
11dd0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
11de0 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a   UTF-8 encoded *
11df0 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
11e00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
11e10 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c  t encoding handl
11e20 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a  ed by xCmp() */.
11e30 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
11e40 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
11e50 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
11e60 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
11e70 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
11e80 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
11e90 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
11ea0 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
11eb0 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
11ec0 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
11ed0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  */.};../*.** A s
11ee0 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65  ort order can be
11ef0 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44   either ASC or D
11f00 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ESC..*/.#define 
11f10 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20  SQLITE_SO_ASC   
11f20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69      0  /* Sort i
11f30 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
11f40 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
11f50 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20  ITE_SO_DESC     
11f60 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   1  /* Sort in a
11f70 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
11f80 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11f90 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31  _SO_UNDEFINED -1
11fa0 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65   /* No sort orde
11fb0 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a  r specified */..
11fc0 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66  /*.** Column aff
11fd0 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a  inity types..**.
11fe0 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  ** These used to
11ff0 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e   have mnemonic n
12000 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72  ame like 'i' for
12010 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
12020 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66  GER and.** 't' f
12030 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  or SQLITE_AFF_TE
12040 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20  XT.  But we can 
12050 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70  save a little sp
12060 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a  ace and improve.
12070 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c  ** the speed a l
12080 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69  ittle by numberi
12090 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f  ng the values co
120a0 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a  nsecutively..**.
120b0 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68  ** But rather th
120c0 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20  an start with 0 
120d0 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77  or 1, we begin w
120e0 69 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77  ith 'A'.  That w
120f0 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74  ay,.** when mult
12100 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79  iple affinity ty
12110 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e  pes are concaten
12120 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69  ated into a stri
12130 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61  ng and.** used a
12140 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  s the P4 operand
12150 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d  , they will be m
12160 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a  ore readable..**
12170 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68  .** Note also th
12180 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  at the numeric t
12190 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64  ypes are grouped
121a0 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61   together so tha
121b0 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72  t testing.** for
121c0 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20   a numeric type 
121d0 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70  is a single comp
121e0 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65  arison.  And the
121f0 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69   BLOB type is fi
12200 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  rst..*/.#define 
12210 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20  SQLITE_AFF_BLOB 
12220 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20      'A'.#define 
12230 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
12240 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20      'B'.#define 
12250 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
12260 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20  IC  'C'.#define 
12270 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
12280 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20  ER  'D'.#define 
12290 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
122a0 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65      'E'..#define
122b0 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69   sqlite3IsNumeri
122c0 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28  cAffinity(X)  ((
122d0 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  X)>=SQLITE_AFF_N
122e0 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54  UMERIC)../*.** T
122f0 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
12300 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20  SK values masks 
12310 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63  off the signific
12320 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a  ant bits of an.*
12330 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65  * affinity value
12340 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
12350 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20  ITE_AFF_MASK    
12360 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64   0x47../*.** Add
12370 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75  itional bit valu
12380 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f  es that can be O
12390 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69  Red with an affi
123a0 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20  nity without.** 
123b0 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66  changing the aff
123c0 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  inity..**.** The
123d0 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
123e0 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e  flag is a combin
123f0 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20  ation of NULLEQ 
12400 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a  and JUMPIFNULL..
12410 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20  ** It causes an 
12420 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65  assert() to fire
12430 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
12440 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73  nd to a comparis
12450 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69  on.** operator i
12460 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  s NULL.  It is a
12470 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20  dded to certain 
12480 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
12490 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65  tors to.** prove
124a0 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e   that the operan
124b0 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f  ds are always NO
124c0 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69  T NULL..*/.#defi
124d0 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  ne SQLITE_KEEPNU
124e0 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  LL     0x08  /* 
124f0 55 73 65 64 20 62 79 20 76 65 63 74 6f 72 20 3d  Used by vector =
12500 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69  = or <> */.#defi
12510 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  ne SQLITE_JUMPIF
12520 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20  NULL   0x10  /* 
12530 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20  jumps if either 
12540 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
12550 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12560 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30  E_STOREP2      0
12570 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65  x20  /* Store re
12580 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20  sult in reg[P2] 
12590 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70  rather than jump
125a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
125b0 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20  TE_NULLEQ       
125c0 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55  0x80  /* NULL=NU
125d0 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
125e0 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20  LITE_NOTNULL    
125f0 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72    0x90  /* Asser
12600 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20  t that operands 
12610 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a  are never NULL *
12620 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  /../*.** An obje
12630 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
12640 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
12650 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ach virtual tabl
12660 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20  e present in.** 
12670 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
12680 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ema..**.** If th
12690 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
126a0 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
126b0 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
126c0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
126d0 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
126e0 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
126f0 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
12700 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
12710 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
12720 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
12730 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
12740 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
12750 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
12760 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
12770 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
12780 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
12790 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
127a0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a   virtual table.*
127b0 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
127c0 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
127d0 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
127e0 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
127f0 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  n.** database co
12800 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
12810 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
12820 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
12830 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d  atabase.** schem
12840 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
12850 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
12860 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
12870 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
12880 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12890 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
128a0 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
128b0 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
128c0 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
128d0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
128e0 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
128f0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12900 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
12910 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
12920 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
12930 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
12940 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
12950 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68  l tables.** with
12960 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
12970 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70   So that they ap
12980 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20  pear as part of 
12990 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74  the callers.** t
129a0 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
129b0 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
129c0 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
129d0 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
129e0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
129f0 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
12a00 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
12a10 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
12a20 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
12a30 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
12a40 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
12a50 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
12a60 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
12a70 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
12a80 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
12a90 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
12aa0 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
12ab0 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
12ac0 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
12ad0 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
12ae0 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
12af0 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
12b00 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
12b10 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
12b20 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
12b30 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
12b40 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
12b50 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
12b60 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
12b70 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
12b80 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
12b90 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
12ba0 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
12bb0 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
12bc0 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
12bd0 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
12be0 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
12bf0 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
12c00 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
12c10 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
12c20 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
12c30 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
12c40 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
12c50 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
12c60 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
12c70 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
12c80 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
12c90 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e  ot.** deleted an
12ca0 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  d the sqlite3_vt
12cb0 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20  ab* handles are 
12cc0 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28  not xDisconnect(
12cd0 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  )ed.** immediate
12ce0 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65  ly. Instead, the
12cf0 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d  y are moved from
12d00 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
12d10 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e  le list to.** an
12d20 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73  other linked lis
12d30 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20  t headed by the 
12d40 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
12d50 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ect member of th
12d60 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
12d70 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63  ng sqlite3 struc
12d80 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74  ture. They are t
12d90 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73  hen deleted/xDis
12da0 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78  connected.** nex
12db0 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
12dc0 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
12dd0 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
12de0 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
12df0 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
12e00 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
12e10 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
12e20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
12e30 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
12e40 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
12e50 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
12e60 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
12e70 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
12e80 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
12e90 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
12ea0 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
12eb0 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
12ec0 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
12ed0 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
12ee0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
12ef0 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
12f00 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
12f10 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
12f20 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
12f30 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
12f40 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  ated by.** sqlit
12f50 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73  e3DbMalloc(), us
12f60 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
12f70 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64  on handle stored
12f80 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73   in VTable.db as
12f90 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
12fa0 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
12fb0 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
12fc0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
12fd0 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
12fe0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
12ff0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
13000 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
13010 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
13020 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
13030 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
13040 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
13050 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
13060 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
13070 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
13080 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
13090 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
130a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
130b0 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
130c0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
130d0 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
130e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
130f0 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
13100 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
13110 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
13120 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
13130 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
13140 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
13150 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
13160 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
13170 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
13180 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
13190 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
131a0 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65  The schema for e
131b0 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e  ach SQL table an
131c0 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73  d view is repres
131d0 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
131e0 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ** by an instanc
131f0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
13200 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
13210 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
13220 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
13230 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
13240 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
13250 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
13260 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
13270 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
13280 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
13290 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
132a0 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
132b0 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
132c0 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
132d0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
132e0 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
132f0 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
13300 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
13310 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
13320 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
13330 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
13340 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
13350 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
13360 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
13370 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
13380 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
13390 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
133a0 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
133b0 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  n */.  ExprList 
133c0 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
133d0 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
133e0 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  ints */.        
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13400 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65  *   ... also use
13410 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  d as column name
13420 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20   list in a VIEW 
13430 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
13440 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
13450 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72  t BTree page for
13460 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13470 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20 20   u32 nTabRef;   
13480 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13490 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
134a0 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75  his Table */.  u
134b0 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  32 tabFlags;    
134c0 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
134d0 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
134e0 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20  i16 iPKey;      
134f0 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
13500 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f  egative, use aCo
13510 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20  l[iPKey] as the 
13520 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e  rowid */.  i16 n
13530 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
13540 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
13550 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
13560 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  le */.  LogEst n
13570 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20  RowLogEst;   /* 
13580 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69  Estimated rows i
13590 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73  n table - from s
135a0 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
135b0 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  e */.  LogEst sz
135c0 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  TabRow;     /* E
135d0 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
135e0 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20   each table row 
135f0 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64  in bytes */.#ifd
13600 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
13610 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45  _COSTMULT.  LogE
13620 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20  st costMult;    
13630 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c   /* Cost multipl
13640 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68  ier for using th
13650 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  is table */.#end
13660 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  if.  u8 keyConf;
13670 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
13680 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
13690 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
136a0 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
136b0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
136c0 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
136d0 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
136e0 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
136f0 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
13700 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
13710 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
13720 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
13730 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
13740 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
13750 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
13760 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
13770 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
13780 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
13790 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
137a0 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68  0: module 1: sch
137b0 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65  ema 2: vtab name
137c0 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20   3...: args */. 
137d0 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
137e0 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
137f0 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
13800 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
13810 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
13820 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
13830 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
13840 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
13850 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
13860 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
13870 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
13880 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
13890 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
138a0 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
138b0 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
138c0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
138d0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
138e0 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61  for Table.tabFla
138f0 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f  gs..**.** TF_OOO
13900 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74  Hidden applies t
13910 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77  o tables or view
13920 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65   that have hidde
13930 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  n columns that a
13940 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62  re.** followed b
13950 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  y non-hidden col
13960 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20  umns.  Example: 
13970 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   "CREATE VIRTUAL
13980 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a   TABLE x USING.*
13990 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e  * vtab1(a HIDDEN
139a0 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22  , b);".  Since "
139b0 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64  b" is a non-hidd
139c0 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61  en column but "a
139d0 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20  " is hidden,.** 
139e0 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  the TF_OOOHidden
139f0 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64   attribute would
13a00 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63   apply in this c
13a10 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65  ase.  Such table
13a20 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65  s require.** spe
13a30 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75  cial handling du
13a40 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63  ring INSERT proc
13a50 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69  essing..*/.#defi
13a60 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
13a70 20 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20        0x0001    
13a80 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
13a90 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
13aa0 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
13ab0 6c 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20  l       0x0002  
13ac0 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61    /* An ephemera
13ad0 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
13ae0 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  ne TF_HasPrimary
13af0 4b 65 79 20 20 20 30 78 30 30 30 34 20 20 20 20  Key   0x0004    
13b00 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70  /* Table has a p
13b10 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
13b20 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63  efine TF_Autoinc
13b30 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38 20  rement   0x0008 
13b40 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
13b50 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
13b60 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
13b70 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61 74  efine TF_HasStat
13b80 31 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  1        0x0010 
13b90 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73 74     /* nRowLogEst
13ba0 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74 65   set from sqlite
13bb0 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69 6e  _stat1 */.#defin
13bc0 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
13bd0 64 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f  d    0x0020    /
13be0 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49  * No rowid.  PRI
13bf0 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20  MARY KEY is the 
13c00 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
13c10 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
13c20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 4e    0x0040    /* N
13c30 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22  o user-visible "
13c40 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f  rowid" column */
13c50 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
13c60 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 30 30  idden       0x00
13c70 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d  80    /* Out-of-
13c80 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c  Order hidden col
13c90 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  umns */.#define 
13ca0 54 46 5f 53 74 61 74 73 55 73 65 64 20 20 20 20  TF_StatsUsed    
13cb0 20 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a 20     0x0100    /* 
13cc0 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64 65  Query planner de
13cd0 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65 64  cisions affected
13ce0 20 62 79 0a 20 20 20 20 20 20 20 20 20 20 20 20   by.            
13cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d00 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64 65           ** Inde
13d10 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d 20  x.aiRowLogEst[] 
13d20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e  values */.#defin
13d30 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20  e TF_HasNotNull 
13d40 20 20 20 20 20 30 78 30 32 30 30 20 20 20 20 2f       0x0200    /
13d50 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20 4e  * Contains NOT N
13d60 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ULL constraints 
13d70 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 68  */.#define TF_Sh
13d80 61 64 6f 77 20 20 20 20 20 20 20 20 20 20 30 78  adow          0x
13d90 30 34 30 30 20 20 20 20 2f 2a 20 54 72 75 65 20  0400    /* True 
13da0 66 6f 72 20 61 20 73 68 61 64 6f 77 20 74 61 62  for a shadow tab
13db0 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  le */../*.** Tes
13dc0 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
13dd0 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
13de0 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
13df0 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
13e00 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
13e10 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
13e20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
13e30 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
13e40 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
13e50 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
13e60 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
13e70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
13e80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
13e90 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
13ea0 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  l(X)      ((X)->
13eb0 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73  nModuleArg).#els
13ec0 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
13ed0 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
13ee0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
13ef0 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
13f00 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  e if a column is
13f10 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69   hidden.  IsOrdi
13f20 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
13f30 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73  ().** only works
13f40 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c   for non-virtual
13f50 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72   tables (ordinar
13f60 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65  y tables and vie
13f70 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c  ws) and is.** al
13f80 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73  ways false unles
13f90 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  s SQLITE_ENABLE_
13fa0 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69  HIDDEN_COLUMNS i
13fb0 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a  s defined.  The.
13fc0 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ** IsHiddenColum
13fd0 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e  n() macro is gen
13fe0 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f  eral purpose..*/
13ff0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
14000 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
14010 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65  N_COLUMNS).#  de
14020 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
14030 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
14040 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
14050 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
14060 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
14070 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
14080 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
14090 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
140a0 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
140b0 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  elif !defined(SQ
140c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
140d0 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e  LTABLE).#  defin
140e0 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
140f0 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
14100 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
14110 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
14120 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
14130 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
14140 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20  mn(X) 0.#else.# 
14150 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
14160 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
14170 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
14180 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
14190 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
141a0 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  .../* Does the t
141b0 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
141c0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
141d0 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
141e0 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
141f0 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
14200 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69  =0).#define Visi
14210 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58  bleRowid(X) (((X
14220 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
14230 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29  _NoVisibleRowid)
14240 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
14250 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
14260 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
14270 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
14280 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
14290 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
142a0 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
142b0 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
142c0 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
142d0 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
142e0 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
142f0 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
14300 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
14310 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
14320 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
14330 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
14340 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
14350 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
14360 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
14370 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
14380 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
14390 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
143a0 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
143b0 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
143c0 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
143d0 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
143e0 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
143f0 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
14400 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
14410 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
14420 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
14430 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
14440 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
14450 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
14460 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
14470 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
14480 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
14490 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
144a0 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
144b0 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
144c0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
144d0 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
144e0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
144f0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
14500 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
14510 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
14520 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
14530 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
14540 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
14550 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
14560 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
14570 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
14580 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
14590 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
145a0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
145b0 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
145c0 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
145d0 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
145e0 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
145f0 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
14600 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
14610 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
14620 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
14630 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
14640 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
14650 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
14660 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
14670 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
14680 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
14690 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
146a0 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
146b0 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
146c0 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
146d0 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
146e0 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
146f0 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
14700 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
14710 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
14720 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
14730 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
14740 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
14750 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
14760 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
14770 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
14780 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
14790 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
147a0 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
147b0 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
147c0 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
147d0 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
147e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
147f0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
14800 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
14810 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
14820 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
14830 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
14840 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
14850 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
14860 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
14870 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
14880 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
14890 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
148a0 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
148b0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
148c0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
148d0 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
148e0 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
148f0 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
14900 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
14910 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
14920 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
14930 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
14940 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
14950 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
14960 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
14970 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
14980 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
14990 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
149a0 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
149b0 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
149c0 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
149d0 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
149e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
149f0 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
14a00 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
14a10 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
14a20 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
14a30 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
14a40 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
14a50 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
14a60 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
14a70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
14a80 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
14a90 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
14aa0 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
14ab0 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
14ac0 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
14ad0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
14ae0 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
14af0 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
14b00 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
14b10 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
14b20 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
14b30 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
14b40 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
14b50 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
14b60 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
14b70 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
14b80 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
14b90 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
14ba0 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
14bb0 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
14bc0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
14bd0 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
14be0 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
14bf0 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
14c00 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
14c10 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
14c20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
14c30 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
14c40 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
14c50 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
14c60 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
14c70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
14c80 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
14c90 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
14ca0 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
14cb0 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
14cc0 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
14cd0 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
14ce0 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
14cf0 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
14d00 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
14d10 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
14d20 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
14d30 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
14d40 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
14d50 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
14d60 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
14d70 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
14d80 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
14d90 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
14da0 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
14db0 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
14dc0 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
14dd0 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
14de0 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
14df0 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
14e00 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
14e10 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
14e20 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
14e30 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
14e40 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
14e50 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
14e60 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
14e70 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
14e80 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
14e90 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
14ea0 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
14eb0 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
14ec0 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
14ed0 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
14ee0 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
14ef0 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
14f00 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
14f10 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
14f20 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  ey..**.** The fo
14f30 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
14f40 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
14f50 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
14f60 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
14f70 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
14f80 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
14f90 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
14fa0 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
14fb0 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
14fc0 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
14fd0 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
14fe0 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
14ff0 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
15000 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
15010 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
15020 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
15030 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
15040 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
15050 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
15060 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
15070 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
15080 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
15090 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
150a0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
150b0 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
150c0 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
150d0 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
150e0 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
150f0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
15100 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
15110 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
15120 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
15130 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
15140 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 55   */.#define OE_U
15150 70 64 61 74 65 20 20 20 36 20 20 20 2f 2a 20 50  pdate   6   /* P
15160 72 6f 63 65 73 73 20 61 73 20 61 20 44 4f 20 55  rocess as a DO U
15170 50 44 41 54 45 20 69 6e 20 61 6e 20 75 70 73 65  PDATE in an upse
15180 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  rt */.#define OE
15190 5f 52 65 73 74 72 69 63 74 20 37 20 20 20 2f 2a  _Restrict 7   /*
151a0 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
151b0 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
151c0 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
151d0 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
151e0 53 65 74 4e 75 6c 6c 20 20 38 20 20 20 2f 2a 20  SetNull  8   /* 
151f0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
15200 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
15210 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
15220 53 65 74 44 66 6c 74 20 20 39 20 20 20 2f 2a 20  SetDflt  9   /* 
15230 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
15240 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
15250 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
15260 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
15270 31 30 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  10  /* Cascade t
15280 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  he changes */.#d
15290 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
152a0 20 20 31 31 20 20 2f 2a 20 44 6f 20 77 68 61 74    11  /* Do what
152b0 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
152c0 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
152d0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
152e0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
152f0 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
15300 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
15310 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
15320 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
15330 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
15340 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
15350 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
15360 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
15370 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e  ex keys..**.** N
15380 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72  ote that aSortOr
15390 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b  der[] and aColl[
153a0 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20  ] have nField+1 
153b0 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a  slots.  There.**
153c0 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74   are nField slot
153d0 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
153e0 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68  s of an index th
153f0 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f  en one extra slo
15400 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77  t.** for the row
15410 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  id at the end..*
15420 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
15430 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20   {.  u32 nRef;  
15440 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15450 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73  er of references
15460 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f   to this KeyInfo
15470 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20   object */.  u8 
15480 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
15490 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
154a0 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
154b0 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
154c0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46  s */.  u16 nKeyF
154d0 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ield;      /* Nu
154e0 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75  mber of key colu
154f0 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  mns in the index
15500 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69   */.  u16 nAllFi
15510 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74  eld;      /* Tot
15520 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c  al columns, incl
15530 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f  uding key plus o
15540 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74  thers */.  sqlit
15550 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
15560 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
15570 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
15580 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
15590 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
155a0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
155b0 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
155c0 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
155d0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
155e0 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
155f0 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
15600 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
15610 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  ct holds a recor
15620 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e  d which has been
15630 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
15640 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66   individual.** f
15650 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70  ields, for the p
15660 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67  urposes of doing
15670 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a   a comparison..*
15680 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
15690 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
156a0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
156b0 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
156c0 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
156d0 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
156e0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
156f0 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
15700 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
15710 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
15720 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
15730 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
15740 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
15750 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
15760 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
15770 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
15780 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
15790 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
157a0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e  ode..**.** An in
157b0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
157c0 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20  bject serves as 
157d0 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e  a "key" for doin
157e0 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a  g a search on.**
157f0 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65   an index b+tree
15800 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68  . The goal of th
15810 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66  e search is to f
15820 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68  ind the entry th
15830 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20  at.** is closed 
15840 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72  to the key descr
15850 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a  ibed by this obj
15860 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63  ect.  This objec
15870 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20  t might hold.** 
15880 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  just a prefix of
15890 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e   the key.  The n
158a0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
158b0 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70  is given by.** p
158c0 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e  KeyInfo->nField.
158d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e  .**.** The r1 an
158e0 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20  d r2 fields are 
158f0 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65  the values to re
15900 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79  turn if this key
15910 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a   is less than.**
15920 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
15930 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74   a key in the bt
15940 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ree, respectivel
15950 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f  y.  These are no
15960 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64  rmally.** -1 and
15970 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79   +1 respectively
15980 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69  , but might be i
15990 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e  nverted to +1 an
159a0 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72  d -1 if the b-tr
159b0 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43  ee.** is in DESC
159c0 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68   order..**.** Th
159d0 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
159e0 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61   functions actua
159f0 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75  lly return defau
15a00 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20  lt_rc when they 
15a10 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c  find.** an equal
15a20 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64  s comparison.  d
15a30 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
15a40 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20   -1, 0, or +1.  
15a50 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  If there are.** 
15a60 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73  multiple entries
15a70 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77   in the b-tree w
15a80 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
15a90 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b   (when only look
15aa0 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69  ing.** at the fi
15ab0 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  rst pKeyInfo->nF
15ac0 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66  ields,) then def
15ad0 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73  ault_rc can be s
15ae0 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63  et to -1 to.** c
15af0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
15b00 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
15b10 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
15b20 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
15b30 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
15b40 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
15b50 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
15b60 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
15b70 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
15b80 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
15b90 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
15ba0 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
15bb0 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
15bc0 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
15bd0 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
15be0 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
15bf0 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
15c00 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
15c10 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
15c20 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
15c30 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
15c40 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
15c50 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
15c60 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
15c70 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
15c80 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
15c90 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
15ca0 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
15cb0 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
15cc0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
15cd0 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
15ce0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
15cf0 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
15d00 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
15d10 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
15d20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
15d30 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
15d40 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
15d50 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15d60 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
15d70 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
15d80 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
15d90 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
15da0 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
15db0 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
15dc0 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
15dd0 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
15de0 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
15df0 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
15e00 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
15e10 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
15e20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
15e30 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68  urn if (lhs < rh
15e40 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
15e50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
15e60 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
15e70 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
15e80 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
15e90 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
15ea0 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
15eb0 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
15ec0 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
15ed0 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
15ee0 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
15ef0 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
15f00 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
15f10 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
15f20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
15f30 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
15f40 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
15f50 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
15f60 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
15f70 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
15f80 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
15f90 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
15fa0 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
15fb0 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
15fc0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
15fd0 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
15fe0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
15ff0 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
16000 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
16010 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
16020 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
16030 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
16040 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
16050 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
16060 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
16070 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
16080 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
16090 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
160a0 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
160b0 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
160c0 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
160d0 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
160e0 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
160f0 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
16100 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
16110 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
16120 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
16130 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
16140 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d  e.** first colum
16150 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
16160 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
16170 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
16180 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
16190 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
161a0 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
161b0 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
161c0 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
161d0 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
161e0 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
161f0 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
16200 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
16210 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
16220 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
16230 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
16240 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
16250 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
16260 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
16270 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
16280 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
16290 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
162a0 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
162b0 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
162c0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
162d0 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
162e0 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
162f0 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
16300 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
16310 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72  olution.** algor
16320 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
16330 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
16340 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
16350 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
16360 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a  e.** element..**
16370 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e  .** While parsin
16380 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  g a CREATE TABLE
16390 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58   or CREATE INDEX
163a0 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72   statement in or
163b0 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61  der to.** genera
163c0 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73  te VDBE code (as
163d0 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73   opposed to pars
163e0 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f  ing one read fro
163f0 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74  m an sqlite_mast
16400 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70  er.** table as p
16410 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61  art of parsing a
16420 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
16430 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61  ase schema), tra
16440 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73  nsient instances
16450 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
16460 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65  cture may be cre
16470 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ated. In this ca
16480 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75  se the Index.tnu
16490 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a  m variable is.**
164a0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
164b0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
164c0 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
164d0 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  , not a database
164e0 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
164f0 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65  (it cannot - the
16500 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69   database page i
16510 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20  s not allocated 
16520 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a  until the VDBE.*
16530 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65  * program is exe
16540 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76  cuted). See conv
16550 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69  ertToWithoutRowi
16560 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74  dTable() for det
16570 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ails..*/.struct 
16580 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
16590 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
165a0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
165b0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31  is index */.  i1
165c0 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  6 *aiColumn;    
165d0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
165e0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
165f0 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
16600 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c   1st is 0 */.  L
16610 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45  ogEst *aiRowLogE
16620 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  st;     /* From 
16630 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
16640 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
16650 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
16660 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
16670 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16680 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
16690 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
166a0 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
166b0 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
166c0 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
166d0 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
166e0 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
166f0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
16700 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
16710 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
16720 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
16730 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
16740 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
16750 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
16760 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
16770 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
16780 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
16790 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
167a0 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
167b0 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
167c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43  const char **azC
167d0 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oll;     /* Arra
167e0 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
167f0 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
16800 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  r index */.  Exp
16810 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65  r *pPartIdxWhere
16820 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63  ;     /* WHERE c
16830 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
16840 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45  l indices */.  E
16850 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70  xprList *aColExp
16860 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  r;      /* Colum
16870 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  n expressions */
16880 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
16890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
168a0 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
168b0 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
168c0 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
168d0 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
168e0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
168f0 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
16900 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
16910 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
16920 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16930 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
16940 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
16950 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
16960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16970 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
16980 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
16990 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
169a0 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
169b0 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
169c0 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
169d0 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
169e0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
169f0 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
16a00 2a 20 30 3a 4e 6f 72 6d 61 6c 20 31 3a 55 4e 49  * 0:Normal 1:UNI
16a10 51 55 45 2c 20 32 3a 50 52 49 4d 41 52 59 20 4b  QUE, 2:PRIMARY K
16a20 45 59 2c 20 33 3a 49 50 4b 20 2a 2f 0a 20 20 75  EY, 3:IPK */.  u
16a30 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72  nsigned bUnorder
16a40 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74  ed:1;   /* Use t
16a50 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d  his index for ==
16a60 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f   or IN queries o
16a70 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  nly */.  unsigne
16a80 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b  d uniqNotNull:1;
16a90 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49    /* True if UNI
16aa0 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
16ab0 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73   for all columns
16ac0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16ad0 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f  sResized:1;    /
16ae0 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65  * True if resize
16af0 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61  IndexObject() ha
16b00 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
16b10 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f  .  unsigned isCo
16b20 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54  vering:1;   /* T
16b30 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61  rue if this is a
16b40 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   covering index 
16b50 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  */.  unsigned no
16b60 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a  SkipScan:1;   /*
16b70 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75   Do not try to u
16b80 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20  se skip-scan if 
16b90 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  true */.  unsign
16ba0 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20  ed hasStat1:1;  
16bb0 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73     /* aiRowLogEs
16bc0 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72  t values come fr
16bd0 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
16be0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 4e  */.  unsigned bN
16bf0 6f 51 75 65 72 79 3a 31 3b 20 20 20 20 20 2f 2a  oQuery:1;     /*
16c00 20 44 6f 20 6e 6f 74 20 75 73 65 20 74 68 69 73   Do not use this
16c10 20 69 6e 64 65 78 20 74 6f 20 6f 70 74 69 6d 69   index to optimi
16c20 7a 65 20 71 75 65 72 69 65 73 20 2a 2f 0a 23 69  ze queries */.#i
16c30 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
16c40 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
16c50 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16c70 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
16c80 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
16c90 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
16ca0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
16cb0 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
16cc0 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
16cd0 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
16ce0 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
16cf0 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
16d00 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
16d10 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
16d20 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
16d30 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
16d40 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
16d50 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
16d60 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69  */.  tRowcnt *ai
16d70 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a  RowEst;       /*
16d80 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
16d90 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20   stat1 data for 
16da0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
16db0 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30  tRowcnt nRowEst0
16dc0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  ;        /* Non-
16dd0 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62  logarithmic numb
16de0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
16df0 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69  e index */.#endi
16e00 66 0a 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 4e  f.  Bitmask colN
16e10 6f 74 49 64 78 65 64 3b 20 20 20 20 20 2f 2a 20  otIdxed;     /* 
16e20 30 20 66 6f 72 20 75 6e 69 6e 64 65 78 65 64 20  0 for unindexed 
16e30 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 54 61 62 20  columns in pTab 
16e40 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
16e50 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
16e60 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
16e70 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
16e80 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
16e90 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
16ea0 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
16eb0 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
16ec0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
16ed0 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
16ee0 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
16ef0 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
16f00 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
16f10 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
16f20 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
16f30 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
16f40 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
16f50 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
16f60 45 5f 49 44 58 54 59 50 45 5f 49 50 4b 20 20 20  E_IDXTYPE_IPK   
16f70 20 20 20 20 20 20 33 20 20 20 2f 2a 20 49 4e 54        3   /* INT
16f80 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
16f90 20 69 6e 64 65 78 20 2a 2f 0a 0a 2f 2a 20 52 65   index */../* Re
16fa0 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
16fb0 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
16fc0 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
16fd0 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
16fe0 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
16ff0 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
17000 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
17010 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
17020 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
17030 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
17040 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
17050 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
17060 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
17070 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
17080 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c   The Index.aiCol
17090 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65  umn[] values are
170a0 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69   normally positi
170b0 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  ve integer.  But
170c0 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f  .** there are so
170d0 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75  me negative valu
170e0 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65  es that have spe
170f0 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f  cial meaning:.*/
17100 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49  .#define XN_ROWI
17110 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f  D     (-1)     /
17120 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
17130 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   is the rowid */
17140 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52  .#define XN_EXPR
17150 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f        (-2)     /
17160 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
17170 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
17180 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  n */../*.** Each
17190 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
171a0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
171b0 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
171c0 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
171d0 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72  y.** using a str
171e0 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
171f0 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
17200 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
17210 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
17220 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
17230 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
17240 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
17250 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
17260 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
17270 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
17280 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
17290 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
172a0 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
172b0 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
172c0 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
172d0 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
172e0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
172f0 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
17300 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
17310 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
17320 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
17330 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
17340 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
17350 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
17360 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
17370 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
17380 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
17390 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
173a0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
173b0 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
173c0 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
173d0 75 65 73 20 74 6f 20 75 73 65 20 77 69 74 68 69  ues to use withi
173e0 6e 20 74 68 65 20 66 6c 61 67 73 20 61 72 67 75  n the flags argu
173f0 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 47  ment to sqlite3G
17400 65 74 54 6f 6b 65 6e 28 29 2e 0a 2a 2f 0a 23 64  etToken()..*/.#d
17410 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 4f 4b  efine SQLITE_TOK
17420 45 4e 5f 51 55 4f 54 45 44 20 20 20 20 30 78 31  EN_QUOTED    0x1
17430 20 2f 2a 20 54 6f 6b 65 6e 20 69 73 20 61 20 71   /* Token is a q
17440 75 6f 74 65 64 20 69 64 65 6e 74 69 66 69 65 72  uoted identifier
17450 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
17460 49 54 45 5f 54 4f 4b 45 4e 5f 4b 45 59 57 4f 52  ITE_TOKEN_KEYWOR
17470 44 20 20 20 30 78 32 20 2f 2a 20 54 6f 6b 65 6e  D   0x2 /* Token
17480 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20 2a   is a keyword. *
17490 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f  /../*.** Each to
174a0 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f  ken coming out o
174b0 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61  f the lexer is a
174c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a  n instance of.**
174d0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
174e0 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73    Tokens are als
174f0 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f  o used as part o
17500 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  f an expression.
17510 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
17520 79 20 74 68 61 74 20 22 7a 22 20 70 6f 69 6e 74  y that "z" point
17530 73 20 74 6f 20 69 73 20 6f 77 6e 65 64 20 62 79  s to is owned by
17540 20 6f 74 68 65 72 20 6f 62 6a 65 63 74 73 2e 20   other objects. 
17550 20 54 61 6b 65 20 63 61 72 65 0a 2a 2a 20 74 68   Take care.** th
17560 61 74 20 74 68 65 20 6f 77 6e 65 72 20 6f 66 20  at the owner of 
17570 74 68 65 20 22 7a 22 20 73 74 72 69 6e 67 20 64  the "z" string d
17580 6f 65 73 20 6e 6f 74 20 64 65 61 6c 6c 6f 63 61  oes not dealloca
17590 74 65 20 74 68 65 20 73 74 72 69 6e 67 20 62 65  te the string be
175a0 66 6f 72 65 0a 2a 2a 20 74 68 65 20 54 6f 6b 65  fore.** the Toke
175b0 6e 20 67 6f 65 73 20 6f 75 74 20 6f 66 20 73 63  n goes out of sc
175c0 6f 70 65 21 20 20 56 65 72 79 20 6f 66 74 65 6e  ope!  Very often
175d0 2c 20 74 68 65 20 22 7a 22 20 70 6f 69 6e 74 73  , the "z" points
175e0 20 74 6f 20 73 6f 6d 65 20 70 6c 61 63 65 0a 2a   to some place.*
175f0 2a 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20  * in the middle 
17600 6f 66 20 74 68 65 20 50 61 72 73 65 2e 7a 53 71  of the Parse.zSq
17610 6c 20 74 65 78 74 2e 20 20 42 75 74 20 69 74 20  l text.  But it 
17620 6d 69 67 68 74 20 61 6c 73 6f 20 70 6f 69 6e 74  might also point
17630 20 74 6f 20 61 0a 2a 2a 20 73 74 61 74 69 63 20   to a.** static 
17640 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63  string..*/.struc
17650 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
17660 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
17670 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
17680 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
17690 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
176a0 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
176b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
176c0 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
176d0 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
176e0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
176f0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
17700 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
17710 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
17720 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
17730 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
17740 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
17750 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17760 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
17770 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
17780 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
17790 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
177a0 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
177b0 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
177c0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
177d0 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
177e0 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
177f0 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
17800 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
17810 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
17820 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
17830 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
17840 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
17850 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
17860 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
17870 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
17880 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
17890 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
178a0 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
178b0 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
178c0 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
178d0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
178e0 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
178f0 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
17900 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
17910 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
17920 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
17930 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
17940 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
17950 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
17960 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
17970 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
17980 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
17990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
179a0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72             ** fr
179b0 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
179c0 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
179d0 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
179e0 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
179f0 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
17a00 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
17a10 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
17a20 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
17a30 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
17a40 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
17a50 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
17a60 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
17a70 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
17a80 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
17a90 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
17aa0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
17ab0 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
17ac0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
17ad0 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
17ae0 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
17af0 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
17b00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17b10 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
17b20 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
17b30 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52    int mnReg, mxR
17b40 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e  eg;       /* Ran
17b50 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  ge of registers 
17b60 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43  allocated for aC
17b70 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a  ol and aFunc */.
17b80 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
17b90 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
17ba0 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
17bb0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
17bc0 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
17bd0 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
17be0 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
17bf0 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
17c00 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
17c10 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
17c20 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
17c30 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
17c40 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
17c50 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
17c60 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
17c70 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
17c80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
17c90 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
17ca0 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
17cb0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
17cc0 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
17cd0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
17ce0 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
17cf0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
17d00 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
17d10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
17d20 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
17d30 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
17d40 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
17d50 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
17d60 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
17d70 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
17d80 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
17d90 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
17da0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17db0 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
17dc0 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
17dd0 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
17de0 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
17df0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
17e00 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
17e10 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
17e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17e30 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
17e40 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
17e50 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
17e60 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e80 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
17e90 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
17ea0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
17eb0 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
17ec0 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
17ed0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
17ee0 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17f00 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
17f10 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
17f20 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
17f30 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
17f40 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
17f50 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
17f60 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
17f70 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
17f80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
17f90 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
17fa0 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
17fb0 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
17fc0 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
17fd0 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
17fe0 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
17ff0 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
18000 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
18010 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
18020 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18030 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
18040 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
18050 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
18060 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
18070 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
18080 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
18090 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
180a0 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
180b0 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
180c0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
180d0 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
180e0 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
180f0 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
18100 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
18110 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
18120 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
18130 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
18140 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
18150 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
18160 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
18170 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
18180 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
18190 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
181a0 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
181b0 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
181c0 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
181d0 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
181e0 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
181f0 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
18200 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
18210 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
18220 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
18230 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
18240 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
18250 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
18260 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
18270 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
18280 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
18290 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
182a0 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
182b0 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
182c0 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
182d0 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
182e0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
182f0 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
18300 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
18310 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
18320 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
18330 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
18340 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
18350 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
18360 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
18370 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
18380 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
18390 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
183a0 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
183b0 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
183c0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
183d0 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
183e0 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
183f0 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
18400 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
18410 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
18420 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
18430 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
18440 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
18450 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
18460 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
18470 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
18480 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
18490 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f  T, TK_BLOB,.** o
184a0 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68  r TK_STRING), th
184b0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
184c0 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20  ntains the text 
184d0 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72  of the SQL liter
184e0 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78  al. If.** the ex
184f0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61  pression is a va
18500 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41  riable (TK_VARIA
18510 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  BLE), then Expr.
18520 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
18530 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  he.** variable n
18540 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  ame. Finally, if
18550 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18560 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
18570 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29  on (TK_FUNCTION)
18580 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74  ,.** then Expr.t
18590 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
185a0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
185b0 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78  nction..**.** Ex
185c0 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78  pr.pRight and Ex
185d0 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65  pr.pLeft are the
185e0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
185f0 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  subexpressions o
18600 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70  f a.** binary op
18610 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f  erator. Either o
18620 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55  r both may be NU
18630 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78  LL..**.** Expr.x
18640 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
18650 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66   of arguments if
18660 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18670 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
18680 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78  on,.** a CASE ex
18690 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49  pression or an I
186a0 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  N expression of 
186b0 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
186c0 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29  IN (<y>, <z>...)
186d0 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65  "..** Expr.x.pSe
186e0 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20  lect is used if 
186f0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18700 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f  s a sub-select o
18710 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
18720 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22  of.** the form "
18730 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54  <lhs> IN (SELECT
18740 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45   ...)". If the E
18750 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20  P_xIsSelect bit 
18760 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a  is set in the.**
18770 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
18780 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53  , then Expr.x.pS
18790 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20  elect is valid. 
187a0 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e  Otherwise, Expr.
187b0 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61  x.pList is.** va
187c0 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78  lid..**.** An ex
187d0 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
187e0 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44  form ID or ID.ID
187f0 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c   refers to a col
18800 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a  umn in a table..
18810 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72  ** For such expr
18820 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70  essions, Expr.op
18830 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f   is set to TK_CO
18840 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54  LUMN and Expr.iT
18850 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69  able is.** the i
18860 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75  nteger cursor nu
18870 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63  mber of a VDBE c
18880 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
18890 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64  o that table and
188a0 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  .** Expr.iColumn
188b0 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   is the column n
188c0 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70  umber for the sp
188d0 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20  ecific column.  
188e0 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73  If the.** expres
188f0 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20  sion is used as 
18900 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61  a result in an a
18910 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c  ggregate SELECT,
18920 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c   then the.** val
18930 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65  ue is also store
18940 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41  d in the Expr.iA
18950 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  gg column in the
18960 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68   aggregate so th
18970 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20  at.** it can be 
18980 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61  accessed after a
18990 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72  ll aggregates ar
189a0 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a  e computed..**.*
189b0 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
189c0 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e  ion is an unboun
189d0 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65  d variable marke
189e0 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61  r (a question ma
189f0 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20  rk.** character 
18a00 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69  '?' in the origi
18a10 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68  nal SQL) then th
18a20 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f  e Expr.iTable ho
18a30 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a  lds the index.**
18a40 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74   number for that
18a50 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   variable..**.**
18a60 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
18a70 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79  on is a subquery
18a80 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75   then Expr.iColu
18a90 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  mn holds an inte
18aa0 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ger.** register 
18ab0 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e  number containin
18ac0 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  g the result of 
18ad0 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49  the subquery.  I
18ae0 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72  f the.** subquer
18af0 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61  y gives a consta
18b00 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20  nt result, then 
18b10 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49  iTable is -1.  I
18b20 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a  f the subquery.*
18b30 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72  * gives a differ
18b40 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69  ent answer at di
18b50 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75  fferent times du
18b60 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70  ring statement p
18b70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65  rocessing.** the
18b80 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20  n iTable is the 
18b90 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62  address of a sub
18ba0 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d  routine that com
18bb0 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65  putes the subque
18bc0 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ry..**.** If the
18bd0 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65   Expr is of type
18be0 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20   OP_Column, and 
18bf0 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20  the table it is 
18c00 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a  selecting from.*
18c10 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c  * is a disk tabl
18c20 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22  e or the "old.*"
18c30 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74   pseudo-table, t
18c40 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20  hen pTab points 
18c50 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  to the.** corres
18c60 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65  ponding table de
18c70 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  finition..**.** 
18c80 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53  ALLOCATION NOTES
18c90 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a  :.**.** Expr obj
18ca0 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c  ects can use a l
18cb0 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  ot of memory spa
18cc0 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73  ce in database s
18cd0 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65  chema.  To.** he
18ce0 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79  lp reduce memory
18cf0 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73   requirements, s
18d00 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72  ometimes an Expr
18d10 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a   object will be.
18d20 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41  ** truncated.  A
18d30 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65  nd to reduce the
18d40 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
18d50 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73  y allocations, s
18d60 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20  ometimes.** two 
18d70 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a  or more Expr obj
18d80 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f  ects will be sto
18d90 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  red in a single 
18da0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
18db0 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77  n,.** together w
18dc0 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  ith Expr.zToken 
18dd0 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49  strings..**.** I
18de0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
18df0 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   and EP_TokenOnl
18e00 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  y flags are set 
18e10 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20  when.** an Expr 
18e20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61  object is trunca
18e30 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65  ted.  When EP_Re
18e40 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68  duced is set, th
18e50 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68  en all.** the ch
18e60 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ild Expr objects
18e70 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65   in the Expr.pLe
18e80 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67  ft and Expr.pRig
18e90 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61  ht subtrees.** a
18ea0 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  re contained wit
18eb0 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d  hin the same mem
18ec0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ory allocation. 
18ed0 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20   Note, however, 
18ee0 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74  that.** the subt
18ef0 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70  rees in Expr.x.p
18f00 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70  List or Expr.x.p
18f10 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79  Select are alway
18f20 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20  s separately.** 
18f30 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72  allocated, regar
18f40 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
18f50 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63   or not EP_Reduc
18f60 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74  ed is set..*/.st
18f70 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38  ruct Expr {.  u8
18f80 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
18f90 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f       /* Operatio
18fa0 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74  n performed by t
18fb0 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68  his node */.  ch
18fc0 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20  ar affinity;    
18fd0 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
18fe0 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75  nity of the colu
18ff0 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61  mn or 0 if not a
19000 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32   column */.  u32
19010 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
19020 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66      /* Various f
19030 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20  lags.  EP_* See 
19040 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e  below */.  union
19050 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f   {.    char *zTo
19060 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ken;          /*
19070 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65   Token value. Ze
19080 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e  ro terminated an
19090 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20  d dequoted */.  
190a0 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20    int iValue;   
190b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d           /* Non-
190c0 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72  negative integer
190d0 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74   value if EP_Int
190e0 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a  Value */.  } u;.
190f0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
19100 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69  TokenOnly flag i
19110 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
19120 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
19130 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
19140 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
19150 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
19160 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
19170 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
19180 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
19190 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
191a0 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
191b0 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
191c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
191f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
19200 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b  ..  Expr *pLeft;
19210 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
19220 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ft subnode */.  
19230 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20  Expr *pRight;   
19240 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20         /* Right 
19250 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  subnode */.  uni
19260 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73  on {.    ExprLis
19270 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a  t *pList;     /*
19280 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
19290 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20  , SELECT, CASE, 
192a0 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45  FUNCTION, BETWEE
192b0 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  N */.    Select 
192c0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
192d0 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e   EP_xIsSelect an
192e0 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  d op = IN, EXIST
192f0 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d  S, SELECT */.  }
19300 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   x;..  /* If the
19310 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
19320 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
19330 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
19340 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
19350 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
19360 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
19370 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
19380 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
19390 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
193a0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
193b0 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
193c0 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
193d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
193f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19410 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  */..#if SQLITE_M
19420 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
19430 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
19440 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67           /* Heig
19450 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68  ht of the tree h
19460 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f  eaded by this no
19470 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  de */.#endif.  i
19480 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
19490 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
194a0 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  MN: cursor numbe
194b0 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69  r of table holdi
194c0 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  ng column.      
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194e0 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45     ** TK_REGISTE
194f0 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  R: register numb
19500 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
19510 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
19520 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20  K_TRIGGER: 1 -> 
19530 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20  new, 0 -> old.  
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c         ** EP_Unl
19560 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32  ikely:  13421772
19570 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f  8 times likeliho
19580 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  od.             
19590 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
195a0 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65  K_SELECT: 1st re
195b0 67 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74  gister of result
195c0 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56   vector */.  ynV
195d0 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  ar iColumn;     
195e0 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
195f0 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20  : column index. 
19600 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20   -1 for rowid.. 
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41          ** TK_VA
19630 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65  RIABLE: variable
19640 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20   number (always 
19650 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20  >= 1)..         
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c  ** TK_SELECT_COL
19680 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  UMN: column of t
19690 68 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72  he result vector
196a0 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
196c0 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
196d0 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
196e0 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
196f0 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
19700 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
19710 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
19720 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
19730 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
19740 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
19750 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
19760 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
19770 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
197a0 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
197b0 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
197c0 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
197d0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
197e0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
197f0 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
19800 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
19810 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
19820 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
19830 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
19840 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 75 6e 69 6f  NCTION */.  unio
19850 6e 20 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  n {.    Table *p
19860 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
19870 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 54 61 62  * TK_COLUMN: Tab
19880 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 63 6f  le containing co
19890 6c 75 6d 6e 2e 20 43 61 6e 20 62 65 20 4e 55 4c  lumn. Can be NUL
198a0 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  L.              
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
198c0 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20  for a column of 
198d0 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65  an index on an e
198e0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
198f0 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20   Window *pWin;  
19900 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 46 55          /* TK_FU
19910 4e 43 54 49 4f 4e 3a 20 57 69 6e 64 6f 77 20 64  NCTION: Window d
19920 65 66 69 6e 69 74 69 6f 6e 20 66 6f 72 20 74 68  efinition for th
19930 65 20 66 75 6e 63 20 2a 2f 0a 20 20 20 20 73 74  e func */.    st
19940 72 75 63 74 20 7b 20 20 20 20 20 20 20 20 20 20  ruct {          
19950 20 20 20 20 20 2f 2a 20 54 4b 5f 49 4e 2c 20 54       /* TK_IN, T
19960 4b 5f 53 45 4c 45 43 54 2c 20 61 6e 64 20 54 4b  K_SELECT, and TK
19970 5f 45 58 49 53 54 53 20 2a 2f 0a 20 20 20 20 20  _EXISTS */.     
19980 20 69 6e 74 20 69 41 64 64 72 3b 20 20 20 20 20   int iAddr;     
19990 20 20 20 20 20 20 20 20 2f 2a 20 53 75 62 72 6f          /* Subro
199a0 75 74 69 6e 65 20 65 6e 74 72 79 20 61 64 64 72  utine entry addr
199b0 65 73 73 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74  ess */.      int
199c0 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 20   regReturn;     
199d0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
199e0 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 72 65 74  used to hold ret
199f0 75 72 6e 20 61 64 64 72 65 73 73 20 2a 2f 0a 20  urn address */. 
19a00 20 20 20 7d 20 73 75 62 3b 0a 20 20 7d 20 79 3b     } sub;.  } y;
19a10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
19a20 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
19a30 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
19a40 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
19a50 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 20 56 61  ags field..** Va
19a60 6c 75 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73  lue restrictions
19a70 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
19a80 20 45 50 5f 41 67 67 20 3d 3d 20 4e 43 5f 48 61   EP_Agg == NC_Ha
19a90 73 41 67 67 20 3d 3d 20 53 46 5f 48 61 73 41 67  sAgg == SF_HasAg
19aa0 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 45 50  g.**          EP
19ab0 5f 57 69 6e 20 3d 3d 20 4e 43 5f 48 61 73 57 69  _Win == NC_HasWi
19ac0 6e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n.*/.#define EP_
19ad0 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
19ae0 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
19af0 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
19b00 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
19b10 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
19b20 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30  Distinct  0x0000
19b30 30 32 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  02 /* Aggregate 
19b40 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
19b50 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
19b60 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 61 73  /.#define EP_Has
19b70 46 75 6e 63 20 20 20 30 78 30 30 30 30 30 34 20  Func   0x000004 
19b80 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
19b90 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e  or more function
19ba0 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f  s of any kind */
19bb0 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78 65  .#define EP_Fixe
19bc0 64 43 6f 6c 20 20 30 78 30 30 30 30 30 38 20 2f  dCol  0x000008 /
19bd0 2a 20 54 4b 5f 43 6f 6c 75 6d 6e 20 77 69 74 68  * TK_Column with
19be0 20 61 20 6b 6e 6f 77 6e 20 66 69 78 65 64 20 76   a known fixed v
19bf0 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
19c00 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30  EP_Agg       0x0
19c10 30 30 30 31 30 20 2f 2a 20 43 6f 6e 74 61 69 6e  00010 /* Contain
19c20 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
19c30 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
19c40 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
19c50 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30  VarSelect 0x0000
19c60 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73  20 /* pSelect is
19c70 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74   correlated, not
19c80 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65   constant */.#de
19c90 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65  fine EP_DblQuote
19ca0 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f  d 0x000040 /* to
19cb0 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e  ken.z was origin
19cc0 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f  ally in "..." */
19cd0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69  .#define EP_Infi
19ce0 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f  xFunc 0x000080 /
19cf0 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e  * True for an in
19d00 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49  fix function: LI
19d10 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f  KE, GLOB, etc */
19d20 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c  .#define EP_Coll
19d30 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f  ate   0x000100 /
19d40 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
19d50 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65  a TK_COLLATE ope
19d60 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
19d70 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78   EP_Generic   0x
19d80 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65  000200 /* Ignore
19d90 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69   COLLATE or affi
19da0 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65  nity on this tre
19db0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
19dc0 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34  IntValue  0x0004
19dd0 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  00 /* Integer va
19de0 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
19df0 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
19e00 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
19e10 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e  t 0x000800 /* x.
19e20 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
19e30 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
19e40 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
19e50 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20  ne EP_Skip      
19e60 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c  0x001000 /* COLL
19e70 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49  ATE, AS, or UNLI
19e80 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  KELY */.#define 
19e90 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30  EP_Reduced   0x0
19ea0 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  02000 /* Expr st
19eb0 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45  ruct EXPR_REDUCE
19ec0 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  DSIZE bytes only
19ed0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54   */.#define EP_T
19ee0 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30  okenOnly 0x00400
19ef0 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
19f00 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
19f10 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
19f20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 57 69 6e  /.#define EP_Win
19f30 20 20 20 20 20 20 20 30 78 30 30 38 30 30 30 20         0x008000 
19f40 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 77 69 6e 64  /* Contains wind
19f50 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  ow functions */.
19f60 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f  #define EP_MemTo
19f70 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a  ken  0x010000 /*
19f80 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33   Need to sqlite3
19f90 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54  DbFree() Expr.zT
19fa0 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oken */.#define 
19fb0 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30  EP_NoReduce  0x0
19fc0 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20  20000 /* Cannot 
19fd0 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74  EXPRDUP_REDUCE t
19fe0 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66  his Expr */.#def
19ff0 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20  ine EP_Unlikely 
1a000 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c   0x040000 /* unl
1a010 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c  ikely() or likel
1a020 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e  ihood() function
1a030 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
1a040 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30 30  onstFunc 0x08000
1a050 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55  0 /* A SQLITE_FU
1a060 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f  NC_CONSTANT or _
1a070 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e  SLOCHNG function
1a080 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
1a090 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30  anBeNull 0x10000
1a0a0 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c  0 /* Can be null
1a0b0 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c   despite NOT NUL
1a0c0 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
1a0d0 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75  #define EP_Subqu
1a0e0 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a  ery  0x200000 /*
1a0f0 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61   Tree contains a
1a100 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61   TK_SELECT opera
1a110 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
1a120 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34 30  P_Alias     0x40
1a130 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c  0000 /* Is an al
1a140 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74  ias for a result
1a150 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   set column */.#
1a160 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20 20  define EP_Leaf  
1a170 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20      0x800000 /* 
1a180 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69  Expr.pLeft, .pRi
1a190 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20  ght, .u.pSelect 
1a1a0 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66  all NULL */.#def
1a1b0 69 6e 65 20 45 50 5f 57 69 6e 46 75 6e 63 20 20  ine EP_WinFunc  
1a1c0 30 78 31 30 30 30 30 30 30 20 2f 2a 20 54 4b 5f  0x1000000 /* TK_
1a1d0 46 55 4e 43 54 49 4f 4e 20 77 69 74 68 20 45 78  FUNCTION with Ex
1a1e0 70 72 2e 79 2e 70 57 69 6e 20 73 65 74 20 2a 2f  pr.y.pWin set */
1a1f0 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 72  .#define EP_Subr
1a200 74 6e 20 20 20 30 78 32 30 30 30 30 30 30 20 2f  tn   0x2000000 /
1a210 2a 20 55 73 65 73 20 45 78 70 72 2e 79 2e 73 75  * Uses Expr.y.su
1a220 62 2e 20 54 4b 5f 49 4e 2c 20 5f 53 45 4c 45 43  b. TK_IN, _SELEC
1a230 54 2c 20 6f 72 20 5f 45 58 49 53 54 53 20 2a 2f  T, or _EXISTS */
1a240 0a 23 64 65 66 69 6e 65 20 45 50 5f 51 75 6f 74  .#define EP_Quot
1a250 65 64 20 20 20 30 78 34 30 30 30 30 30 30 20 2f  ed   0x4000000 /
1a260 2a 20 54 4b 5f 49 44 20 77 61 73 20 6f 72 69 67  * TK_ID was orig
1a270 69 6e 61 6c 6c 79 20 71 75 6f 74 65 64 20 2a 2f  inally quoted */
1a280 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74  .#define EP_Stat
1a290 69 63 20 20 20 30 78 38 30 30 30 30 30 30 20 2f  ic   0x8000000 /
1a2a0 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79  * Held in memory
1a2b0 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72   not obtained fr
1a2c0 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23  om malloc() */.#
1a2d0 64 65 66 69 6e 65 20 45 50 5f 49 73 54 72 75 65  define EP_IsTrue
1a2e0 20 20 30 78 31 30 30 30 30 30 30 30 20 2f 2a 20    0x10000000 /* 
1a2f0 41 6c 77 61 79 73 20 68 61 73 20 62 6f 6f 6c 65  Always has boole
1a300 61 6e 20 76 61 6c 75 65 20 6f 66 20 54 52 55 45  an value of TRUE
1a310 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
1a320 73 46 61 6c 73 65 20 30 78 32 30 30 30 30 30 30  sFalse 0x2000000
1a330 30 20 2f 2a 20 41 6c 77 61 79 73 20 68 61 73 20  0 /* Always has 
1a340 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 6f 66  boolean value of
1a350 20 46 41 4c 53 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   FALSE */../*.**
1a360 20 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74   The EP_Propagat
1a370 65 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20  e mask is a set 
1a380 6f 66 20 70 72 6f 70 65 72 74 69 65 73 20 74 68  of properties th
1a390 61 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  at automatically
1a3a0 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70   propagate.** up
1a3b0 77 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e  wards into paren
1a3c0 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66  t nodes..*/.#def
1a3d0 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  ine EP_Propagate
1a3e0 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f   (EP_Collate|EP_
1a3f0 53 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46  Subquery|EP_HasF
1a400 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  unc)../*.** Thes
1a410 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
1a420 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
1a430 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
1a440 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e   in the.** Expr.
1a450 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
1a460 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50  #define ExprHasP
1a470 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
1a480 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
1a490 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45  ))!=0).#define E
1a4a0 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74  xprHasAllPropert
1a4b0 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
1a4c0 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
1a4d0 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50  #define ExprSetP
1a4e0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
1a4f0 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
1a500 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65  .#define ExprCle
1a510 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  arProperty(E,P) 
1a520 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28    (E)->flags&=~(
1a530 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 41  P).#define ExprA
1a540 6c 77 61 79 73 54 72 75 65 28 45 29 20 20 20 28  lwaysTrue(E)   (
1a550 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 45 50 5f  ((E)->flags&(EP_
1a560 46 72 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73 54 72  FromJoin|EP_IsTr
1a570 75 65 29 29 3d 3d 45 50 5f 49 73 54 72 75 65 29  ue))==EP_IsTrue)
1a580 0a 23 64 65 66 69 6e 65 20 45 78 70 72 41 6c 77  .#define ExprAlw
1a590 61 79 73 46 61 6c 73 65 28 45 29 20 20 28 28 28  aysFalse(E)  (((
1a5a0 45 29 2d 3e 66 6c 61 67 73 26 28 45 50 5f 46 72  E)->flags&(EP_Fr
1a5b0 6f 6d 4a 6f 69 6e 7c 45 50 5f 49 73 46 61 6c 73  omJoin|EP_IsFals
1a5c0 65 29 29 3d 3d 45 50 5f 49 73 46 61 6c 73 65 29  e))==EP_IsFalse)
1a5d0 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
1a5e0 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
1a5f0 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
1a600 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
1a610 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
1a620 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
1a630 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
1a640 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
1a650 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
1a660 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
1a670 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
1a680 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
1a690 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1a6a0 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
1a6b0 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
1a6c0 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
1a6d0 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
1a6e0 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
1a6f0 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
1a700 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
1a710 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
1a720 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
1a730 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
1a740 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74  ormal Expr.** st
1a750 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
1a760 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
1a770 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
1a780 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a  t in Expr.flags.
1a790 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
1a7a0 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
1a7b0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
1a7c0 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
1a7d0 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
1a7e0 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
1a7f0 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
1a800 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
1a810 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
1a820 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
1a830 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
1a840 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
1a850 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
1a860 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
1a870 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
1a880 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
1a890 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
1a8a0 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
1a8b0 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
1a8c0 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
1a8d0 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
1a8e0 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
1a8f0 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73  mment.** above s
1a900 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
1a910 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
1a920 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
1a930 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
1a940 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
1a950 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
1a960 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
1a970 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
1a980 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
1a990 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
1a9a0 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
1a9b0 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
1a9c0 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
1a9d0 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
1a9e0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
1a9f0 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
1aa00 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
1aa10 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
1aa20 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
1aa30 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
1aa40 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
1aa50 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
1aa60 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
1aa70 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
1aa80 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
1aa90 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
1aaa0 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
1aab0 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
1aac0 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
1aad0 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
1aae0 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
1aaf0 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
1ab00 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
1ab10 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
1ab20 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
1ab30 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
1ab40 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
1ab50 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
1ab60 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
1ab70 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
1ab80 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
1ab90 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
1aba0 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
1abb0 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
1abc0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
1abd0 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
1abe0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1abf0 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
1ac00 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
1ac10 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
1ac20 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
1ac30 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
1ac40 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
1ac50 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
1ac60 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
1ac70 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
1ac80 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
1ac90 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
1aca0 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
1acb0 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
1acc0 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
1acd0 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
1ace0 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
1acf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ad00 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
1ad10 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
1ad20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
1ad30 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
1ad40 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
1ad50 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
1ad60 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
1ad70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
1ad80 20 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20   The parse tree 
1ad90 66 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73  for this express
1ada0 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
1adb0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1adc0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
1add0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
1ade0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
1adf0 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
1ae00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
1ae10 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
1ae20 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
1ae30 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
1ae40 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1ae50 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20  1 for DESC or 0 
1ae60 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75  for ASC */.    u
1ae70 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
1ae80 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
1ae90 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
1aea0 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
1aeb0 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
1aec0 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
1aed0 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
1aee0 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
1aef0 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e  COLUMN */.    un
1af00 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20  signed reusable 
1af10 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  :1;   /* Constan
1af20 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
1af30 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20  reusable */.    
1af40 75 6e 73 69 67 6e 65 64 20 62 53 6f 72 74 65 72  unsigned bSorter
1af50 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66 65 72  Ref :1; /* Defer
1af60 20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e 74 69   evaluation unti
1af70 6c 20 61 66 74 65 72 20 73 6f 72 74 69 6e 67 20  l after sorting 
1af80 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
1af90 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20       struct {.  
1afa0 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72        u16 iOrder
1afb0 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46  ByCol;      /* F
1afc0 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c  or ORDER BY, col
1afd0 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65  umn number in re
1afe0 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20  sult set */.    
1aff0 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
1b000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1b010 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
1b020 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
1b030 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20   */.      } x;. 
1b040 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45       int iConstE
1b050 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20  xprReg;      /* 
1b060 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63  Register in whic
1b070 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20  h Expr value is 
1b080 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20  cached */.    } 
1b090 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  u;.  } a[1];    
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b0b0 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61   One slot for ea
1b0c0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
1b0d0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1b0e0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1b0f0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
1b100 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
1b110 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
1b120 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
1b130 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
1b140 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
1b150 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
1b160 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
1b170 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
1b180 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
1b190 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
1b1a0 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
1b1b0 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
1b1c0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
1b1d0 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
1b1e0 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
1b1f0 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
1b200 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
1b210 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
1b220 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
1b230 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
1b240 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
1b250 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
1b260 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
1b270 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
1b280 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
1b290 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
1b2a0 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
1b2b0 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
1b2c0 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
1b2d0 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
1b2e0 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
1b2f0 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
1b300 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
1b310 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
1b320 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1b330 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1b340 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
1b350 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
1b360 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1b370 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
1b380 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
1b390 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
1b3a0 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
1b3b0 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
1b3c0 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
1b3d0 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
1b3e0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1b3f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1b400 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
1b410 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1b420 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
1b430 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74  ement..** Each t
1b440 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
1b450 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
1b460 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74  use is a separat
1b470 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20  e element of.** 
1b480 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20  the SrcList.a[] 
1b490 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  array..**.** Wit
1b4a0 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  h the addition o
1b4b0 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  f multiple datab
1b4c0 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65  ase support, the
1b4d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1b4e0 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f  ture.** can also
1b4f0 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63   be used to desc
1b500 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61  ribe a particula
1b510 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20  r table such as 
1b520 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a  the table that.*
1b530 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79  * is modified by
1b540 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
1b550 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74  TE, or UPDATE st
1b560 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61  atement.  In sta
1b570 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75  ndard SQL,.** su
1b580 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20  ch a table must 
1b590 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65  be a simple name
1b5a0 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51  : ID.  But in SQ
1b5b0 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20  Lite, the table 
1b5c0 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64  can.** now be id
1b5d0 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61  entified by a da
1b5e0 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64  tabase name, a d
1b5f0 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ot, then the tab
1b600 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a  le name: ID.ID..
1b610 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79  **.** The jointy
1b620 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68  pe starts out sh
1b630 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74  owing the join t
1b640 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  ype between the 
1b650 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a  current table.**
1b660 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61   and the next ta
1b670 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e  ble on the list.
1b680 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69    The parser bui
1b690 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69  lds the list thi
1b6a0 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71  s way..** But sq
1b6b0 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
1b6c0 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65  tJoinType() late
1b6d0 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69  r shifts the joi
1b6e0 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65  ntypes so that e
1b6f0 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20  ach.** jointype 
1b700 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f  expresses the jo
1b710 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
1b720 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
1b730 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a  vious table..**.
1b740 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65  ** In the colUse
1b750 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67  d field, the hig
1b760 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74  h-order bit (bit
1b770 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74   63) is set if t
1b780 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74  he table.** cont
1b790 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36  ains more than 6
1b7a0 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68  3 columns and th
1b7b0 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72  e 64-th or later
1b7c0 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e   column is used.
1b7d0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69  .*/.struct SrcLi
1b7e0 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b  st {.  int nSrc;
1b7f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b800 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73  r of tables or s
1b810 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65  ubqueries in the
1b820 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1b830 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20    u32 nAlloc;   
1b840 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b850 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65  entries allocate
1b860 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a  d in a[] below *
1b870 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69  /.  struct SrcLi
1b880 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63  st_item {.    Sc
1b890 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1b8a0 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69  /* Schema to whi
1b8b0 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20  ch this item is 
1b8c0 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61  fixed */.    cha
1b8d0 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f  r *zDatabase;  /
1b8e0 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
1b8f0 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20  se holding this 
1b900 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
1b910 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
1b920 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
1b930 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
1b940 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20  *zAlias;     /* 
1b950 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20  The "B" part of 
1b960 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73  a "A AS B" phras
1b970 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65  e.  zName is the
1b980 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c   "A" */.    Tabl
1b990 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
1b9a0 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f   An SQL table co
1b9b0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
1b9c0 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65  Name */.    Sele
1b9d0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a  ct *pSelect;  /*
1b9e0 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   A SELECT statem
1b9f0 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63  ent used in plac
1ba00 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
1ba10 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  e */.    int add
1ba20 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64  rFillSub;  /* Ad
1ba30 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74  dress of subrout
1ba40 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20  ine to manifest 
1ba50 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20  a subquery */.  
1ba60 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b    int regReturn;
1ba70 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1ba80 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61  holding return a
1ba90 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69  ddress of addrFi
1baa0 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74  llSub */.    int
1bab0 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f   regResult;    /
1bac0 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64  * Registers hold
1bad0 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61  ing results of a
1bae0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
1baf0 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
1bb00 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
1bb10 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
1bb20 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
1bb30 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
1bb40 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
1bb50 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
1bb60 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
1bb70 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1bb80 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
1bb90 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1bba0 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64  signed isIndexed
1bbb0 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  By :1;   /* True
1bbc0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
1bbd0 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
1bbe0 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
1bbf0 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31  ned isTabFunc :1
1bc00 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1bc10 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
1bc20 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f  nction syntax */
1bc30 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1bc40 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
1bc50 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
1bc60 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
1bc70 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ated */.      un
1bc80 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
1bc90 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
1bca0 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
1bcb0 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20  routine */.     
1bcc0 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75   unsigned isRecu
1bcd0 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54  rsive :1;   /* T
1bce0 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76  rue for recursiv
1bcf0 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57  e reference in W
1bd00 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b  ITH */.    } fg;
1bd10 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72  .    int iCursor
1bd20 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44  ;      /* The VD
1bd30 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
1bd40 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
1bd50 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
1bd60 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20    Expr *pOn;    
1bd70 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c      /* The ON cl
1bd80 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
1bd90 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55  /.    IdList *pU
1bda0 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55  sing;   /* The U
1bdb0 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
1bdc0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74   join */.    Bit
1bdd0 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f  mask colUsed;  /
1bde0 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73  * Bit N (1<<N) s
1bdf0 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f  et if column N o
1be00 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a  f pTab is used *
1be10 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
1be20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78      char *zIndex
1be30 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e  edBy;    /* Iden
1be40 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44  tifier from "IND
1be50 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e  EXED BY <zIndex>
1be60 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  " clause */.    
1be70 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75 6e    ExprList *pFun
1be80 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65  cArg;  /* Argume
1be90 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c  nts to table-val
1bea0 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ued-function */.
1beb0 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e      } u1;.    In
1bec0 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20 20  dex *pIBIndex;  
1bed0 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
1bee0 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
1bef0 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64 42   to u1.zIndexedB
1bf00 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  y */.  } a[1];  
1bf10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1bf20 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
1bf30 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74   identifier on t
1bf40 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
1bf50 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76  *.** Permitted v
1bf60 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63  alues of the Src
1bf70 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20  List.a.jointype 
1bf80 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65  field.*/.#define
1bf90 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78   JT_INNER     0x
1bfa0 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b  0001    /* Any k
1bfb0 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20  ind of inner or 
1bfc0 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64  cross join */.#d
1bfd0 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20  efine JT_CROSS  
1bfe0 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
1bff0 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20  Explicit use of 
1c000 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72  the CROSS keywor
1c010 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d */.#define JT_
1c020 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34  NATURAL   0x0004
1c030 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
1c040 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e  a "natural" join
1c050 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c   */.#define JT_L
1c060 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20  EFT      0x0008 
1c070 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72     /* Left outer
1c080 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1c090 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78   JT_RIGHT     0x
1c0a0 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74  0010    /* Right
1c0b0 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
1c0c0 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20  define JT_OUTER 
1c0d0 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a      0x0020    /*
1c0e0 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79   The "OUTER" key
1c0f0 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20  word is present 
1c100 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52  */.#define JT_ER
1c110 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20  ROR     0x0040  
1c120 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20    /* unknown or 
1c130 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e  unsupported join
1c140 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a   type */.../*.**
1c150 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61   Flags appropria
1c160 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c  te for the wctrl
1c170 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20  Flags parameter 
1c180 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  of sqlite3WhereB
1c190 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68  egin().** and th
1c1a0 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72  e WhereInfo.wctr
1c1b0 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a  lFlags member..*
1c1c0 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1c1d0 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
1c1e0 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
1c1f0 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53 45  **     WHERE_USE
1c200 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69  _LIMIT  == SF_Fi
1c210 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66  xedLimit.*/.#def
1c220 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1c230 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30  Y_NORMAL   0x000
1c240 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64  0 /* No-op */.#d
1c250 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1c260 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30  RBY_MIN      0x0
1c270 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  001 /* ORDER BY 
1c280 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
1c290 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  in() func */.#de
1c2a0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1c2b0 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30  BY_MAX      0x00
1c2c0 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  02 /* ORDER BY p
1c2d0 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61  rocessing for ma
1c2e0 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  x() func */.#def
1c2f0 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
1c300 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30  S_DESIRED  0x000
1c310 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20  4 /* Want to do 
1c320 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f  one-pass UPDATE/
1c330 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
1c340 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
1c350 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38 20  MULTIROW 0x0008 
1c360 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b  /* ONEPASS is ok
1c370 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1c380 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ows */.#define W
1c390 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f  HERE_DUPLICATES_
1c3a0 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20  OK    0x0010 /* 
1c3b0 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72  Ok to return a r
1c3c0 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63  ow more than onc
1c3d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1c3e0 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45 20  RE_OR_SUBCLAUSE 
1c3f0 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50 72      0x0020 /* Pr
1c400 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d 57  ocessing a sub-W
1c410 48 45 52 45 20 61 73 20 70 61 72 74 20 6f 66 0a  HERE as part of.
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c440 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52 20        ** the OR 
1c450 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f  optimization  */
1c460 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47  .#define WHERE_G
1c470 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20  ROUPBY          
1c480 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65 72  0x0040 /* pOrder
1c490 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47  By is really a G
1c4a0 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
1c4b0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1c4c0 54 42 59 20 20 20 20 20 20 20 30 78 30 30 38 30  TBY       0x0080
1c4d0 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20   /* pOrderby is 
1c4e0 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43  really a DISTINC
1c4f0 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  T clause */.#def
1c500 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44  ine WHERE_WANT_D
1c510 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 31 30  ISTINCT    0x010
1c520 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20  0 /* All output 
1c530 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74  needs to be dist
1c540 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  inct */.#define 
1c550 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55  WHERE_SORTBYGROU
1c560 50 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a  P      0x0200 /*
1c570 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33   Support sqlite3
1c580 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20  WhereIsSorted() 
1c590 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1c5a0 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20 20  _SEEK_TABLE     
1c5b0 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e    0x0400 /* Do n
1c5c0 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 6f  ot defer seeks o
1c5d0 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a  n main table */.
1c5e0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1c5f0 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20 30  DERBY_LIMIT    0
1c600 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42 59  x0800 /* ORDERBY
1c610 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e  +LIMIT on the in
1c620 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66  ner loop */.#def
1c630 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 55  ine WHERE_SEEK_U
1c640 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30 30  NIQ_TABLE  0x100
1c650 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65  0 /* Do not defe
1c660 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71 75  r seeks if uniqu
1c670 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
1c680 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c690 20 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f      0x2000    no
1c6a0 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1c6b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1c6c0 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20  E_USE_LIMIT     
1c6d0 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65     0x4000 /* Use
1c6e0 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f   the LIMIT in co
1c6f0 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a  st estimates */.
1c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c710 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30          /*     0
1c720 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72  x8000    not cur
1c730 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a  rently used */..
1c740 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  /* Allowed retur
1c750 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
1c760 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
1c770 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  inct().*/.#defin
1c780 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1c790 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
1c7a0 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
1c7b0 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
1c7c0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1c7d0 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
1c7e0 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
1c7f0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
1c800 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
1c810 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
1c820 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
1c830 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
1c840 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1c850 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
1c860 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
1c870 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
1c880 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
1c890 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
1c8a0 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
1c8b0 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
1c8c0 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
1c8d0 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
1c8e0 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
1c8f0 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
1c900 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
1c910 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
1c920 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
1c930 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
1c940 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
1c950 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
1c960 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
1c970 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
1c980 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
1c990 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
1c9a0 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
1c9b0 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
1c9c0 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
1c9d0 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
1c9e0 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
1c9f0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
1ca00 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
1ca10 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
1ca20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
1ca30 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
1ca40 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
1ca50 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
1ca60 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
1ca70 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
1ca80 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74  ner-most.** cont
1ca90 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20  ext is searched 
1caa0 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61  first.  If no ma
1cab0 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1cac0 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20  e next outer.** 
1cad0 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b  context is check
1cae0 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ed.  If there is
1caf0 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c   still no match,
1cb00 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78   the next contex
1cb10 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e  t.** is checked.
1cb20 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63    This process c
1cb30 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65  ontinues until e
1cb40 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73  ither a match is
1cb50 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c   found.** or all
1cb60 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68   contexts are ch
1cb70 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74  eck.  When a mat
1cb80 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1cb90 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a   nRef member of.
1cba0 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63  ** the context c
1cbb0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61  ontaining the ma
1cbc0 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  tch is increment
1cbd0 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73  ed..**.** Each s
1cbe0 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e  ubquery gets a n
1cbf0 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20  ew NameContext. 
1cc00 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64   The pNext field
1cc10 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
1cc20 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e  * NameContext in
1cc30 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72   the parent quer
1cc40 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f  y.  Thus the pro
1cc50 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67  cess of scanning
1cc60 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1cc70 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70  ext list corresp
1cc80 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e  onds to searchin
1cc90 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73  g through succes
1cca0 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20  sively outer.** 
1ccb0 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69  subqueries looki
1ccc0 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a  ng for a match..
1ccd0 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  */.struct NameCo
1cce0 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20  ntext {.  Parse 
1ccf0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f  *pParse;       /
1cd00 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a  * The parser */.
1cd10 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
1cd20 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ist;   /* One or
1cd30 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65   more tables use
1cd40 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d  d to resolve nam
1cd50 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  es */.  union {.
1cd60 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45      ExprList *pE
1cd70 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
1cd80 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73  onal list of res
1cd90 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult-set columns 
1cda0 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f 20 2a  */.    AggInfo *
1cdb0 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49  pAggInfo;   /* I
1cdc0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1cdd0 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74   aggregates at t
1cde0 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20  his level */.   
1cdf0 20 55 70 73 65 72 74 20 2a 70 55 70 73 65 72 74   Upsert *pUpsert
1ce00 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f 4e 46  ;     /* ON CONF
1ce10 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e 66 6f  LICT clause info
1ce20 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 6e 20  rmation from an 
1ce30 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20 75 4e  upsert */.  } uN
1ce40 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  C;.  NameContext
1ce50 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
1ce60 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
1ce70 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
1ce80 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
1ce90 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
1cea0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ceb0 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
1cec0 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
1ced0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1cee0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1cef0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
1cf00 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
1cf10 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
1cf20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73  */.  u16 ncFlags
1cf30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72  ;         /* Zer
1cf40 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
1cf50 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
1cf60 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  ow */.  Select *
1cf70 70 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f 2a 20  pWinSelect;  /* 
1cf80 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1cf90 20 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77 20   for any window 
1cfa0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
1cfb0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
1cfc0 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61  alues for the Na
1cfd0 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61  meContext, ncFla
1cfe0 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
1cff0 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1d000 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76  s (all checked v
1d010 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
1d020 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20      NC_HasAgg   
1d030 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 20 20 20   == SF_HasAgg   
1d040 20 3d 3d 20 45 50 5f 41 67 67 0a 2a 2a 20 20 20   == EP_Agg.**   
1d050 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   NC_MinMaxAgg ==
1d060 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d   SF_MinMaxAgg ==
1d070 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
1d080 4d 41 58 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73  MAX.**    NC_Has
1d090 57 69 6e 20 20 20 20 3d 3d 20 45 50 5f 57 69 6e  Win    == EP_Win
1d0a0 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  .**.*/.#define N
1d0b0 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30  C_AllowAgg  0x00
1d0c0 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  01  /* Aggregate
1d0d0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
1d0e0 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
1d0f0 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64  define NC_PartId
1d100 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54  x   0x0002  /* T
1d110 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
1d120 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
1d130 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e   WHERE */.#defin
1d140 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
1d150 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69  x0004  /* True i
1d160 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
1d170 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
1d180 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
1d190 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
1d1a0 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20  0x0008  /* True 
1d1b0 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
1d1c0 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
1d1d0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1d1e0 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78   NC_HasAgg    0x
1d1f0 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  0010  /* One or 
1d200 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
1d210 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f  unctions seen */
1d220 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45  .#define NC_IdxE
1d230 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a  xpr   0x0020  /*
1d240 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1d250 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52  ng columns of CR
1d260 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
1d270 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65  efine NC_VarSele
1d280 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20  ct 0x0040  /* A 
1d290 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
1d2a0 65 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65  ery has been see
1d2b0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1d2c0 55 45 4c 69 73 74 20 20 20 20 30 78 30 30 38 30  UEList    0x0080
1d2d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43    /* True if uNC
1d2e0 2e 70 45 4c 69 73 74 20 69 73 20 75 73 65 64 20  .pEList is used 
1d2f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 41  */.#define NC_UA
1d300 67 67 49 6e 66 6f 20 20 30 78 30 31 30 30 20 20  ggInfo  0x0100  
1d310 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70  /* True if uNC.p
1d320 41 67 67 49 6e 66 6f 20 69 73 20 75 73 65 64 20  AggInfo is used 
1d330 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 55 55  */.#define NC_UU
1d340 70 73 65 72 74 20 20 20 30 78 30 32 30 30 20 20  psert   0x0200  
1d350 2f 2a 20 54 72 75 65 20 69 66 20 75 4e 43 2e 70  /* True if uNC.p
1d360 55 70 73 65 72 74 20 69 73 20 75 73 65 64 20 2a  Upsert is used *
1d370 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
1d380 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f  MaxAgg 0x1000  /
1d390 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67  * min/max aggreg
1d3a0 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20  ates seen.  See 
1d3b0 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64  note above */.#d
1d3c0 65 66 69 6e 65 20 4e 43 5f 43 6f 6d 70 6c 65 78  efine NC_Complex
1d3d0 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54 72     0x2000  /* Tr
1d3e0 75 65 20 69 66 20 61 20 66 75 6e 63 74 69 6f 6e  ue if a function
1d3f0 20 6f 72 20 73 75 62 71 75 65 72 79 20 73 65 65   or subquery see
1d400 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1d410 41 6c 6c 6f 77 57 69 6e 20 20 30 78 34 30 30 30  AllowWin  0x4000
1d420 20 20 2f 2a 20 57 69 6e 64 6f 77 20 66 75 6e 63    /* Window func
1d430 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
1d440 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
1d450 65 20 4e 43 5f 48 61 73 57 69 6e 20 20 20 20 30  e NC_HasWin    0
1d460 78 38 30 30 30 20 20 2f 2a 20 4f 6e 65 20 6f 72  x8000  /* One or
1d470 20 6d 6f 72 65 20 77 69 6e 64 6f 77 20 66 75 6e   more window fun
1d480 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 0a  ctions seen */..
1d490 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1d4a0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1d4b0 6e 67 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69  ng object descri
1d4c0 62 65 73 20 61 20 73 69 6e 67 6c 65 20 4f 4e 20  bes a single ON 
1d4d0 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63 6c 61 75  CONFLICT.** clau
1d4e0 73 65 20 69 6e 20 61 6e 20 75 70 73 65 72 74 2e  se in an upsert.
1d4f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 55 70 73 65  .**.** The pUpse
1d500 72 74 54 61 72 67 65 74 20 66 69 65 6c 64 20 69  rtTarget field i
1d510 73 20 6f 6e 6c 79 20 73 65 74 20 69 66 20 74 68  s only set if th
1d520 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  e ON CONFLICT cl
1d530 61 75 73 65 20 69 6e 63 6c 75 64 65 73 0a 2a 2a  ause includes.**
1d540 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72 67 65 74   conflict-target
1d550 20 63 6c 61 75 73 65 2e 20 20 28 49 6e 20 22 4f   clause.  (In "O
1d560 4e 20 43 4f 4e 46 4c 49 43 54 28 61 2c 62 29 22  N CONFLICT(a,b)"
1d570 20 74 68 65 20 22 28 61 2c 62 29 22 20 69 73 20   the "(a,b)" is 
1d580 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d  the.** conflict-
1d590 74 61 72 67 65 74 20 63 6c 61 75 73 65 2e 29 20  target clause.) 
1d5a0 20 54 68 65 20 70 55 70 73 65 72 74 54 61 72 67   The pUpsertTarg
1d5b0 65 74 57 68 65 72 65 20 69 73 20 74 68 65 20 6f  etWhere is the o
1d5c0 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48 45 52 45  ptional.** WHERE
1d5d0 20 63 6c 61 75 73 65 20 75 73 65 64 20 74 6f 20   clause used to 
1d5e0 69 64 65 6e 74 69 66 79 20 70 61 72 74 69 61 6c  identify partial
1d5f0 20 75 6e 69 71 75 65 20 69 6e 64 65 78 65 73 2e   unique indexes.
1d600 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65 72 74 53 65  .**.** pUpsertSe
1d610 74 20 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66  t is the list of
1d620 20 63 6f 6c 75 6d 6e 3d 65 78 70 72 20 74 65 72   column=expr ter
1d630 6d 73 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  ms of the UPDATE
1d640 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 2a 2a 20   statement. .** 
1d650 54 68 65 20 70 55 70 73 65 72 74 53 65 74 20 66  The pUpsertSet f
1d660 69 65 6c 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72  ield is NULL for
1d670 20 61 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 44   a ON CONFLICT D
1d680 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 54 68 65 0a  O NOTHING.  The.
1d690 2a 2a 20 70 55 70 73 65 72 74 57 68 65 72 65 20  ** pUpsertWhere 
1d6a0 69 73 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  is the WHERE cla
1d6b0 75 73 65 20 66 6f 72 20 74 68 65 20 55 50 44 41  use for the UPDA
1d6c0 54 45 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 69  TE and is NULL i
1d6d0 66 20 74 68 65 0a 2a 2a 20 57 48 45 52 45 20 63  f the.** WHERE c
1d6e0 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64  lause is omitted
1d6f0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 70 73 65  ..*/.struct Upse
1d700 72 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  rt {.  ExprList 
1d710 2a 70 55 70 73 65 72 74 54 61 72 67 65 74 3b 20  *pUpsertTarget; 
1d720 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 65 73   /* Optional des
1d730 63 72 69 70 74 69 6f 6e 20 6f 66 20 63 6f 6e 66  cription of conf
1d740 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  licting index */
1d750 0a 20 20 45 78 70 72 20 2a 70 55 70 73 65 72 74  .  Expr *pUpsert
1d760 54 61 72 67 65 74 57 68 65 72 65 3b 20 2f 2a 20  TargetWhere; /* 
1d770 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
1d780 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 74   partial index t
1d790 61 72 67 65 74 73 20 2a 2f 0a 20 20 45 78 70 72  argets */.  Expr
1d7a0 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 65 74  List *pUpsertSet
1d7b0 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 53 45 54  ;     /* The SET
1d7c0 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 61 6e 20   clause from an 
1d7d0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55 50 44 41  ON CONFLICT UPDA
1d7e0 54 45 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55  TE */.  Expr *pU
1d7f0 70 73 65 72 74 57 68 65 72 65 3b 20 20 20 20 20  psertWhere;     
1d800 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
1d810 65 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e  e for the ON CON
1d820 46 4c 49 43 54 20 55 50 44 41 54 45 20 2a 2f 0a  FLICT UPDATE */.
1d830 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20    /* The fields 
1d840 61 62 6f 76 65 20 63 6f 6d 70 72 69 73 65 20 74  above comprise t
1d850 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
1d860 72 20 74 68 65 20 75 70 73 65 72 74 20 63 6c 61  r the upsert cla
1d870 75 73 65 2e 0a 20 20 2a 2a 20 54 68 65 20 66 69  use..  ** The fi
1d880 65 6c 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75  elds below are u
1d890 73 65 64 20 74 6f 20 74 72 61 6e 73 66 65 72 20  sed to transfer 
1d8a0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
1d8b0 20 74 68 65 20 49 4e 53 45 52 54 0a 20 20 2a 2a   the INSERT.  **
1d8c0 20 70 72 6f 63 65 73 73 69 6e 67 20 64 6f 77 6e   processing down
1d8d0 20 69 6e 74 6f 20 74 68 65 20 55 50 44 41 54 45   into the UPDATE
1d8e0 20 70 72 6f 63 65 73 73 69 6e 67 20 77 68 69 6c   processing whil
1d8f0 65 20 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 64  e generating cod
1d900 65 2e 0a 20 20 2a 2a 20 55 70 73 65 72 74 20 6f  e..  ** Upsert o
1d910 77 6e 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  wns the memory a
1d920 6c 6c 6f 63 61 74 65 64 20 61 62 6f 76 65 2c 20  llocated above, 
1d930 62 75 74 20 6e 6f 74 20 74 68 65 20 6d 65 6d 6f  but not the memo
1d940 72 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a 20 20 49  ry below. */.  I
1d950 6e 64 65 78 20 2a 70 55 70 73 65 72 74 49 64 78  ndex *pUpsertIdx
1d960 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 73  ;        /* Cons
1d970 74 72 61 69 6e 74 20 74 68 61 74 20 70 55 70 73  traint that pUps
1d980 65 72 74 54 61 72 67 65 74 20 69 64 65 6e 74 69  ertTarget identi
1d990 66 69 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73  fies */.  SrcLis
1d9a0 74 20 2a 70 55 70 73 65 72 74 53 72 63 3b 20 20  t *pUpsertSrc;  
1d9b0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 6f 20      /* Table to 
1d9c0 62 65 20 75 70 64 61 74 65 64 20 2a 2f 0a 20 20  be updated */.  
1d9d0 69 6e 74 20 72 65 67 44 61 74 61 3b 20 20 20 20  int regData;    
1d9e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
1d9f0 73 74 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64  st register hold
1da00 69 6e 67 20 61 72 72 61 79 20 6f 66 20 56 41 4c  ing array of VAL
1da10 55 45 53 20 2a 2f 0a 20 20 69 6e 74 20 69 44 61  UES */.  int iDa
1da20 74 61 43 75 72 3b 20 20 20 20 20 20 20 20 20 20  taCur;          
1da30 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1da40 68 65 20 64 61 74 61 20 63 75 72 73 6f 72 20 2a  he data cursor *
1da50 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b  /.  int iIdxCur;
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1da70 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69   Index of the fi
1da80 72 73 74 20 69 6e 64 65 78 20 63 75 72 73 6f 72  rst index cursor
1da90 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
1daa0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1dab0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1dac0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c  ture contains al
1dad0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  l information.**
1dae0 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
1daf0 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73  ate code for a s
1db00 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61  ingle SELECT sta
1db10 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 53 65  tement..**.** Se
1db20 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d  e the header com
1db30 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63 6f 6d 70  ment on the comp
1db40 75 74 65 4c 69 6d 69 74 52 65 67 69 73 74 65 72  uteLimitRegister
1db50 73 28 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  s() routine for 
1db60 61 0a 2a 2a 20 64 65 74 61 69 6c 65 64 20 64 65  a.** detailed de
1db70 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65  scription of the
1db80 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20   meaning of the 
1db90 69 4c 69 6d 69 74 20 61 6e 64 20 69 4f 66 66 73  iLimit and iOffs
1dba0 65 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a  et fields..**.**
1dbb0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
1dbc0 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
1dbd0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
1dbe0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1dbf0 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
1dc00 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
1dc10 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
1dc20 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
1dc30 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
1dc40 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
1dc50 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
1dc60 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
1dc70 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
1dc80 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
1dc90 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
1dca0 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
1dcb0 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1dcc0 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
1dcd0 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
1dce0 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
1dcf0 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
1dd00 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
1dd10 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
1dd20 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
1dd30 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
1dd40 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
1dd50 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
1dd60 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
1dd70 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
1dd80 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
1dd90 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
1dda0 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
1ddb0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
1ddc0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1ddd0 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
1dde0 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
1ddf0 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
1de00 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
1de10 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1de20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
1de30 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
1de40 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
1de50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1de60 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
1de70 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
1de80 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
1de90 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65  /.  LogEst nSele
1dea0 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  ctRow;     /* Es
1deb0 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
1dec0 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
1ded0 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b  .  u32 selFlags;
1dee0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
1def0 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73  ious SF_* values
1df00 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74   */.  int iLimit
1df10 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20  , iOffset;   /* 
1df20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  Memory registers
1df30 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26   holding LIMIT &
1df40 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73   OFFSET counters
1df50 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 49 64 3b   */.  u32 selId;
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1df70 55 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65  Unique identifie
1df80 72 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  r number for thi
1df90 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 69 6e  s SELECT */.  in
1dfa0 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  t addrOpenEphm[2
1dfb0 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45  ];   /* OP_OpenE
1dfc0 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c  phem opcodes rel
1dfd0 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ated to this sel
1dfe0 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ect */.  SrcList
1dff0 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20   *pSrc;         
1e000 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75  /* The FROM clau
1e010 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  se */.  Expr *pW
1e020 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f  here;          /
1e030 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1e040 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
1e050 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f   *pGroupBy;    /
1e060 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63  * The GROUP BY c
1e070 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1e080 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20  *pHaving;       
1e090 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20    /* The HAVING 
1e0a0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1e0b0 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
1e0c0 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20     /* The ORDER 
1e0d0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53  BY clause */.  S
1e0e0 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20  elect *pPrior;  
1e0f0 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73        /* Prior s
1e100 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
1e110 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
1e120 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ment */.  Select
1e130 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
1e140 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20   /* Next select 
1e150 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61  to the left in a
1e160 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45   compound */.  E
1e170 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20  xpr *pLimit;    
1e180 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65        /* LIMIT e
1e190 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
1e1a0 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
1e1b0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1e1c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
1e1d0 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
1e1e0 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
1e1f0 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
1e200 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1e210 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20  MIT_WINDOWFUNC. 
1e220 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e 3b 20 20   Window *pWin;  
1e230 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1e240 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69  of window functi
1e250 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e 64 6f 77 20  ons */.  Window 
1e260 2a 70 57 69 6e 44 65 66 6e 3b 20 20 20 20 20 20  *pWinDefn;      
1e270 2f 2a 20 4c 69 73 74 20 6f 66 20 6e 61 6d 65 64  /* List of named
1e280 20 77 69 6e 64 6f 77 20 64 65 66 69 6e 69 74 69   window definiti
1e290 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ons */.#endif.};
1e2a0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1e2b0 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63  values for Selec
1e2c0 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65  t.selFlags.  The
1e2d0 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61   "SF" prefix sta
1e2e0 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65  nds for.** "Sele
1e2f0 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20  ct Flag"..**.** 
1e300 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1e310 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76  s (all checked v
1e320 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20  ia assert()).** 
1e330 20 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20      SF_HasAgg   
1e340 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a    == NC_HasAgg.*
1e350 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41  *     SF_MinMaxA
1e360 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78  gg  == NC_MinMax
1e370 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54  Agg     == SQLIT
1e380 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a  E_FUNC_MINMAX.**
1e390 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d       SF_FixedLim
1e3a0 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f  it == WHERE_USE_
1e3b0 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT.*/.#define
1e3c0 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
1e3d0 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f     0x00001  /* O
1e3e0 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
1e3f0 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
1e400 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20  ine SF_All      
1e410 20 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f        0x00002  /
1e420 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41  * Includes the A
1e430 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  LL keyword */.#d
1e440 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
1e450 64 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20  d       0x00004 
1e460 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
1e470 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
1e480 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
1e490 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
1e4a0 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74  0x00008  /* Cont
1e4b0 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f  ains agg functio
1e4c0 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59  ns or a GROUP BY
1e4d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
1e4e0 61 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78  asAgg         0x
1e4f0 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69  00010  /* Contai
1e500 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
1e510 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
1e520 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72  e SF_UsesEphemer
1e530 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20  al  0x00020  /* 
1e540 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68  Uses the OpenEph
1e550 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f  emeral opcode */
1e560 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61  .#define SF_Expa
1e570 6e 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30  nded       0x000
1e580 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65  40  /* sqlite3Se
1e590 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c  lectExpand() cal
1e5a0 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23  led on this */.#
1e5b0 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70  define SF_HasTyp
1e5c0 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30  eInfo    0x00080
1e5d0 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65    /* FROM subque
1e5e0 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20  ries have Table 
1e5f0 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66  metadata */.#def
1e600 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20  ine SF_Compound 
1e610 20 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f        0x00100  /
1e620 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70  * Part of a comp
1e630 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64  ound query */.#d
1e640 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20  efine SF_Values 
1e650 20 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20          0x00200 
1e660 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20   /* Synthesized 
1e670 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75  from VALUES clau
1e680 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
1e690 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20  _MultiValue     
1e6a0 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67  0x00400  /* Sing
1e6b0 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77  le VALUES term w
1e6c0 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
1e6d0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1e6e0 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30  NestedFrom     0
1e6f0 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20  x00800  /* Part 
1e700 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  of a parenthesiz
1e710 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  ed FROM clause *
1e720 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e  /.#define SF_Min
1e730 4d 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31  MaxAgg      0x01
1e740 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74  000  /* Aggregat
1e750 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e  e containing min
1e760 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23  () or max() */.#
1e770 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
1e780 69 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30  ive      0x02000
1e790 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
1e7a0 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
1e7b0 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
1e7c0 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69  efine SF_FixedLi
1e7d0 6d 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20  mit     0x04000 
1e7e0 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73   /* nSelectRow s
1e7f0 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74  et by a constant
1e800 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e   LIMIT */.#defin
1e810 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72  e SF_MaybeConver
1e820 74 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20  t   0x08000  /* 
1e830 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70  Need convertComp
1e840 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1e850 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1e860 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20  e SF_Converted  
1e870 20 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20      0x10000  /* 
1e880 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  By convertCompou
1e890 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1e8a0 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1e8b0 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e  SF_IncludeHidden
1e8c0 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e    0x20000  /* In
1e8d0 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c  clude hidden col
1e8e0 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a  umns in output *
1e8f0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d  /.#define SF_Com
1e900 70 6c 65 78 52 65 73 75 6c 74 20 20 30 78 34 30  plexResult  0x40
1e910 30 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 63  000  /* Result c
1e920 6f 6e 74 61 69 6e 73 20 73 75 62 71 75 65 72 79  ontains subquery
1e930 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a   or function */.
1e940 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
1e950 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63  ts of a SELECT c
1e960 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
1e970 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
1e980 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a  s, as defined.**
1e990 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   by one of the f
1e9a0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e  ollowing macros.
1e9b0 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66    The "SRT" pref
1e9c0 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54  ix means "SELECT
1e9d0 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22   Result.** Type"
1e9e0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e9f0 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72  Union       Stor
1ea00 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b  e results as a k
1ea10 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ey in a temporar
1ea20 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20  y index.**      
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1ea40 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
1ea50 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1ea60 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
1ea70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
1ea80 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
1ea90 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
1eaa0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1eab0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
1eac0 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
1ead0 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
1eae0 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
1eaf0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
1eb00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1eb10 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
1eb20 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
1eb30 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
1eb40 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
1eb50 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
1eb60 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
1eb70 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
1eb80 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1eb90 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
1eba0 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
1ebb0 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebd0 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
1ebe0 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
1ebf0 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
1ec00 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
1ec10 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
1ec20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1ec30 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
1ec40 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
1ec50 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1ec60 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1ec70 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1ec80 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
1ec90 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
1eca0 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
1ecb0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ecc0 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
1ecd0 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
1ece0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
1ecf0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
1ed00 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
1ed10 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
1ed20 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
1ed30 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1ed50 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
1ed60 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
1ed70 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed90 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
1eda0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
1edb0 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
1edc0 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1ede0 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
1edf0 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
1ee00 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
1ee10 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
1ee20 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
1ee30 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
1ee40 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
1ee50 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee70 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
1ee80 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
1ee90 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1eea0 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1eeb0 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74           Apply t
1eec0 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73  he affinity pDes
1eed0 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72  t->affSdst befor
1eee0 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20  e storing.**    
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef00 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20   results.  Used 
1ef10 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e  to implement "IN
1ef20 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a   (SELECT ...)"..
1ef30 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70  **.**     SRT_Ep
1ef40 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65  hemTab    Create
1ef50 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   an temporary ta
1ef60 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1ef70 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20  rm and store.** 
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef90 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74      the result t
1efa0 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72  here. The cursor
1efb0 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66   is left open af
1efc0 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ter.**          
1efd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1efe0 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c  ning.  This is l
1eff0 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78  ike SRT_Table ex
1f000 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20  cept that.**    
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f020 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   this destinatio
1f030 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70  n uses OP_OpenEp
1f040 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74  hemeral to creat
1f050 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1f060 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62           the tab
1f070 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20  le first..**.** 
1f080 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e      SRT_Coroutin
1f090 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63  e   Generate a c
1f0a0 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  o-routine that r
1f0b0 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77  eturns a new row
1f0c0 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   of.**          
1f0d0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1f0e0 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20  ts each time it 
1f0f0 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65  is invoked.  The
1f100 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20   entry point.** 
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f120 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f      of the co-ro
1f130 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20  utine is stored 
1f140 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
1f150 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20  t->iSDParm.**   
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f170 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74    and the result
1f180 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69   row is stored i
1f190 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72  n pDest->nDest r
1f1a0 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20  egisters.**     
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1c0 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44  starting with pD
1f1d0 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a  est->iSdst..**.*
1f1e0 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20  *     SRT_Table 
1f1f0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1f200 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  lts in temporary
1f210 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1f220 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52  DParm..**     SR
1f230 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68  T_Fifo        Th
1f240 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45  is is like SRT_E
1f250 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74  phemTab except t
1f260 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a  hat the table.**
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20       is assumed 
1f290 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70  to already be op
1f2a0 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61  en.  SRT_Fifo ha
1f2b0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1f2c0 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64           the add
1f2d0 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79  itional property
1f2e0 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74   of being able t
1f2f0 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20  o ignore.**     
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1f320 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1f330 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53  RT_DistFifo    S
1f340 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1f350 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
1f360 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1f370 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1f380 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73           But als
1f390 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  o use temporary 
1f3a0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1f3b0 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20  Parm+1 as.**    
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3d0 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c   a record of all
1f3e0 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61   prior results a
1f3f0 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75  nd ignore any du
1f400 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20  plicate.**      
1f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f420 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73  ows.  Name means
1f430 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66  :  "Distinct Fif
1f440 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  o"..**.**     SR
1f450 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74  T_Queue       St
1f460 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1f470 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1f480 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65  est->iSDParm (re
1f490 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  ally.**         
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69              an i
1f4b0 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61  ndex).  Append a
1f4c0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1f4d0 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74   so that all ent
1f4e0 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ries.**         
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20              are 
1f500 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20  distinct..**.** 
1f510 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75      SRT_DistQueu
1f520 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74  e   Store result
1f530 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1f540 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1f550 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20  rm only if.**   
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72    the same recor
1f580 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e  d has never been
1f590 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20   stored before. 
1f5a0 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20   The.**         
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
1f5c0 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50  x at pDest->iSDP
1f5d0 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70  arm+1 hold all p
1f5e0 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a  rior stores..*/.
1f5f0 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f  #define SRT_Unio
1f600 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53  n        1  /* S
1f610 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b  tore result as k
1f620 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1f630 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1f640 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f  xcept       2  /
1f650 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20  * Remove result 
1f660 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64  from a UNION ind
1f670 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1f680 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33  T_Exists       3
1f690 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20    /* Store 1 if 
1f6a0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f  the result is no
1f6b0 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  t empty */.#defi
1f6c0 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20  ne SRT_Discard  
1f6d0 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74      4  /* Do not
1f6e0 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   save the result
1f6f0 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64  s anywhere */.#d
1f700 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20  efine SRT_Fifo  
1f710 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f         5  /* Sto
1f720 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1f730 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1f740 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  tic rowid */.#de
1f750 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66  fine SRT_DistFif
1f760 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65  o     6  /* Like
1f770 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75   SRT_Fifo, but u
1f780 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1f790 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ly */.#define SR
1f7a0 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37  T_Queue        7
1f7b0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1f7c0 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f  t in an queue */
1f7d0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1f7e0 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20  tQueue    8  /* 
1f7f0 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20  Like SRT_Queue, 
1f800 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1f810 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54  ts only */../* T
1f820 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1f830 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
1f840 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
1f850 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
1f860 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
1f870 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
1f880 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23  RT_DistQueue)..#
1f890 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
1f8a0 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75  t       9  /* Ou
1f8b0 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
1f8c0 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1f8d0 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
1f8e0 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20     10  /* Store 
1f8f0 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
1f900 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
1f910 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
1f920 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20     11  /* Store 
1f930 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
1f940 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
1f950 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d  define SRT_Ephem
1f960 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72  Tab    12  /* Cr
1f970 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74  eate transient t
1f980 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b  ab and store lik
1f990 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23  e SRT_Table */.#
1f9a0 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75  define SRT_Corou
1f9b0 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65  tine   13  /* Ge
1f9c0 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20  nerate a single 
1f9d0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1f9e0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
1f9f0 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20  le       14  /* 
1fa00 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1fa10 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1fa20 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1fa30 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1fa40 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
1fa50 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72  t describes wher
1fa60 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20  e to put of the 
1fa70 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20  results of.** a 
1fa80 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1fa90 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1faa0 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44  ctDest {.  u8 eD
1fab0 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  est;            
1fac0 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
1fad0 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
1fae0 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61  .  On of SRT_* a
1faf0 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  bove. */.  int i
1fb00 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20  SDParm;         
1fb10 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
1fb20 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
1fb30 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
1fb40 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
1fb50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61             /* Ba
1fb60 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
1fb70 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
1fb80 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
1fb90 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1fba0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
1fbb0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
1fbc0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66   */.  char *zAff
1fbd0 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66  Sdst;      /* Af
1fbe0 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
1fbf0 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
1fc00 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1fc10 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79  OrderBy;  /* Key
1fc20 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54   columns for SRT
1fc30 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44  _Queue and SRT_D
1fc40 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a  istQueue */.};..
1fc50 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
1fc60 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
1fc70 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
1fc80 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
1fc90 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a  AUTOINCREMENT.**
1fca0 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
1fcb0 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
1fcc0 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
1fcd0 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
1fce0 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
1fcf0 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
1fd00 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
1fd10 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
1fd20 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
1fd30 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
1fd40 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
1fd50 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
1fd60 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
1fd70 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
1fd80 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
1fd90 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e   inserts are don
1fda0 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  e within trigger
1fdb0 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
1fdc0 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
1fdd0 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
1fde0 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
1fdf0 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
1fe00 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
1fe10 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
1fe20 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
1fe30 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
1fe40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
1fe50 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
1fe60 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
1fe70 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
1fe80 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
1fe90 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
1fea0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1feb0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
1fec0 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
1fed0 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
1fee0 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1fef0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1ff00 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
1ff10 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
1ff20 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
1ff30 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
1ff40 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1ff50 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
1ff60 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
1ff70 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c  /.};../*.** At l
1ff80 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63  east one instanc
1ff90 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1ffa0 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
1ffb0 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
1ffc0 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74  .** trigger that
1ffd0 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68   may be fired wh
1ffe0 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49  ile parsing an I
1fff0 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
20000 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65   DELETE.** state
20010 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f  ment. All such o
20020 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65  bjects are store
20030 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20  d in the linked 
20040 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a  list headed at.*
20050 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  * Parse.pTrigger
20060 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20  Prg and deleted 
20070 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63  once statement c
20080 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62  ompilation has b
20090 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64  een.** completed
200a0 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73  ..**.** A Vdbe s
200b0 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20  ub-program that 
200c0 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62  implements the b
200d0 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61  ody and WHEN cla
200e0 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a  use of trigger.*
200f0 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72  * TriggerPrg.pTr
20100 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20  igger, assuming 
20110 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  a default ON CON
20120 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a  FLICT clause of.
20130 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72  ** TriggerPrg.or
20140 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20  conf, is stored 
20150 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72  in the TriggerPr
20160 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61  g.pProgram varia
20170 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73  ble..** The Pars
20180 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
20190 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e  st never contain
201a0 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69  s two entries wi
201b0 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76  th the same.** v
201c0 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70  alues for both p
201d0 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f  Trigger and orco
201e0 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72  nf..**.** The Tr
201f0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
20200 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[0] variable is
20210 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f   set to a mask o
20220 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a  f old.* columns.
20230 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20  ** accessed (or 
20240 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69  set to 0 for tri
20250 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61  ggers fired as a
20260 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52   result of INSER
20270 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29  T.** statements)
20280 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
20290 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
202a0 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
202b0 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
202c0 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
202d0 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
202e0 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
202f0 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
20300 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
20310 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
20320 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
20330 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
20340 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
20350 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
20360 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
20370 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
20380 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
20390 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
203a0 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
203b0 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
203c0 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
203d0 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
203e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
203f0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
20400 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
20410 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
20420 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
20430 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
20440 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
20450 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
20460 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
20470 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
20480 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
20490 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
204a0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
204b0 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
204c0 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61  def unsigned cha
204d0 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54  r yDbMask[(SQLIT
204e0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39  E_MAX_ATTACHED+9
204f0 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44  )/8];.# define D
20500 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
20510 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28    (((M)[(I)/8]&(
20520 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29  1<<((I)&7)))!=0)
20530 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
20540 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d  Zero(M)      mem
20550 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66  set((M),0,sizeof
20560 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (M)).# define Db
20570 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
20580 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c   (M)[(I)/8]|=(1<
20590 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69  <((I)&7)).# defi
205a0 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
205b0 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  (M)   sqlite3DbM
205c0 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20  askAllZero(M).# 
205d0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
205e0 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74  Zero(M)   (sqlit
205f0 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
20600 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74  M)==0).#else.  t
20610 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
20620 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64  int yDbMask;.# d
20630 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
20640 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28  (M,I)    (((M)&(
20650 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
20660 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
20670 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
20680 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69      (M)=0.# defi
20690 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
206a0 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44  )     (M)|=(((yD
206b0 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23  bMask)1)<<(I)).#
206c0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
206d0 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d  lZero(M)   (M)==
206e0 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
206f0 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kNonZero(M)   (M
20700 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )!=0.#endif../*.
20710 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
20720 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
20730 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
20740 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
20750 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
20760 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
20770 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
20780 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
20790 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
207a0 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
207b0 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
207c0 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
207d0 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
207e0 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
207f0 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
20800 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
20810 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
20820 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
20830 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
20840 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
20850 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
20860 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
20870 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
20880 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
20890 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
208a0 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
208b0 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
208c0 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
208d0 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
208e0 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
208f0 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
20900 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
20910 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74  ed-cache.** feat
20920 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ure is enabled (
20930 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d  if sqlite3Tsd()-
20940 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69  >useSharedData i
20950 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72  s true). They ar
20960 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  e.** used to sto
20970 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61  re the set of ta
20980 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72  ble-locks requir
20990 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
209a0 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d  ent being.** com
209b0 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20  piled. Function 
209c0 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
209d0 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  () is used to ad
209e0 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65  d entries to the
209f0 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72  .** list..*/.str
20a00 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71  uct Parse {.  sq
20a10 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
20a20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64     /* The main d
20a30 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72  atabase structur
20a40 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  e */.  char *zEr
20a50 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41  rMsg;       /* A
20a60 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
20a70 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  */.  Vdbe *pVdbe
20a80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
20a90 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75  engine for execu
20aa0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79  ting database by
20ab0 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  tecode */.  int 
20ac0 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
20ad0 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
20ae0 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a  from execution *
20af0 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53  /.  u8 colNamesS
20b00 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45  et;      /* TRUE
20b10 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e   after OP_Column
20b20 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73  Name has been is
20b30 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f  sued to pVdbe */
20b40 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d  .  u8 checkSchem
20b50 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65  a;      /* Cause
20b60 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  s schema cookie 
20b70 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65  check after an e
20b80 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73  rror */.  u8 nes
20b90 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ted;           /
20ba0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
20bb0 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20  ed calls to the 
20bc0 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65  parser/code gene
20bd0 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54  rator */.  u8 nT
20be0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
20bf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d  /* Number of tem
20c00 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
20c10 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a   in aTempReg[] *
20c20 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
20c30 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
20c40 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
20c50 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20  y modify/insert 
20c60 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
20c70 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
20c80 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
20c90 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
20ca0 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
20cb0 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75  exception */.  u
20cc0 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20  8 hasCompound;  
20cd0 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69      /* Need to i
20ce0 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d  nvoke convertCom
20cf0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
20d00 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20  query() */.  u8 
20d10 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20  okConstFactor;  
20d20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f    /* OK to facto
20d30 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  r out constants 
20d40 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c  */.  u8 disableL
20d50 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d  ookaside; /* Num
20d60 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f  ber of times loo
20d70 6b 61 73 69 64 65 20 68 61 73 20 62 65 65 6e 20  kaside has been 
20d80 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38  disabled */.  u8
20d90 20 64 69 73 61 62 6c 65 56 74 61 62 3b 20 20 20   disableVtab;   
20da0 20 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 61 6c     /* Disable al
20db0 6c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  l virtual tables
20dc0 20 66 6f 72 20 74 68 69 73 20 70 61 72 73 65 20   for this parse 
20dd0 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
20de0 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
20df0 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
20e00 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
20e10 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
20e20 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
20e30 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
20e40 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
20e50 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
20e60 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
20e70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20e80 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
20e90 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
20ea0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20eb0 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
20ec0 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
20ed0 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
20ee0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
20ef0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
20f00 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
20f10 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 73  o far */.  int s
20f20 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  zOpAlloc;       
20f30 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f  /* Bytes of memo
20f40 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  ry space allocat
20f50 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
20f60 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66  ] */.  int iSelf
20f70 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  Tab;        /* T
20f80 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  able associated 
20f90 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e  with an index on
20fa0 20 65 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69   expr, or negati
20fb0 76 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ve.             
20fc0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20            ** of 
20fd0 74 68 65 20 62 61 73 65 20 72 65 67 69 73 74 65  the base registe
20fe0 72 20 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63  r during check-c
20ff0 6f 6e 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a  onstraint eval *
21000 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
21010 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
21020 2a 6e 65 67 61 74 69 76 65 2a 20 6f 66 20 74 68  *negative* of th
21030 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65  e number of labe
21040 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74  ls used */.  int
21050 20 6e 4c 61 62 65 6c 41 6c 6c 6f 63 3b 20 20 20   nLabelAlloc;   
21060 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
21070 6c 6f 74 73 20 69 6e 20 61 4c 61 62 65 6c 20 2a  lots in aLabel *
21080 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
21090 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
210a0 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
210b0 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  bels */.  ExprLi
210c0 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
210d0 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
210e0 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
210f0 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
21100 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
21110 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
21120 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
21130 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
21140 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
21150 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
21160 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
21170 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
21180 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
21190 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
211a0 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
211b0 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
211c0 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
211d0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
211e0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
211f0 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
21200 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
21210 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
21220 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
21230 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
21240 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
21250 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
21260 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
21270 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
21280 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
21290 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
212a0 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  ram */.  int nSe
212b0 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  lect;         /*
212c0 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43   Number of SELEC
212d0 54 20 73 74 6d 74 73 2e 20 43 6f 75 6e 74 65 72  T stmts. Counter
212e0 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 49   for Select.selI
212f0 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
21300 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
21310 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
21320 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
21330 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
21340 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
21350 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
21360 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
21370 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
21380 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
21390 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
213a0 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
213b0 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
213c0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
213d0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
213e0 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73  unters */.  Pars
213f0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
21400 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
21410 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
21420 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
21430 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
21440 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
21450 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
21460 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
21470 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 65  /.  Parse *pPare
21480 6e 74 50 61 72 73 65 3b 20 2f 2a 20 50 61 72 65  ntParse; /* Pare
21490 6e 74 20 70 61 72 73 65 72 20 69 66 20 74 68 69  nt parser if thi
214a0 73 20 70 61 72 73 65 72 20 69 73 20 6e 65 73 74  s parser is nest
214b0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  ed */.  int addr
214c0 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20  CrTab;       /* 
214d0 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72  Address of OP_Cr
214e0 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65  eateBtree opcode
214f0 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   on CREATE TABLE
21500 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79   */.  u32 nQuery
21510 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73  Loop;      /* Es
21520 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72  t number of iter
21530 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72  ations of a quer
21540 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a  y (10*log2(N)) *
21550 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b  /.  u32 oldmask;
21560 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
21570 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
21580 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
21590 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20    u32 newmask;  
215a0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
215b0 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
215c0 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
215d0 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20  u8 eTriggerOp;  
215e0 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54       /* TK_UPDAT
215f0 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20  E, TK_INSERT or 
21600 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75  TK_DELETE */.  u
21610 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20  8 eOrconf;      
21620 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
21630 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
21640 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74  y for trigger st
21650 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  eps */.  u8 disa
21660 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a  bleTriggers;  /*
21670 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65   True to disable
21680 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20   triggers */..  
21690 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
216a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
216d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
216e0 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75   Fields above mu
216f0 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  st be initialize
21700 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20  d to zero.  The 
21710 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c  fields that foll
21720 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f  ow,.  ** down to
21730 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
21740 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  f the recursive 
21750 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20  section, do not 
21760 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20  need to be.  ** 
21770 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74  initialized as t
21780 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20  hey will be set 
21790 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65  before being use
217a0 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  d.  The boundary
217b0 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69   is.  ** determi
217c0 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28  ned by offsetof(
217d0 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29 2e  Parse,aTempReg).
217e0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
217f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21810 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
21830 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
21840 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c  ];        /* Hol
21850 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
21860 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
21870 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
21880 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  meToken;       /
21890 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
218a0 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
218b0 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a  object name */..
218c0 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
218d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
218f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
21910 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
21920 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
21930 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
21940 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
21950 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
21960 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
21970 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
21980 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
21990 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
219a0 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
219b0 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
219c0 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20  stToken) so the 
219d0 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64  sLastToken field
219e0 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a   must be the.  *
219f0 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e  * first field in
21a00 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
21a10 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
21a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
21a60 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73  */..  Token sLas
21a70 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  tToken;       /*
21a80 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
21a90 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61  parsed */.  ynVa
21aa0 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  r nVar;         
21ab0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21ac0 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
21ad0 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
21ae0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
21af0 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
21b00 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
21b10 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
21b20 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
21b30 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
21b40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21b50 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
21b60 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
21b70 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
21b80 2f 0a 23 69 66 20 21 28 64 65 66 69 6e 65 64 28  /.#if !(defined(
21b90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
21ba0 55 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66  UALTABLE) && def
21bb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
21bc0 5f 41 4c 54 45 52 54 41 42 4c 45 29 29 0a 20 20  _ALTERTABLE)).  
21bd0 75 38 20 65 50 61 72 73 65 4d 6f 64 65 3b 20 20  u8 eParseMode;  
21be0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 41 52            /* PAR
21bf0 53 45 5f 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73  SE_MODE_XXX cons
21c00 74 61 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tant */.#endif.#
21c10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21c20 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
21c30 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
21c40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21c50 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
21c60 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
21c70 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
21c80 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
21c90 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
21ca0 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20  ion tree height 
21cb0 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73  of current sub-s
21cc0 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66  elect */.#ifndef
21cd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
21ce0 4c 41 49 4e 0a 20 20 69 6e 74 20 61 64 64 72 45  LAIN.  int addrE
21cf0 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
21d00 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 63   /* Address of c
21d10 75 72 72 65 6e 74 20 4f 50 5f 45 78 70 6c 61 69  urrent OP_Explai
21d20 6e 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  n opcode */.#end
21d30 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69  if.  VList *pVLi
21d40 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
21d50 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65  * Mapping betwee
21d60 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73  n variable names
21d70 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a   and numbers */.
21d80 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61    Vdbe *pReprepa
21d90 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56  re;         /* V
21da0 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72  M being reprepar
21db0 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65  ed (sqlite3Repre
21dc0 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e  pare()) */.  con
21dd0 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20  st char *zTail; 
21de0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51         /* All SQ
21df0 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
21e00 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
21e10 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
21e20 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
21e30 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20       /* A table 
21e40 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65  being constructe
21e50 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c  d by CREATE TABL
21e60 45 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  E */.  Index *pN
21e70 65 77 49 6e 64 65 78 3b 20 20 20 20 20 20 20 20  ewIndex;        
21e80 20 2f 2a 20 41 6e 20 69 6e 64 65 78 20 62 65 69   /* An index bei
21e90 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
21ea0 79 20 43 52 45 41 54 45 20 49 4e 44 45 58 2e 0a  y CREATE INDEX..
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
21ed0 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  lso used to hold
21ee0 20 72 65 64 75 6e 64 61 6e 74 20 55 4e 49 51 55   redundant UNIQU
21ef0 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20  E constraints.  
21f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f10 20 20 20 20 20 20 20 20 20 20 2a 2a 20 64 75 72            ** dur
21f20 69 6e 67 20 61 20 52 45 4e 41 4d 45 20 43 4f 4c  ing a RENAME COL
21f30 55 4d 4e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  UMN */.  Trigger
21f40 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
21f50 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
21f60 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
21f70 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
21f80 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
21f90 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
21fa0 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
21fb0 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
21fc0 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
21fd0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21fe0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
21ff0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
22000 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22010 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
22020 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
22030 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
22040 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
22050 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
22060 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
22070 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
22080 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
22090 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
220a0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
220b0 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
220c0 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
220d0 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
220e0 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
220f0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
22100 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
22110 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
22120 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
22130 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
22140 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
22150 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20   NULL */.  With 
22160 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20  *pWithToFree;   
22170 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69       /* Free thi
22180 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74  s WITH object at
22190 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
221a0 70 61 72 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66  parse */.#ifndef
221b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
221c0 45 52 54 41 42 4c 45 0a 20 20 52 65 6e 61 6d 65  ERTABLE.  Rename
221d0 54 6f 6b 65 6e 20 2a 70 52 65 6e 61 6d 65 3b 20  Token *pRename; 
221e0 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 73 20 73 75      /* Tokens su
221f0 62 6a 65 63 74 20 74 6f 20 72 65 6e 61 6d 69 6e  bject to renamin
22200 67 20 62 79 20 41 4c 54 45 52 20 54 41 42 4c 45  g by ALTER TABLE
22210 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23   */.#endif.};..#
22220 64 65 66 69 6e 65 20 50 41 52 53 45 5f 4d 4f 44  define PARSE_MOD
22230 45 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20  E_NORMAL        
22240 30 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  0.#define PARSE_
22250 4d 4f 44 45 5f 44 45 43 4c 41 52 45 5f 56 54 41  MODE_DECLARE_VTA
22260 42 20 20 31 0a 23 64 65 66 69 6e 65 20 50 41 52  B  1.#define PAR
22270 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43  SE_MODE_RENAME_C
22280 4f 4c 55 4d 4e 20 32 0a 23 64 65 66 69 6e 65 20  OLUMN 2.#define 
22290 50 41 52 53 45 5f 4d 4f 44 45 5f 52 45 4e 41 4d  PARSE_MODE_RENAM
222a0 45 5f 54 41 42 4c 45 20 20 33 0a 0a 2f 2a 0a 2a  E_TABLE  3../*.*
222b0 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e  * Sizes and poin
222c0 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20  ters of various 
222d0 70 61 72 74 73 20 6f 66 20 74 68 65 20 50 61 72  parts of the Par
222e0 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64  se object..*/.#d
222f0 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f  efine PARSE_HDR_
22300 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
22310 65 2c 61 54 65 6d 70 52 65 67 29 20 2f 2a 20 52  e,aTempReg) /* R
22320 65 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f  ecursive part w/
22330 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64  o aColCache*/.#d
22340 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55  efine PARSE_RECU
22350 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28  RSE_SZ offsetof(
22360 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e  Parse,sLastToken
22370 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76  )    /* Recursiv
22380 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e  e part */.#defin
22390 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20  e PARSE_TAIL_SZ 
223a0 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50  (sizeof(Parse)-P
223b0 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29  ARSE_RECURSE_SZ)
223c0 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76   /* Non-recursiv
223d0 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e  e part */.#defin
223e0 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20  e PARSE_TAIL(X) 
223f0 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41  (((char*)(X))+PA
22400 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
22410 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74   /* Pointer to t
22420 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  ail */../*.** Re
22430 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72  turn true if cur
22440 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e  rently inside an
22450 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
22460 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f  _vtab() call..*/
22470 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
22480 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22490 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
224a0 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c  CLARE_VTAB 0.#el
224b0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
224c0 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50  DECLARE_VTAB (pP
224d0 61 72 73 65 2d 3e 65 50 61 72 73 65 4d 6f 64 65  arse->eParseMode
224e0 3d 3d 50 41 52 53 45 5f 4d 4f 44 45 5f 44 45 43  ==PARSE_MODE_DEC
224f0 4c 41 52 45 5f 56 54 41 42 29 0a 23 65 6e 64 69  LARE_VTAB).#endi
22500 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
22510 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
22520 54 41 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65  TABLE).  #define
22530 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42 4a 45 43   IN_RENAME_OBJEC
22540 54 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  T 0.#else.  #def
22550 69 6e 65 20 49 4e 5f 52 45 4e 41 4d 45 5f 4f 42  ine IN_RENAME_OB
22560 4a 45 43 54 20 28 70 50 61 72 73 65 2d 3e 65 50  JECT (pParse->eP
22570 61 72 73 65 4d 6f 64 65 3e 3d 50 41 52 53 45 5f  arseMode>=PARSE_
22580 4d 4f 44 45 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55  MODE_RENAME_COLU
22590 4d 4e 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  MN).#endif..#if 
225a0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
225b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
225c0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
225d0 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
225e0 42 4c 45 29 0a 20 20 23 64 65 66 69 6e 65 20 49  BLE).  #define I
225f0 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52 53 45 20  N_SPECIAL_PARSE 
22600 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
22610 65 20 49 4e 5f 53 50 45 43 49 41 4c 5f 50 41 52  e IN_SPECIAL_PAR
22620 53 45 20 28 70 50 61 72 73 65 2d 3e 65 50 61 72  SE (pParse->ePar
22630 73 65 4d 6f 64 65 21 3d 50 41 52 53 45 5f 4d 4f  seMode!=PARSE_MO
22640 44 45 5f 4e 4f 52 4d 41 4c 29 0a 23 65 6e 64 69  DE_NORMAL).#endi
22650 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
22660 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
22670 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
22680 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
22690 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
226a0 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
226b0 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
226c0 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
226d0 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
226e0 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
226f0 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
22700 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
22710 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
22720 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
22730 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
22740 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
22750 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
22760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
22770 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
22780 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
22790 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
227a0 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
227b0 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  ious opcodes..**
227c0 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
227d0 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
227e0 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
227f0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  *    OPFLAG_LENG
22800 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  THARG    == SQLI
22810 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a  TE_FUNC_LENGTH.*
22820 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45  *    OPFLAG_TYPE
22830 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49  OFARG    == SQLI
22840 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a  TE_FUNC_TYPEOF.*
22850 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  *    OPFLAG_BULK
22860 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45  CSR      == BTRE
22870 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20  E_BULKLOAD.**   
22880 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
22890 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45       == BTREE_SE
228a0 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c  EK_EQ.**    OPFL
228b0 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
228c0 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45  == BTREE_FORDELE
228d0 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TE.**    OPFLAG_
228e0 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20  SAVEPOSITION == 
228f0 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49  BTREE_SAVEPOSITI
22900 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ON.**    OPFLAG_
22910 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20  AUXDELETE    == 
22920 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a  BTREE_AUXDELETE.
22930 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22940 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
22950 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e  0x01    /* OP_In
22960 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64  sert: Set to upd
22970 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
22980 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
22990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229a0 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20          /* Also 
229b0 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20  used in P2 (not 
229c0 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65  P5) of OP_Delete
229d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
229e0 41 47 5f 4e 4f 43 48 4e 47 20 20 20 20 20 20 20  AG_NOCHNG       
229f0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 56   0x01    /* OP_V
22a00 43 6f 6c 75 6d 6e 20 6e 6f 63 68 61 6e 67 65 20  Column nochange 
22a10 66 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  for UPDATE */.#d
22a20 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48  efine OPFLAG_EPH
22a30 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20  EM         0x01 
22a40 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a     /* OP_Column:
22a50 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75   Ephemeral outpu
22a60 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69  t is ok */.#defi
22a70 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
22a80 57 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20  WID     0x20    
22a90 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
22aa0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
22ab0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22ac0 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
22ad0 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
22ae0 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
22af0 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
22b00 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
22b10 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
22b20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
22b30 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
22b40 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
22b50 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
22b60 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
22b70 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
22b80 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
22b90 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
22ba0 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20  PFLAG_ISNOOP    
22bb0 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
22bc0 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72  P_Delete does pr
22bd0 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e  e-update-hook on
22be0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
22bf0 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
22c00 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
22c10 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
22c20 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
22c30 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
22c40 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
22c50 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
22c60 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
22c70 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
22c80 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
22c90 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
22ca0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
22cb0 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
22cc0 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
22cd0 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  ine OPFLAG_SEEKE
22ce0 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20  Q        0x02   
22cf0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75   /* OP_Open** cu
22d00 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65  rsor uses EQ see
22d10 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
22d20 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  e OPFLAG_FORDELE
22d30 54 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f  TE     0x08    /
22d40 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64  * OP_Open should
22d50 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45   use BTREE_FORDE
22d60 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
22d70 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
22d80 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
22d90 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
22da0 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
22db0 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
22dc0 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
22dd0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
22de0 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
22df0 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
22e00 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
22e10 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20  G_SAVEPOSITION  
22e20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x02    /* OP_De
22e30 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76  lete/Insert: sav
22e40 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a  e cursor pos */.
22e50 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41  #define OPFLAG_A
22e60 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  UXDELETE     0x0
22e70 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  4    /* OP_Delet
22e80 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45  e: index in a DE
22e90 4c 45 54 45 20 6f 70 20 2a 2f 0a 23 64 65 66 69  LETE op */.#defi
22ea0 6e 65 20 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47  ne OPFLAG_NOCHNG
22eb0 5f 4d 41 47 49 43 20 20 30 78 36 64 20 20 20 20  _MAGIC  0x6d    
22ec0 2f 2a 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  /* OP_MakeRecord
22ed0 3a 20 73 65 72 69 61 6c 74 79 70 65 20 31 30 20  : serialtype 10 
22ee0 69 73 20 6f 6b 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20  is ok */../*. * 
22ef0 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65  Each trigger pre
22f00 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
22f10 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
22f20 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74  tored as an inst
22f30 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63  ance of. * struc
22f40 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a  t Trigger.. *. *
22f50 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73   Pointers to ins
22f60 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
22f70 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f   Trigger are sto
22f80 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e  red in two ways.
22f90 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74  . * 1. In the "t
22fa0 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61  rigHash" hash ta
22fb0 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65  ble (part of the
22fc0 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72   sqlite3* that r
22fd0 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a  epresents the. *
22fe0 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
22ff0 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
23000 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
23010 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
23020 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
23030 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
23040 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
23050 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
23060 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
23070 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
23080 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
23090 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
230a0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
230b0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
230c0 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
230d0 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
230e0 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
230f0 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
23100 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
23110 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
23120 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
23130 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
23140 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
23150 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
23160 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
23170 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
23180 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
23190 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
231a0 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
231b0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
231c0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
231d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
231e0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
231f0 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
23200 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
23210 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
23220 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
23230 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
23240 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
23250 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
23260 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
23270 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
23280 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
23290 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
232a0 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
232b0 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
232c0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
232d0 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
232e0 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
232f0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
23300 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23310 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
23320 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
23330 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
23340 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c  /.  IdList *pCol
23350 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49  umns;       /* I
23360 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44  f this is an UPD
23370 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c  ATE OF <column-l
23380 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20  ist> trigger,.  
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233a0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c             the <
233b0 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20  column-list> is 
233c0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
233d0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
233e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65  ;        /* Sche
233f0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
23400 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53  e trigger */.  S
23410 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d  chema *pTabSchem
23420 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
23430 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
23440 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67  table */.  Trigg
23450 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73  erStep *step_lis
23460 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20  t; /* Link list 
23470 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  of trigger progr
23480 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20  am steps        
23490 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65       */.  Trigge
234a0 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  r *pNext;       
234b0 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65    /* Next trigge
234c0 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
234d0 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  h the table */.}
234e0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67  ;../*.** A trigg
234f0 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42  er is either a B
23500 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45  EFORE or an AFTE
23510 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20  R trigger.  The 
23520 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
23530 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65  nts.** determine
23540 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66   which..**.** If
23550 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69   there are multi
23560 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f  ple triggers, yo
23570 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20  u might of some 
23580 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20  BEFORE and some 
23590 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61  AFTER..** In tha
235a0 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e  t cases, the con
235b0 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e  stants below can
235c0 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65   be ORed togethe
235d0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52  r..*/.#define TR
235e0 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a  IGGER_BEFORE  1.
235f0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
23600 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a  AFTER   2../*. *
23610 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
23620 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
23630 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ep is used to st
23640 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c  ore a single SQL
23650 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68   statement. * th
23660 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  at is a part of 
23670 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
23680 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  m.. *. * Instanc
23690 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
236a0 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
236b0 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
236c0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
236d0 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
236e0 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
236f0 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
23700 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
23710 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20  ember of the. * 
23720 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
23730 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
23740 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
23750 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
23760 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
23770 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
23780 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
23790 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  gram.. *. * The 
237a0 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69  "op" member indi
237b0 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68  cates whether th
237c0 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22  is is a "DELETE"
237d0 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44  , "INSERT", "UPD
237e0 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45  ATE" or. * "SELE
237f0 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  CT" statement. T
23800 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74  he meanings of t
23810 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73  he other members
23820 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
23830 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f  y the. * value o
23840 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77  f "op" as follow
23850 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  s:. *. * (op == 
23860 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72  TK_INSERT). * or
23870 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65  conf    -> store
23880 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  s the ON CONFLIC
23890 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70  T algorithm. * p
238a0 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74  Select   -> If t
238b0 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
238c0 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54   INTO ... SELECT
238d0 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
238e0 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
238f0 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
23900 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
23910 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
23920 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  nt. Otherwise NU
23930 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  LL.. * zTarget  
23940 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
23950 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
23960 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20  o insert into.. 
23970 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49  * pExprList -> I
23980 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
23990 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c  ERT INTO ... VAL
239a0 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  UES ... statemen
239b0 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
239c0 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
239d0 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65  res values to be
239e0 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72   inserted. Other
239f0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49  wise NULL.. * pI
23a00 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68  dList   -> If th
23a10 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
23a20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d  INTO ... (<colum
23a30 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53  n-names>) VALUES
23a40 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20   .... *         
23a50 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20       statement, 
23a60 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73  then this stores
23a70 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65   the column-name
23a80 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20  s to be. *      
23a90 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64          inserted
23aa0 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70   into.. *. * (op
23ab0 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20   == TK_DELETE). 
23ac0 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
23ad0 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
23ae0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
23af0 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
23b00 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
23b10 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
23b20 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
23b30 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
23b40 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
23b50 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
23b60 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f  e NULL.. *. * (o
23b70 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
23b80 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
23b90 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
23ba0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70   the table to up
23bb0 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20  date.. * pWhere 
23bc0 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
23bd0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50  clause of the UP
23be0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
23bf0 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
23c00 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
23c10 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
23c20 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  LL.. * pExprList
23c30 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68   -> A list of th
23c40 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64  e columns to upd
23c50 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72  ate and the expr
23c60 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74  essions to updat
23c70 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
23c80 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73    them to. See s
23c90 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64  qlite3Update() d
23ca0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ocumentation of 
23cb0 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20  "pChanges". *   
23cc0 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d             argum
23cd0 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75  ent.. *. */.stru
23ce0 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b  ct TriggerStep {
23cf0 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
23d00 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
23d10 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
23d20 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
23d30 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a  T, TK_SELECT */.
23d40 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20    u8 orconf;    
23d50 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c         /* OE_Rol
23d60 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20  lback etc. */.  
23d70 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20  Trigger *pTrig; 
23d80 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67       /* The trig
23d90 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74  ger that this st
23da0 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  ep is a part of 
23db0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
23dc0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c  lect;     /* SEL
23dd0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72  ECT statement or
23de0 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49   RHS of INSERT I
23df0 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a  NTO SELECT ... *
23e00 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65  /.  char *zTarge
23e10 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67  t;       /* Targ
23e20 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c  et table for DEL
23e30 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53  ETE, UPDATE, INS
23e40 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ERT */.  Expr *p
23e50 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a  Where;        /*
23e60 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
23e70 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20  e for DELETE or 
23e80 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a  UPDATE steps */.
23e90 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70    ExprList *pExp
23ea0 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c  rList; /* SET cl
23eb0 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 20  ause for UPDATE 
23ec0 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
23ed0 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
23ee0 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
23ef0 53 45 52 54 20 2a 2f 0a 20 20 55 70 73 65 72 74  SERT */.  Upsert
23f00 20 2a 70 55 70 73 65 72 74 3b 20 20 20 20 20 2f   *pUpsert;     /
23f10 2a 20 55 70 73 65 72 74 20 63 6c 61 75 73 65 73  * Upsert clauses
23f20 20 6f 6e 20 61 6e 20 49 4e 53 45 52 54 20 2a 2f   on an INSERT */
23f30 0a 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20  .  char *zSpan; 
23f40 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
23f50 6e 61 6c 20 53 51 4c 20 74 65 78 74 20 6f 66 20  nal SQL text of 
23f60 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
23f70 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
23f80 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69  Next;  /* Next i
23f90 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20  n the link-list 
23fa0 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
23fb0 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73   *pLast;  /* Las
23fc0 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e  t element in lin
23fd0 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f  k-list. Valid fo
23fe0 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20  r 1st elem only 
23ff0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
24000 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
24010 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
24020 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62  formation used b
24030 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e  y the sqliteFix.
24040 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61  ...** routines a
24050 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20  s they walk the 
24060 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61  parse tree to ma
24070 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65  ke database refe
24080 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63  rences.** explic
24090 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  it..*/.typedef s
240a0 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
240b0 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
240c0 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
240d0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
240e0 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
240f0 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
24100 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
24110 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
24120 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
24130 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
24140 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
24150 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20   bVarOnly;      
24160 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61   /* Check for va
24170 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
24180 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73  s only */.  cons
24190 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
241a0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
241b0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
241c0 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
241d0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
241e0 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
241f0 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
24200 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
24210 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
24220 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
24230 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
24240 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
24250 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
24260 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
24270 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
24280 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
24290 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
242a0 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
242b0 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
242c0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
242d0 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
242e0 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
242f0 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
24300 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 73 74  truct sqlite3_st
24310 72 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  r {.  sqlite3 *d
24320 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70  b;         /* Op
24330 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20  tional database 
24340 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20  for lookaside.  
24350 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20  Can be NULL */. 
24360 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
24370 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
24380 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
24390 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e   far */.  u32  n
243a0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
243b0 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
243c0 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
243d0 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d  Text */.  u32  m
243e0 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
243f0 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
24400 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30  d allocation.  0
24410 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75   for no malloc u
24420 73 61 67 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e  sage */.  u32  n
24430 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
24440 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
24450 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
24460 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
24470 3b 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54  ;       /* SQLIT
24480 45 5f 4e 4f 4d 45 4d 20 6f 72 20 53 51 4c 49 54  E_NOMEM or SQLIT
24490 45 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38  E_TOOBIG */.  u8
244a0 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20     printfFlags; 
244b0 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49     /* SQLITE_PRI
244c0 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20  NTF flags below 
244d0 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 51  */.};.#define SQ
244e0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45  LITE_PRINTF_INTE
244f0 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e  RNAL 0x01  /* In
24500 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20  ternal-use-only 
24510 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77  converters allow
24520 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
24530 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46  LITE_PRINTF_SQLF
24540 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51  UNC  0x02  /* SQ
24550 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  L function argum
24560 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66  ents to VXPrintf
24570 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
24580 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
24590 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65  ED 0x04  /* True
245a0 20 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c   if xText is all
245b0 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a  ocated space */.
245c0 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f  .#define isMallo
245d0 63 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70  ced(X)  (((X)->p
245e0 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c  rintfFlags & SQL
245f0 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f  ITE_PRINTF_MALLO
24600 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a  CED)!=0).../*.**
24610 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
24620 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
24630 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
24640 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
24650 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
24660 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
24670 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
24680 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
24690 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
246a0 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
246b0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
246c0 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
246d0 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
246e0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
246f0 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
24700 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
24710 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
24720 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
24730 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
24740 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
24750 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
24760 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
24770 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
24780 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
24790 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75  ored here */.  u
247a0 33 32 20 6d 49 6e 69 74 46 6c 61 67 73 3b 20 20  32 mInitFlags;  
247b0 20 20 20 2f 2a 20 46 6c 61 67 73 20 63 6f 6e 74     /* Flags cont
247c0 72 6f 6c 6c 69 6e 67 20 65 72 72 6f 72 20 6d 65  rolling error me
247d0 73 73 61 67 65 73 20 2a 2f 0a 20 20 75 33 32 20  ssages */.  u32 
247e0 6e 49 6e 69 74 52 6f 77 3b 20 20 20 20 20 20 20  nInitRow;       
247f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 6f 77  /* Number of row
24800 73 20 70 72 6f 63 65 73 73 65 64 20 2a 2f 0a 7d  s processed */.}
24810 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
24820 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
24830 20 66 6f 72 20 6d 49 6e 69 74 46 6c 61 67 73 0a   for mInitFlags.
24840 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 49 54 46  */.#define INITF
24850 4c 41 47 5f 41 6c 74 65 72 54 61 62 6c 65 20 20  LAG_AlterTable  
24860 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 69 73   0x0001  /* This
24870 20 69 73 20 61 20 72 65 70 61 72 73 65 20 61 66   is a reparse af
24880 74 65 72 20 41 4c 54 45 52 20 54 41 42 4c 45 20  ter ALTER TABLE 
24890 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  */../*.** Struct
248a0 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
248b0 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
248c0 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
248d0 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
248e0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
248f0 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
24900 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
24910 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
24920 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
24930 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
24940 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
24950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24960 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
24970 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
24980 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
24990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249a0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
249b0 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
249c0 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
249d0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
249e0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
249f0 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
24a00 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
24a10 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24a30 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
24a40 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
24a50 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
24a60 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
24a70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24a80 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
24a90 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
24aa0 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d  ans */.  int bSm
24ab0 61 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  allMalloc;      
24ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76             /* Av
24ad0 6f 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79  oid large memory
24ae0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20   allocations if 
24af0 74 72 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  true */.  int mx
24b00 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  Strlen;         
24b10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
24b20 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65  aximum string le
24b30 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  ngth */.  int ne
24b40 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20  verCorrupt;     
24b50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
24b60 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79  atabase is alway
24b70 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f  s well-formed */
24b80 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69  .  int szLookasi
24b90 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
24ba0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
24bb0 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
24bc0 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   size */.  int n
24bd0 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
24be0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24bf0 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
24c00 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a  e buffer count *
24c10 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69  /.  int nStmtSpi
24c20 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ll;             
24c30 20 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f        /* Stmt-jo
24c40 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64  urnal spill-to-d
24c50 69 73 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f  isk threshold */
24c60 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  .  sqlite3_mem_m
24c70 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20  ethods m;       
24c80 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
24c90 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  l memory allocat
24ca0 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  ion interface */
24cb0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
24cc0 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20  _methods mutex; 
24cd0 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
24ce0 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63  l mutex interfac
24cf0 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70  e */.  sqlite3_p
24d00 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70  cache_methods2 p
24d10 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d  cache2;  /* Low-
24d20 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65  level page-cache
24d30 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
24d40 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20  void *pHeap;    
24d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d60 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67    /* Heap storag
24d70 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  e space */.  int
24d80 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20   nHeap;         
24d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24da0 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b  * Size of pHeap[
24db0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71  ] */.  int mnReq
24dc0 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20  , mxReq;        
24dd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
24de0 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71  and max heap req
24df0 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20  uests sizes */. 
24e00 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
24e10 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
24e20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61     /* mmap() spa
24e30 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65  ce per open file
24e40 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
24e50 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20  t64 mxMmap;     
24e60 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
24e70 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d  um value for szM
24e80 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  map */.  void *p
24e90 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
24ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
24eb0 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
24ec0 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
24ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ee0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
24ef0 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
24f00 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
24f10 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
24f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24f30 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
24f40 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
24f50 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
24f60 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
24f70 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
24f80 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
24f90 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
24fa0 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
24fb0 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
24fc0 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
24fd0 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
24fe0 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50  led */.  u32 szP
24ff0 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ma;             
25000 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
25010 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41  ximum Sorter PMA
25020 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68   size */.  /* Th
25030 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65  e above might be
25040 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
25050 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66  non-zero.  The f
25060 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f  ollowing need to
25070 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69   always.  ** ini
25080 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20  tially be zero, 
25090 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e  however. */.  in
250a0 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20  t isInit;       
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250c0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e  /* True after in
250d0 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73  itialization has
250e0 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69   finished */.  i
250f0 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20  nt inProgress;  
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25110 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69   /* True while i
25120 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
25130 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69   progress */.  i
25140 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20  nt isMutexInit; 
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25160 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
25170 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69  utexes are initi
25180 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
25190 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20  isMallocInit;   
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
251b0 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
251c0 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
251d0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61  d */.  int isPCa
251e0 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20  cheInit;        
251f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
25200 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
25210 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
25220 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75    int nRefInitMu
25230 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
25240 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
25250 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d   users of pInitM
25260 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65  utex */.  sqlite
25270 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75  3_mutex *pInitMu
25280 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  tex;        /* M
25290 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c  utex used by sql
252a0 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
252b0 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c  ) */.  void (*xL
252c0 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  og)(void*,int,co
252d0 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46  nst char*); /* F
252e0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67  unction for logg
252f0 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ing */.  void *p
25300 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20  LogArg;         
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25320 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
25330 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66  to xLog() */.#if
25340 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25350 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28  E_SQLLOG.  void(
25360 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c  *xSqllog)(void*,
25370 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
25380 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  har*, int);.  vo
25390 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a  id *pSqllogArg;.
253a0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
253b0 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41  LITE_VDBE_COVERA
253c0 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  GE.  /* The foll
253d0 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28  owing callback (
253e0 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20  if not NULL) is 
253f0 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79  invoked on every
25400 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a   VDBE branch.  *
25410 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65  * operation.  Se
25420 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75  t the callback u
25430 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
25440 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41  CTRL_VDBE_COVERA
25450 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20  GE..  */.  void 
25460 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76  (*xVdbeBranch)(v
25470 6f 69 64 2a 2c 75 6e 73 69 67 6e 65 64 20 69 53  oid*,unsigned iS
25480 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c  rcLine,u8 eThis,
25490 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c  u8 eMx);  /* Cal
254a0 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
254b0 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b  *pVdbeBranchArg;
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254e0 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
254f0 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ment */.#endif.#
25500 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
25510 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a  BLE_DESERIALIZE.
25520 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
25530 6d 78 4d 65 6d 64 62 53 69 7a 65 3b 20 20 20 20  mxMemdbSize;    
25540 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d      /* Default m
25550 61 78 20 6d 65 6d 64 62 20 73 69 7a 65 20 2a 2f  ax memdb size */
25560 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
25570 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
25580 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43  E.  int (*xTestC
25590 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20  allback)(int);  
255a0 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64        /* Invoked
255b0 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74   by sqlite3Fault
255c0 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  Sim() */.#endif.
255d0 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65    int bLocaltime
255e0 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20  Fault;          
255f0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66      /* True to f
25600 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20  ail localtime() 
25610 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 62  calls */.  int b
25620 49 6e 74 65 72 6e 61 6c 46 75 6e 63 74 69 6f 6e  InternalFunction
25630 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
25640 49 6e 74 65 72 6e 61 6c 20 53 51 4c 20 66 75 6e  Internal SQL fun
25650 63 74 69 6f 6e 73 20 61 72 65 20 76 69 73 69 62  ctions are visib
25660 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63  le */.  int iOnc
25670 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b  eResetThreshold;
25680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
25690 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e  n to reset OP_On
256a0 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  ce counters */. 
256b0 20 75 33 32 20 73 7a 53 6f 72 74 65 72 52 65 66   u32 szSorterRef
256c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
256d0 20 20 20 2f 2a 20 4d 69 6e 20 73 69 7a 65 20 69     /* Min size i
256e0 6e 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 73  n bytes to use s
256f0 6f 72 74 65 72 2d 72 65 66 73 20 2a 2f 0a 7d 3b  orter-refs */.};
25700 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
25710 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
25720 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74  e of assert() st
25730 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69  atements to indi
25740 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65  cate that.** the
25750 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20   assert is only 
25760 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d  valid on a well-
25770 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e  formed database.
25780 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a    Instead of:.**
25790 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
257a0 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77  X );.**.** One w
257b0 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rites:.**.**    
257c0 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f   assert( X || CO
257d0 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a  RRUPT_DB );.**.*
257e0 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  * CORRUPT_DB is 
257f0 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d  true during norm
25800 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43  al operation.  C
25810 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e  ORRUPT_DB does n
25820 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74  ot indicate.** t
25830 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65  hat the database
25840 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63   is definitely c
25850 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61  orrupt, only tha
25860 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f  t it might be co
25870 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f  rrupt..** For mo
25880 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43  st test cases, C
25890 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74  ORRUPT_DB is set
258a0 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20   to false using 
258b0 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c  a special.** sql
258c0 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
258d0 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c  l().  This enabl
258e0 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74  es assert() stat
258f0 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a  ements to prove.
25900 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61  ** things that a
25910 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66  re always true f
25920 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64  or well-formed d
25930 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65  atabases..*/.#de
25940 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20  fine CORRUPT_DB 
25950 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e   (sqlite3Config.
25960 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29  neverCorrupt==0)
25970 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
25980 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
25990 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
259a0 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
259b0 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
259c0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
259d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
259f0 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f  ser context.  */
25a00 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
25a10 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
25a20 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
25a30 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
25a40 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
25a50 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
25a60 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
25a70 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
25a80 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
25a90 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c  */.  void (*xSel
25aa0 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61  ectCallback2)(Wa
25ab0 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f  lker*,Select*);/
25ac0 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63  * Second callbac
25ad0 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
25ae0 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70  .  int walkerDep
25af0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25b10 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65  Number of subque
25b20 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f  ries */.  u8 eCo
25b30 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
25b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b50 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70      /* A small p
25b60 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a  rocessing code *
25b70 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
25b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25ba0 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
25bb0 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
25bc0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
25bd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25be0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
25bf0 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
25c00 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20     int n;       
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25c30 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20  A counter */.   
25c40 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20   int iCur;      
25c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
25c70 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
25c80 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
25c90 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25cb0 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
25cc0 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
25cd0 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
25ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25cf0 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
25d00 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
25d10 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48      struct CCurH
25d20 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20  int *pCCurHint; 
25d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25d40 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72   Used by codeCur
25d50 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20  sorHint() */.   
25d60 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20   int *aiCol;    
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72             /* ar
25d90 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ray of column in
25da0 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  dexes */.    str
25db0 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49  uct IdxCover *pI
25dc0 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20  dxCover;        
25dd0 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
25de0 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61  for index covera
25df0 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ge */.    struct
25e00 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70   IdxExprTrans *p
25e10 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20  IdxTrans;       
25e20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69      /* Convert i
25e30 64 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c  dxed expr to col
25e40 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  umn */.    ExprL
25e50 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
25e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e70 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59       /* GROUP BY
25e80 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 53   clause */.    S
25e90 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
25ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25eb0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 41 56 49           /* HAVI
25ec0 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75  NG to WHERE clau
25ed0 73 65 20 63 74 78 20 2a 2f 0a 20 20 20 20 73 74  se ctx */.    st
25ee0 72 75 63 74 20 57 69 6e 64 6f 77 52 65 77 72 69  ruct WindowRewri
25ef0 74 65 20 2a 70 52 65 77 72 69 74 65 3b 20 20 20  te *pRewrite;   
25f00 20 20 20 20 20 20 20 20 2f 2a 20 57 69 6e 64 6f          /* Windo
25f10 77 20 72 65 77 72 69 74 65 20 63 6f 6e 74 65 78  w rewrite contex
25f20 74 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  t */.    struct 
25f30 57 68 65 72 65 43 6f 6e 73 74 20 2a 70 43 6f 6e  WhereConst *pCon
25f40 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
25f50 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
25f60 73 65 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  se constants */.
25f70 20 20 20 20 73 74 72 75 63 74 20 52 65 6e 61 6d      struct Renam
25f80 65 43 74 78 20 2a 70 52 65 6e 61 6d 65 3b 20 20  eCtx *pRename;  
25f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25fa0 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 63   RENAME COLUMN c
25fb0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 7d 20 75 3b  ontext */.  } u;
25fc0 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
25fd0 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
25fe0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
25ff0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
26000 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
26010 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
26020 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
26030 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
26040 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
26050 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
26060 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
26070 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
26080 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
26090 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
260a0 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
260b0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
260c0 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  ExprWalkNoop(Wal
260d0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
260e0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
260f0 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
26100 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
26110 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b  qlite3SelectWalk
26120 46 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Fail(Walker*, Se
26130 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53  lect*);.#ifdef S
26140 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64  QLITE_DEBUG.void
26150 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
26160 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72  lkAssert2(Walker
26170 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e  *, Select*);.#en
26180 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
26190 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
261a0 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
261b0 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
261c0 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
261d0 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
261e0 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
261f0 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
26200 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
26210 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
26220 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
26230 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
26240 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
26250 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
26260 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
26270 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
26280 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
26290 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
262a0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
262b0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
262c0 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
262d0 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
262e0 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
262f0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
26300 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
26310 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
26320 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
26330 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
26340 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
26350 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
26360 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
26370 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
26380 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
263b0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
263c0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
263d0 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
263e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
263f0 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
26400 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
26410 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
26420 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
26430 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
26440 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
26450 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
26460 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
26470 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
26480 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
26490 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
264a0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
264b0 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
264c0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
264d0 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
264e0 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
264f0 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20  char *zCteErr;  
26500 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
26510 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
26520 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
26530 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
26540 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
26550 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
26560 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
26570 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
26580 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
26590 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
265a0 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
265b0 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
265c0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
265d0 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
265e0 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
265f0 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
26600 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
26610 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
26620 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
26630 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
26640 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
26650 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
26660 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
26670 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
26680 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
26690 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
266a0 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
266b0 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   This object is 
266c0 75 73 65 64 20 69 6e 20 76 61 72 69 6f 75 73 20  used in various 
266d0 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61 74 65  ways, all relate
266e0 64 20 74 6f 20 77 69 6e 64 6f 77 20 66 75 6e 63  d to window func
266f0 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28 31  tions.**.**   (1
26700 29 20 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61  ) A single insta
26710 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
26720 63 74 75 72 65 20 69 73 20 61 74 74 61 63 68 65  cture is attache
26730 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20  d to the.**     
26740 20 20 74 68 65 20 45 78 70 72 2e 70 57 69 6e 20    the Expr.pWin 
26750 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77  field for each w
26760 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69  indow function i
26770 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  n an expression 
26780 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54  tree..**       T
26790 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
267a0 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   the information
267b0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
267c0 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a  e OVER clause,.*
267d0 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61 64 64  *       plus add
267e0 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75  itional fields u
267f0 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20  sed during code 
26800 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  generation..**.*
26810 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64  *   (2) All wind
26820 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  ow functions in 
26830 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
26840 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  form a linked-li
26850 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61  st.**       atta
26860 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70  ched to Select.p
26870 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77  Win.  The Window
26880 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f  .pFunc and Windo
26890 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20  w.pExpr.**      
268a0 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61   fields point ba
268b0 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65 73  ck to the expres
268c0 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  sion that is the
268d0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
268e0 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68  ..**.**   (3) Th
268f0 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57  e terms of the W
26900 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20  INDOW clause of 
26910 61 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73  a SELECT are ins
26920 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a  tances of this.*
26930 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f  *       object o
26940 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
26950 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65  attached to Sele
26960 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a  ct.pWinDefn..**.
26970 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31 29 20  ** The uses (1) 
26980 61 6e 64 20 28 32 29 20 61 72 65 20 72 65 61 6c  and (2) are real
26990 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64  ly the same Wind
269a0 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a  ow object that j
269b0 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74  ust happens.** t
269c0 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c 65 20  o be accessible 
269d0 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74  in two different
269e0 20 77 61 79 73 2e 20 20 55 73 65 20 63 61 73 65   ways.  Use case
269f0 20 28 33 29 20 61 72 65 20 73 65 70 61 72 61 74   (3) are separat
26a00 65 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  e objects..*/.st
26a10 72 75 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20  ruct Window {.  
26a20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
26a30 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
26a40 6f 66 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62  of window (may b
26a50 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 63 68 61  e NULL) */.  cha
26a60 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20  r *zBase;       
26a70 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
26a80 62 61 73 65 20 77 69 6e 64 6f 77 20 66 6f 72 20  base window for 
26a90 63 68 61 69 6e 69 6e 67 20 28 6d 61 79 20 62 65  chaining (may be
26aa0 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72   NULL) */.  Expr
26ab0 4c 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e  List *pPartition
26ac0 3b 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e  ;   /* PARTITION
26ad0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
26ae0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
26af0 42 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52  By;     /* ORDER
26b00 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
26b10 75 38 20 65 46 72 6d 54 79 70 65 3b 20 20 20 20  u8 eFrmType;    
26b20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41          /* TK_RA
26b30 4e 47 45 2c 20 54 4b 5f 47 52 4f 55 50 53 2c 20  NGE, TK_GROUPS, 
26b40 54 4b 5f 52 4f 57 53 2c 20 6f 72 20 30 20 2a 2f  TK_ROWS, or 0 */
26b50 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20 20 20  .  u8 eStart;   
26b60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e             /* UN
26b70 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54  BOUNDED, CURRENT
26b80 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46  , PRECEDING or F
26b90 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38  OLLOWING */.  u8
26ba0 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20   eEnd;          
26bb0 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44        /* UNBOUND
26bc0 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45  ED, CURRENT, PRE
26bd0 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57  CEDING or FOLLOW
26be0 49 4e 47 20 2a 2f 0a 20 20 75 38 20 62 49 6d 70  ING */.  u8 bImp
26bf0 6c 69 63 69 74 46 72 61 6d 65 3b 20 20 20 20 20  licitFrame;     
26c00 20 2f 2a 20 54 72 75 65 20 69 66 20 66 72 61 6d   /* True if fram
26c10 65 20 77 61 73 20 69 6d 70 6c 69 63 69 74 6c 79  e was implicitly
26c20 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 20 20   specified */.  
26c30 75 38 20 65 45 78 63 6c 75 64 65 3b 20 20 20 20  u8 eExclude;    
26c40 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 4e 4f          /* TK_NO
26c50 2c 20 54 4b 5f 43 55 52 52 45 4e 54 2c 20 54 4b  , TK_CURRENT, TK
26c60 5f 54 49 45 53 2c 20 54 4b 5f 47 52 4f 55 50 2c  _TIES, TK_GROUP,
26c70 20 6f 72 20 30 20 2a 2f 0a 20 20 45 78 70 72 20   or 0 */.  Expr 
26c80 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
26c90 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
26ca0 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45   for "<expr> PRE
26cb0 43 45 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70  CEDING" */.  Exp
26cc0 72 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  r *pEnd;        
26cd0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
26ce0 6f 6e 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46  on for "<expr> F
26cf0 4f 4c 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57  OLLOWING" */.  W
26d00 69 6e 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b  indow *pNextWin;
26d10 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77         /* Next w
26d20 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62  indow function b
26d30 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69 73  elonging to this
26d40 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70   SELECT */.  Exp
26d50 72 20 2a 70 46 69 6c 74 65 72 3b 20 20 20 20 20  r *pFilter;     
26d60 20 20 20 20 20 2f 2a 20 54 68 65 20 46 49 4c 54       /* The FILT
26d70 45 52 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  ER expression */
26d80 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e  .  FuncDef *pFun
26d90 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
26da0 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
26db0 69 6e 74 20 69 45 70 68 43 73 72 3b 20 20 20 20  int iEphCsr;    
26dc0 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74 69          /* Parti
26dd0 74 69 6f 6e 20 62 75 66 66 65 72 20 6f 72 20 50  tion buffer or P
26de0 65 65 72 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  eer buffer */.  
26df0 69 6e 74 20 72 65 67 41 63 63 75 6d 3b 0a 20 20  int regAccum;.  
26e00 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 0a 20  int regResult;. 
26e10 20 69 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20   int csrApp;    
26e20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63           /* Func
26e30 74 69 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65  tion cursor (use
26e40 64 20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f  d by min/max) */
26e50 0a 20 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20  .  int regApp;  
26e60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
26e70 6e 63 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20  nction register 
26e80 28 61 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69  (also used by mi
26e90 6e 2f 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20  n/max) */.  int 
26ea0 72 65 67 50 61 72 74 3b 20 20 20 20 20 20 20 20  regPart;        
26eb0 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
26ec0 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 50 41  registers for PA
26ed0 52 54 49 54 49 4f 4e 20 42 59 20 76 61 6c 75 65  RTITION BY value
26ee0 73 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 77  s */.  Expr *pOw
26ef0 6e 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ner;           /
26f00 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 6f 62 6a  * Expression obj
26f10 65 63 74 20 74 68 69 73 20 77 69 6e 64 6f 77 20  ect this window 
26f20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 2a  is attached to *
26f30 2f 0a 20 20 69 6e 74 20 6e 42 75 66 66 65 72 43  /.  int nBufferC
26f40 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
26f50 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
26f60 20 69 6e 20 62 75 66 66 65 72 20 74 61 62 6c 65   in buffer table
26f70 20 2a 2f 0a 20 20 69 6e 74 20 69 41 72 67 43 6f   */.  int iArgCo
26f80 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  l;            /*
26f90 20 4f 66 66 73 65 74 20 6f 66 20 66 69 72 73 74   Offset of first
26fa0 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 74 68   argument for th
26fb0 69 73 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  is function */. 
26fc0 20 69 6e 74 20 72 65 67 4f 6e 65 3b 20 20 20 20   int regOne;    
26fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
26fe0 73 74 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ster containing 
26ff0 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65 20 31  constant value 1
27000 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 53 74 61   */.  int regSta
27010 72 74 52 6f 77 69 64 3b 0a 20 20 69 6e 74 20 72  rtRowid;.  int r
27020 65 67 45 6e 64 52 6f 77 69 64 3b 0a 7d 3b 0a 0a  egEndRowid;.};..
27030 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
27040 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 76  MIT_WINDOWFUNC.v
27050 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f  oid sqlite3Windo
27060 77 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  wDelete(sqlite3*
27070 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64  , Window*);.void
27080 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 4c 69   sqlite3WindowLi
27090 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
270a0 20 2a 64 62 2c 20 57 69 6e 64 6f 77 20 2a 70 29   *db, Window *p)
270b0 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65  ;.Window *sqlite
270c0 33 57 69 6e 64 6f 77 41 6c 6c 6f 63 28 50 61 72  3WindowAlloc(Par
270d0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 45  se*, int, int, E
270e0 78 70 72 2a 2c 20 69 6e 74 20 2c 20 45 78 70 72  xpr*, int , Expr
270f0 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
27100 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68  ite3WindowAttach
27110 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
27120 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74 20 73 71  Window*);.int sq
27130 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 6d 70 61  lite3WindowCompa
27140 72 65 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f  re(Parse*, Windo
27150 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  w*, Window*);.vo
27160 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
27170 43 6f 64 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  CodeInit(Parse*,
27180 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f 69 64 20   Window*);.void 
27190 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f 64  sqlite3WindowCod
271a0 65 53 74 65 70 28 50 61 72 73 65 2a 2c 20 53 65  eStep(Parse*, Se
271b0 6c 65 63 74 2a 2c 20 57 68 65 72 65 49 6e 66 6f  lect*, WhereInfo
271c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
271d0 74 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 52  t sqlite3WindowR
271e0 65 77 72 69 74 65 28 50 61 72 73 65 2a 2c 20 53  ewrite(Parse*, S
271f0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
27200 69 74 65 33 45 78 70 61 6e 64 53 75 62 71 75 65  ite3ExpandSubque
27210 72 79 28 50 61 72 73 65 2a 2c 20 73 74 72 75 63  ry(Parse*, struc
27220 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 2a 29  t SrcList_item*)
27230 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69  ;.void sqlite3Wi
27240 6e 64 6f 77 55 70 64 61 74 65 28 50 61 72 73 65  ndowUpdate(Parse
27250 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57 69 6e 64  *, Window*, Wind
27260 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  ow*, FuncDef*);.
27270 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
27280 69 6e 64 6f 77 44 75 70 28 73 71 6c 69 74 65 33  indowDup(sqlite3
27290 20 2a 64 62 2c 20 45 78 70 72 20 2a 70 4f 77 6e   *db, Expr *pOwn
272a0 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70 29 3b 0a  er, Window *p);.
272b0 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74 65 33 57  Window *sqlite3W
272c0 69 6e 64 6f 77 4c 69 73 74 44 75 70 28 73 71 6c  indowListDup(sql
272d0 69 74 65 33 20 2a 64 62 2c 20 57 69 6e 64 6f 77  ite3 *db, Window
272e0 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   *p);.void sqlit
272f0 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e  e3WindowFunction
27300 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
27310 6c 69 74 65 33 57 69 6e 64 6f 77 43 68 61 69 6e  lite3WindowChain
27320 28 50 61 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a  (Parse*, Window*
27330 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 57 69 6e 64  , Window*);.Wind
27340 6f 77 20 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f  ow *sqlite3Windo
27350 77 41 73 73 65 6d 62 6c 65 28 50 61 72 73 65 2a  wAssemble(Parse*
27360 2c 20 57 69 6e 64 6f 77 2a 2c 20 45 78 70 72 4c  , Window*, ExprL
27370 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
27380 20 54 6f 6b 65 6e 2a 29 3b 0a 23 65 6c 73 65 0a   Token*);.#else.
27390 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
273a0 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61 2c 62  WindowDelete(a,b
273b0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
273c0 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69 6f 6e  e3WindowFunction
273d0 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  s().# define sql
273e0 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61 63 68  ite3WindowAttach
273f0 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66 0a 0a  (a,b,c).#endif..
27400 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
27410 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
27420 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
27430 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
27440 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
27450 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
27460 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
27470 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
27480 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
27490 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
274a0 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
274b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274c0 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
274d0 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
274e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274f0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
27500 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
27510 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
27520 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
27530 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
27540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
27570 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
27580 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
27590 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
275a0 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
275b0 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
275c0 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
275d0 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
275e0 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
275f0 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
27600 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
27610 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
27620 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
27630 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
27640 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
27650 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
27660 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
27670 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
27680 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
27690 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
276a0 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
276b0 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f 72 74  nt sqlite3Report
276c0 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72 2c 20  Error(int iErr, 
276d0 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73  int lineno, cons
276e0 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29 3b 0a  t char *zType);.
276f0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
27700 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
27710 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
27720 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
27730 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
27740 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
27750 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
27760 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
27770 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
27780 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
27790 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
277a0 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
277b0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
277c0 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
277d0 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
277e0 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
277f0 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53  LINE__).#ifdef S
27800 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e  QLITE_DEBUG.  in
27810 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  t sqlite3NomemEr
27820 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
27830 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
27840 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69  mError(int);.  i
27850 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
27860 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50  tPgnoError(int,P
27870 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53  gno);.# define S
27880 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
27890 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
278a0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64  or(__LINE__).# d
278b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45  efine SQLITE_IOE
278c0 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71  RR_NOMEM_BKPT sq
278d0 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
278e0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
278f0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
27900 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73  ORRUPT_PGNO(P) s
27910 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
27920 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c  oError(__LINE__,
27930 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (P)).#else.# def
27940 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
27950 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d  _BKPT SQLITE_NOM
27960 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
27970 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
27980 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  KPT SQLITE_IOERR
27990 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20  _NOMEM.# define 
279a0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50  SQLITE_CORRUPT_P
279b0 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f  GNO(P) sqlite3Co
279c0 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
279d0 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E__).#endif../*.
279e0 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34  ** FTS3 and FTS4
279f0 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69   both require vi
27a00 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70  rtual table supp
27a10 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ort.*/.#if defin
27a20 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
27a30 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75  IRTUALTABLE).# u
27a40 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
27a50 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20  LE_FTS3.# undef 
27a60 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
27a70 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S4.#endif../*.**
27a80 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
27a90 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
27aa0 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
27ab0 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
27ac0 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
27ad0 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
27ae0 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
27af0 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
27b00 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
27b10 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
27b20 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
27b30 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
27b40 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
27b50 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
27b60 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
27b70 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
27b80 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
27b90 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
27ba0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
27bb0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
27bc0 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
27bd0 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
27be0 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
27bf0 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
27c00 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
27c10 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
27c20 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
27c30 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
27c40 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
27c50 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
27c60 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
27c70 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
27c80 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
27c90 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
27ca0 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
27cb0 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
27cc0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
27cd0 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
27ce0 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
27cf0 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
27d00 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
27d10 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
27d20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
27d30 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
27d40 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
27d50 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
27d60 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
27d70 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
27d80 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
27d90 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
27da0 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
27db0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
27dc0 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
27dd0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
27de0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
27df0 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
27e00 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
27e10 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
27e20 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
27e30 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
27e40 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27e50 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
27e60 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
27e70 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27e80 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
27e90 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
27ea0 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
27eb0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
27ec0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
27ed0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27ee0 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
27ef0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
27f00 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
27f10 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
27f20 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
27f30 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
27f40 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
27f50 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
27f60 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
27f70 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
27f80 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
27f90 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
27fa0 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e  ar)(x)]).# defin
27fb0 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
27fc0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
27fd0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
27fe0 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29   char)(x)]&0x80)
27ff0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28000 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
28010 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
28020 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
28030 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28040 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
28050 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
28060 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
28070 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
28080 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
28090 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
280a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
280b0 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
280c0 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
280d0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
280e0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
280f0 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
28100 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
28110 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
28120 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
28130 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
28140 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
28150 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
28160 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
28170 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
28180 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
28190 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
281a0 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28  )   ((x)=='"'||(
281b0 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27  x)=='\''||(x)=='
281c0 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65  ['||(x)=='`').#e
281d0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
281e0 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f  IsIdChar(u8);../
281f0 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75  *.** Internal fu
28200 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
28210 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s.*/.int sqlite3
28220 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68  StrICmp(const ch
28230 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
28240 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  ;.int sqlite3Str
28250 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72  len30(const char
28260 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  *);.#define sqli
28270 74 65 33 53 74 72 6c 65 6e 33 30 4e 4e 28 43 29  te3Strlen30NN(C)
28280 20 28 73 74 72 6c 65 6e 28 43 29 26 30 78 33 66   (strlen(C)&0x3f
28290 66 66 66 66 66 66 29 0a 63 68 61 72 20 2a 73 71  ffffff).char *sq
282a0 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28  lite3ColumnType(
282b0 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a  Column*,char*);.
282c0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
282d0 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
282e0 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
282f0 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
28300 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
28310 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
28320 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
28330 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
28340 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
28350 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
28360 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
28370 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
28380 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
28390 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
283a0 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
283b0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
283c0 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65  llocRawNN(sqlite
283d0 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  3*, u64);.char *
283e0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
283f0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28400 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
28410 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
28420 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
28430 72 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  r*, u64);.char *
28440 73 71 6c 69 74 65 33 44 62 53 70 61 6e 44 75 70  sqlite3DbSpanDup
28450 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28460 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
28470 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
28480 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
28490 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
284a0 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
284b0 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
284c0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
284d0 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
284e0 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
284f0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
28500 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
28510 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
28520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
28530 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  reeNN(sqlite3*, 
28540 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
28550 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
28560 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
28570 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
28580 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
28590 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
285a0 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
285b0 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
285c0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
285d0 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
285e0 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e  ault(void);.#ifn
285f0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
28600 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
28610 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
28620 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
28630 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
28640 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
28650 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
28660 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
28670 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
28680 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
28690 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
286a0 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
286b0 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
286c0 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
286d0 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
286e0 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
286f0 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
28700 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
28710 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
28720 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
28730 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
28740 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
28750 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
28760 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
28770 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
28780 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
28790 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
287a0 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
287b0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
287c0 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
287d0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
287e0 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
287f0 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
28800 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
28810 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
28820 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
28830 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
28840 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
28850 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
28860 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
28870 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
28880 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
28890 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
288a0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
288b0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
288c0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
288d0 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
288e0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
288f0 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
28900 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
28910 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74  endif../* Do not
28920 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53   allow both MEMS
28930 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20  YS5 and MEMSYS3 
28940 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f  to be defined to
28950 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79  gether.  If they
28960 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65  .** are, disable
28970 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64   MEMSYS3.*/.#ifd
28980 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28990 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
289a0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
289b0 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
289c0 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
289d0 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #undef SQLITE_EN
289e0 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e  ABLE_MEMSYS3.#en
289f0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
28a00 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
28a10 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
28a20 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
28a30 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
28a40 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
28a50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28a60 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
28a70 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
28a80 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
28a90 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
28aa0 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
28ab0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
28ac0 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
28ad0 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
28ae0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
28af0 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
28b00 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
28b10 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
28b20 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
28b30 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
28b40 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
28b50 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
28b60 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
28b70 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
28b80 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
28b90 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
28ba0 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
28bb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
28bc0 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
28bd0 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
28be0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
28bf0 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
28c00 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
28c10 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
28c20 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
28c30 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
28c40 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
28c50 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c  usHighwater(int,
28c60 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28c70 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28  e3LookasideUsed(
28c80 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a  sqlite3*,int*);.
28c90 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75  ./* Access to mu
28ca0 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71  texes used by sq
28cb0 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a  lite3_status() *
28cc0 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
28cd0 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d  *sqlite3Pcache1M
28ce0 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69  utex(void);.sqli
28cf0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
28d00 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f  e3MallocMutex(vo
28d10 69 64 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  id);..#if define
28d20 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
28d30 4d 55 4c 54 49 54 48 52 45 41 44 45 44 5f 43 48  MULTITHREADED_CH
28d40 45 43 4b 53 29 20 26 26 20 21 64 65 66 69 6e 65  ECKS) && !define
28d50 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
28d60 4d 49 54 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  MIT).void sqlite
28d70 33 4d 75 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74  3MutexWarnOnCont
28d80 65 6e 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d  ention(sqlite3_m
28d90 75 74 65 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  utex*);.#else.# 
28da0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75  define sqlite3Mu
28db0 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74  texWarnOnContent
28dc0 69 6f 6e 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  ion(x).#endif..#
28dd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28de0 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
28df0 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
28e00 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
28e10 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
28e20 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
28e30 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
28e40 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
28e50 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
28e60 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
28e70 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
28e80 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
28e90 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
28ea0 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
28eb0 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
28ec0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
28ed0 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
28ee0 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
28ef0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
28f00 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
28f10 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
28f20 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
28f30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
28f40 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
28f50 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
28f60 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
28f70 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
28f80 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
28f90 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20  ues */.};..char 
28fa0 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
28fb0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28fc0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
28fd0 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
28fe0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
28ff0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
29000 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
29010 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
29020 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
29030 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76  VE_OS_TRACE).  v
29040 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
29050 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
29060 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
29070 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
29080 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
29090 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
290a0 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
290b0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
290c0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
290d0 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
290e0 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
290f0 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
29100 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
29110 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
29120 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73  eViewBareExprLis
29130 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
29140 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  st ExprList*, co
29150 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
29160 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
29170 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
29180 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
29190 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
291a0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
291b0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
291c0 72 63 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a  rcList(TreeView*
291d0 2c 20 63 6f 6e 73 74 20 53 72 63 4c 69 73 74 2a  , const SrcList*
291e0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
291f0 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28  3TreeViewSelect(
29200 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
29210 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20   Select*, u8);. 
29220 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
29230 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69  eViewWith(TreeVi
29240 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a  ew*, const With*
29250 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
29260 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
29270 57 46 55 4e 43 0a 20 20 76 6f 69 64 20 73 71 6c  WFUNC.  void sql
29280 69 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 64  ite3TreeViewWind
29290 6f 77 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ow(TreeView*, co
292a0 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29  nst Window*, u8)
292b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
292c0 54 72 65 65 56 69 65 77 57 69 6e 46 75 6e 63 28  TreeViewWinFunc(
292d0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
292e0 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29 3b 0a 23   Window*, u8);.#
292f0 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 0a 76  endif.#endif...v
29300 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
29310 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
29320 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
29330 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
29340 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  e3ErrorMsg(Parse
29350 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
29360 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ...);.int sqlite
29370 33 45 72 72 6f 72 54 6f 50 61 72 73 65 72 28 73  3ErrorToParser(s
29380 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
29390 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  id sqlite3Dequot
293a0 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  e(char*);.void s
293b0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 45 78 70  qlite3DequoteExp
293c0 72 28 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  r(Expr*);.void s
293d0 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28  qlite3TokenInit(
293e0 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69  Token*,char*);.i
293f0 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72  nt sqlite3Keywor
29400 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69  dCode(const unsi
29410 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29  gned char*, int)
29420 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
29430 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63  Parser(Parse*, c
29440 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
29450 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
29460 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50  e3FinishCoding(P
29470 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
29480 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61  te3GetTempReg(Pa
29490 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
294a0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65  te3ReleaseTempRe
294b0 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69  g(Parse*,int);.i
294c0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
294d0 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
294e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
294f0 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65  ReleaseTempRange
29500 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29  (Parse*,int,int)
29510 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
29520 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28  earTempRegCache(
29530 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
29540 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
29550 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49   sqlite3NoTempsI
29560 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  nRange(Parse*,in
29570 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45  t,int);.#endif.E
29580 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
29590 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
295a0 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  nt,const Token*,
295b0 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
295c0 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a  te3Expr(sqlite3*
295d0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
295e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
295f0 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65  xprAttachSubtree
29600 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  s(sqlite3*,Expr*
29610 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
29620 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
29630 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
29640 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
29650 69 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41  id sqlite3PExprA
29660 64 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  ddSelect(Parse*,
29670 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29   Expr*, Select*)
29680 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
29690 78 70 72 41 6e 64 28 50 61 72 73 65 2a 2c 45 78  xprAnd(Parse*,Ex
296a0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
296b0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 69  r *sqlite3ExprSi
296c0 6d 70 6c 69 66 69 65 64 41 6e 64 4f 72 28 45 78  mplifiedAndOr(Ex
296d0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
296e0 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
296f0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
29700 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
29710 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
29720 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
29730 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75  Parse*, Expr*, u
29740 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
29750 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69  3ExprDelete(sqli
29760 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  te3*, Expr*);.Ex
29770 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
29780 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61  xprListAppend(Pa
29790 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
297a0 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
297b0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
297c0 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72  AppendVector(Par
297d0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64  se*,ExprList*,Id
297e0 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
297f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
29800 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45  stSetSortOrder(E
29810 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76  xprList*,int);.v
29820 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
29830 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65  istSetName(Parse
29840 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65  *,ExprList*,Toke
29850 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
29860 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
29870 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  Span(Parse*,Expr
29880 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
29890 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
298a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
298b0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
298c0 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  e3*, ExprList*);
298d0 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72  .u32 sqlite3Expr
298e0 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20  ListFlags(const 
298f0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
29900 73 71 6c 69 74 65 33 49 6e 64 65 78 48 61 73 44  sqlite3IndexHasD
29910 75 70 6c 69 63 61 74 65 52 6f 6f 74 50 61 67 65  uplicateRootPage
29920 28 49 6e 64 65 78 2a 29 3b 0a 69 6e 74 20 73 71  (Index*);.int sq
29930 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
29940 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
29950 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
29960 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
29970 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
29980 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
29990 74 4f 6e 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  tOne(sqlite3*, i
299a0 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 75 33 32 29  nt, char**, u32)
299b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
299c0 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
299d0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
299e0 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  ,int);.#ifndef S
299f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
29a00 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a  ALTABLE.Module *
29a10 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61  sqlite3PragmaVta
29a20 62 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65  bRegister(sqlite
29a30 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  3*,const char *z
29a40 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Name);.#endif.vo
29a50 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
29a60 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
29a70 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
29a80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
29a90 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
29aa0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
29ab0 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
29ac0 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
29ad0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
29ae0 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
29af0 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
29b00 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
29b10 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d  3DeleteColumnNam
29b20 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c  es(sqlite3*,Tabl
29b30 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
29b40 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c  ColumnsFromExprL
29b50 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ist(Parse*,ExprL
29b60 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e  ist*,i16*,Column
29b70 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
29b80 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e  3SelectAddColumn
29b90 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e  TypeAndCollation
29ba0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53  (Parse*,Table*,S
29bb0 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
29bc0 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
29bd0 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
29be0 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
29bf0 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
29c00 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
29c10 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  nt);.Index *sqli
29c20 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
29c30 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20  ex(Table*);.i16 
29c40 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49  sqlite3ColumnOfI
29c50 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36  ndex(Index*, i16
29c60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
29c70 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
29c80 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
29c90 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
29ca0 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  .#if SQLITE_ENAB
29cb0 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
29cc0 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  S.  void sqlite3
29cd0 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
29ce0 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c  FromName(Table*,
29cf0 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65   Column*);.#else
29d00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29d10 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
29d20 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f  sFromName(T,C) /
29d30 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69  * no-op */.#endi
29d40 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  f.void sqlite3Ad
29d50 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
29d60 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  oken*,Token*);.v
29d70 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
29d80 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
29d90 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29da0 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
29db0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
29dc0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
29dd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
29de0 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
29df0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
29e00 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44  void sqlite3AddD
29e10 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73  efaultValue(Pars
29e20 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
29e30 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
29e40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
29e50 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
29e60 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
29e70 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61  oid sqlite3EndTa
29e80 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
29e90 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65  *,Token*,u8,Sele
29ea0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
29eb0 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20  3ParseUri(const 
29ec0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
29ed0 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c  *,unsigned int*,
29ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29ef0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
29f00 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a  **,char**,char *
29f10 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
29f20 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 69 6e  E_HAS_CODEC.  in
29f30 74 20 73 71 6c 69 74 65 33 43 6f 64 65 63 51 75  t sqlite3CodecQu
29f40 65 72 79 50 61 72 61 6d 65 74 65 72 73 28 73 71  eryParameters(sq
29f50 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
29f60 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
29f70 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
29f80 73 71 6c 69 74 65 33 43 6f 64 65 63 51 75 65 72  sqlite3CodecQuer
29f90 79 50 61 72 61 6d 65 74 65 72 73 28 41 2c 42 2c  yParameters(A,B,
29fa0 43 29 20 30 0a 23 65 6e 64 69 66 0a 42 74 72 65  C) 0.#endif.Btre
29fb0 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
29fc0 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
29fd0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a  ,const char*);..
29fe0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  #ifdef SQLITE_UN
29ff0 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e  TESTABLE.# defin
2a000 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  e sqlite3FaultSi
2a010 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  m(X) SQLITE_OK.#
2a020 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74  else.  int sqlit
2a030 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b  e3FaultSim(int);
2a040 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20  .#endif..Bitvec 
2a050 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
2a060 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
2a070 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
2a080 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
2a090 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
2a0a0 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74  cTestNotNull(Bit
2a0b0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
2a0c0 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
2a0d0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
2a0e0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
2a0f0 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
2a100 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
2a110 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
2a120 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
2a130 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
2a140 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
2a150 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2a160 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20  _UNTESTABLE.int 
2a170 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
2a180 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74  ltinTest(int,int
2a190 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53  *);.#endif..RowS
2a1a0 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65  et *sqlite3RowSe
2a1b0 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b  tInit(sqlite3*);
2a1c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
2a1d0 53 65 74 44 65 6c 65 74 65 28 76 6f 69 64 2a 29  SetDelete(void*)
2a1e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
2a1f0 77 53 65 74 43 6c 65 61 72 28 76 6f 69 64 2a 29  wSetClear(void*)
2a200 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
2a210 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
2a220 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
2a230 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
2a240 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
2a250 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
2a260 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
2a270 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
2a280 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
2a290 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
2a2a0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
2a2b0 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
2a2c0 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
2a2d0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2a2e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
2a2f0 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
2a300 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2a310 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
2a320 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
2a330 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
2a340 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
2a350 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
2a360 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
2a370 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23  A,B) 0.#endif..#
2a380 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
2a390 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20  TACHED>30.  int 
2a3a0 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
2a3b0 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23  Zero(yDbMask);.#
2a3c0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2a3d0 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  e3DropTable(Pars
2a3e0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
2a3f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2a400 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62  lite3CodeDropTab
2a410 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  le(Parse*, Table
2a420 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2a430 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
2a440 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
2a450 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
2a460 6c 69 74 65 33 46 72 65 65 49 6e 64 65 78 28 73  lite3FreeIndex(s
2a470 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29  qlite3*, Index*)
2a480 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2a490 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
2a4a0 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
2a4b0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
2a4c0 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
2a4d0 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
2a4e0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
2a4f0 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
2a500 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
2a510 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
2a520 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
2a530 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a540 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
2a550 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  (X).#endif.void 
2a560 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
2a570 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2a580 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
2a590 2c 20 69 6e 74 2c 20 55 70 73 65 72 74 2a 29 3b  , int, Upsert*);
2a5a0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72  .void *sqlite3Ar
2a5b0 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69  rayAllocate(sqli
2a5c0 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69  te3*,void*,int,i
2a5d0 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73  nt*,int*);.IdLis
2a5e0 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
2a5f0 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20 49  Append(Parse*, I
2a600 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
2a610 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
2a620 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
2a630 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
2a640 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
2a650 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 50 61 72  cListEnlarge(Par
2a660 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
2a670 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73  nt, int);.SrcLis
2a680 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
2a690 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 20  tAppend(Parse*, 
2a6a0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
2a6b0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
2a6c0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2a6d0 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
2a6e0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2a6f0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2a700 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a720 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
2a730 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
2a740 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
2a750 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
2a760 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
2a770 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
2a780 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
2a790 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67  e3SrcListFuncArg
2a7a0 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
2a7b0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
2a7c0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
2a7d0 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
2a7e0 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
2a7f0 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
2a800 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
2a810 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
2a820 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
2a830 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
2a840 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
2a850 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
2a860 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
2a870 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
2a880 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
2a890 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
2a8a0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
2a8b0 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
2a8c0 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
2a8d0 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
2a8e0 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
2a8f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a900 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
2a910 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
2a920 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
2a930 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
2a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a950 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
2a960 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
2a970 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
2a980 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72  Index(Parse*, Sr
2a990 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  cList*, int);.in
2a9a0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28  t sqlite3Select(
2a9b0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2a9c0 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53   SelectDest*);.S
2a9d0 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
2a9e0 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45  lectNew(Parse*,E
2a9f0 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  xprList*,SrcList
2aa00 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
2aa10 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2aa20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
2aa30 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c  *,ExprList*,u32,
2aa40 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2aa50 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
2aa60 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
2aa70 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
2aa80 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
2aa90 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2aaa0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2aab0 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
2aac0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2aad0 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
2aae0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
2aaf0 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
2ab00 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
2ab10 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2ab20 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
2ab30 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
2ab40 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2ab50 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
2ab60 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
2ab70 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
2ab80 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
2ab90 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 63 68  prList*,Expr*,ch
2aba0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
2abb0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
2abc0 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
2abd0 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  ist*, Expr*, Exp
2abe0 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  rList*, Expr*);.
2abf0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
2ac00 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
2ac10 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 45  st*, ExprList*,E
2ac20 78 70 72 2a 2c 69 6e 74 2c 45 78 70 72 4c 69 73  xpr*,int,ExprLis
2ac30 74 2a 2c 45 78 70 72 2a 2c 0a 20 20 20 20 20 20  t*,Expr*,.      
2ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 55 70 73               Ups
2ac50 65 72 74 2a 29 3b 0a 57 68 65 72 65 49 6e 66 6f  ert*);.WhereInfo
2ac60 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65   *sqlite3WhereBe
2ac70 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  gin(Parse*,SrcLi
2ac80 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
2ac90 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  st*,ExprList*,u1
2aca0 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  6,int);.void sql
2acb0 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65  ite3WhereEnd(Whe
2acc0 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74  reInfo*);.LogEst
2acd0 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74   sqlite3WhereOut
2ace0 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72  putRowCount(Wher
2acf0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
2ad00 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
2ad10 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  nct(WhereInfo*);
2ad20 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
2ad30 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72 65  eIsOrdered(Where
2ad40 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
2ad50 74 65 33 57 68 65 72 65 4f 72 64 65 72 42 79 4c  te3WhereOrderByL
2ad60 69 6d 69 74 4f 70 74 4c 61 62 65 6c 28 57 68 65  imitOptLabel(Whe
2ad70 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
2ad80 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
2ad90 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
2ada0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
2adb0 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
2adc0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
2add0 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
2ade0 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
2adf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
2ae00 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
2ae10 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
2ae20 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
2ae30 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20  OFF      0      
2ae40 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50    /* Use of ONEP
2ae50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  ASS not allowed 
2ae60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
2ae70 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20  SS_SINGLE   1   
2ae80 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
2ae90 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67  valid for a sing
2aea0 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f  le row update */
2aeb0 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
2aec0 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20  _MULTI    2     
2aed0 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73     /* ONEPASS is
2aee0 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69   valid for multi
2aef0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64  ple rows */.void
2af00 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
2af10 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28  LoadIndexColumn(
2af20 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
2af30 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
2af40 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2af50 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
2af60 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2af70 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
2af80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2af90 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
2afa0 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
2afb0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2afc0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2afd0 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
2afe0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
2aff0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b000 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65  e3ExprCode(Parse
2b010 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2b020 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2b030 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c  CodeCopy(Parse*,
2b040 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
2b050 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2b060 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72  deFactorable(Par
2b070 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
2b080 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b090 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73  rCodeAtInit(Pars
2b0a0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2b0b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2b0c0 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c  CodeTemp(Parse*,
2b0d0 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69   Expr*, int*);.i
2b0e0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2b0f0 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  deTarget(Parse*,
2b100 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
2b110 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
2b120 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65  deAndCache(Parse
2b130 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
2b140 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b150 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73  odeExprList(Pars
2b160 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
2b170 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64  nt, int, u8);.#d
2b180 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
2b190 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20  L_DUP      0x01 
2b1a0 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68   /* Deep, not sh
2b1b0 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a  allow copies */.
2b1c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
2b1d0 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30  CEL_FACTOR   0x0
2b1e0 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74  2  /* Factor out
2b1f0 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20   constant terms 
2b200 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2b210 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20  E_ECEL_REF      
2b220 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70  0x04  /* Use Exp
2b230 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72  rList.u.x.iOrder
2b240 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65  ByCol */.#define
2b250 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49   SQLITE_ECEL_OMI
2b260 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a 20 4f  TREF  0x08  /* O
2b270 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73 74 2e  mit if ExprList.
2b280 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
2b290 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
2b2a0 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a  xprIfTrue(Parse*
2b2b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
2b2c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b2d0 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73  ExprIfFalse(Pars
2b2e0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
2b2f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b300 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75 70  e3ExprIfFalseDup
2b310 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2b320 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
2b330 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
2b340 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
2b350 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2b360 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c  har*);.#define L
2b370 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20 30 78  OCATE_VIEW    0x
2b380 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54  01.#define LOCAT
2b390 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a 54  E_NOERR   0x02.T
2b3a0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
2b3b0 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
2b3c0 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20  u32 flags,const 
2b3d0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2b3e0 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
2b3f0 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
2b400 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c  em(Parse*,u32 fl
2b410 61 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c 69  ags,struct SrcLi
2b420 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65  st_item *);.Inde
2b430 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  x *sqlite3FindIn
2b440 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  dex(sqlite3*,con
2b450 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2b460 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2b470 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2b480 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
2b490 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
2b4a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b4b0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
2b4c0 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e  ndex(sqlite3*,in
2b4d0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
2b4e0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75  void sqlite3Vacu
2b4f0 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  um(Parse*,Token*
2b500 2c 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,Expr*);.int sql
2b510 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
2b520 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  ar**, sqlite3*, 
2b530 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
2b540 75 65 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ue*);.char *sqli
2b550 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
2b560 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
2b570 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2b580 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65  xprCompare(Parse
2b590 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
2b5a0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b5b0 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70  3ExprCompareSkip
2b5c0 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
2b5d0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2b5e0 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
2b5f0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
2b600 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
2b610 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
2b620 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78  esExpr(Parse*,Ex
2b630 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
2b640 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2b650 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c 52  rImpliesNonNullR
2b660 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76  ow(Expr*,int);.v
2b670 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
2b680 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73  nalyzeAggregates
2b690 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2b6a0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2b6b0 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
2b6c0 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78  gList(NameContex
2b6d0 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  t*,ExprList*);.i
2b6e0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
2b6f0 76 65 72 65 64 42 79 49 6e 64 65 78 28 45 78 70  veredByIndex(Exp
2b700 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49 6e  r*, int iCur, In
2b710 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20  dex *pIdx);.int 
2b720 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
2b730 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
2b740 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
2b750 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
2b760 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64  e(Parse*);.#ifnd
2b770 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
2b780 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
2b790 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
2b7a0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2b7b0 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
2b7c0 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  te(void);.#endif
2b7d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
2b7e0 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
2b7f0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2b800 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
2b810 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
2b820 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2b830 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
2b840 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
2b850 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
2b860 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2b870 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
2b880 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
2b890 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61 63  qlite3EndTransac
2b8a0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74 29  tion(Parse*,int)
2b8b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
2b8c0 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
2b8d0 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
2b8e0 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
2b8f0 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
2b900 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  3 *);.void sqlit
2b910 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
2b920 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
2b930 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
2b940 33 45 78 70 72 49 64 54 6f 54 72 75 65 46 61 6c  3ExprIdToTrueFal
2b950 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  se(Expr*);.int s
2b960 71 6c 69 74 65 33 45 78 70 72 54 72 75 74 68 56  qlite3ExprTruthV
2b970 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  alue(const Expr*
2b980 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2b990 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
2b9a0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2b9b0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
2b9c0 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
2b9d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2b9e0 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
2b9f0 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
2ba00 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
2ba10 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79  onstantOrGroupBy
2ba20 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
2ba30 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2ba40 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62  sqlite3ExprIsTab
2ba50 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  leConstant(Expr*
2ba60 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  ,int);.#ifdef SQ
2ba70 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
2ba80 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c  OR_HINTS.int sql
2ba90 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73  ite3ExprContains
2baa0 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b  Subquery(Expr*);
2bab0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2bac0 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72  te3ExprIsInteger
2bad0 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69  (Expr*, int*);.i
2bae0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  nt sqlite3ExprCa
2baf0 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78  nBeNull(const Ex
2bb00 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2bb10 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69  3ExprNeedsNoAffi
2bb20 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74  nityChange(const
2bb30 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69   Expr*, char);.i
2bb40 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
2bb50 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
2bb60 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
2bb70 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20  rateRowDelete(. 
2bb80 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a     Parse*,Table*
2bb90 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e  ,Trigger*,int,in
2bba0 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c  t,int,i16,u8,u8,
2bbb0 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  u8,int);.void sq
2bbc0 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
2bbd0 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73  IndexDelete(Pars
2bbe0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2bbf0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2bc00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
2bc10 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
2bc20 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
2bc30 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  t, int, int, int
2bc40 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76  *,Index*,int);.v
2bc50 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2bc60 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50  vePartIdxLabel(P
2bc70 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
2bc80 73 71 6c 69 74 65 33 45 78 70 72 52 65 66 65 72  sqlite3ExprRefer
2bc90 65 6e 63 65 73 55 70 64 61 74 65 64 43 6f 6c 75  encesUpdatedColu
2bca0 6d 6e 28 45 78 70 72 2a 2c 69 6e 74 2a 2c 69 6e  mn(Expr*,int*,in
2bcb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2bcc0 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
2bcd0 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
2bce0 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
2bcf0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
2bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
2bd30 2c 69 6e 74 2a 2c 55 70 73 65 72 74 2a 29 3b 0a  ,int*,Upsert*);.
2bd40 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2bd50 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20  ABLE_NULL_TRIM. 
2bd60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74   void sqlite3Set
2bd70 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62  MakeRecordP5(Vdb
2bd80 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
2bd90 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2bda0 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50  e3SetMakeRecordP
2bdb0 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  5(A,B).#endif.vo
2bdc0 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
2bdd0 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
2bde0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
2bdf0 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
2be00 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
2be10 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
2be20 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
2be30 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c  Table*, int, u8,
2be40 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c   int, u8*, int*,
2be50 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   int*);.void sql
2be60 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
2be70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
2be80 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2be90 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74  sqlite3MultiWrit
2bea0 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
2beb0 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28  sqlite3MayAbort(
2bec0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2bed0 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61  lite3HaltConstra
2bee0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
2bef0 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c   int, char*, i8,
2bf00 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
2bf10 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69  e3UniqueConstrai
2bf20 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
2bf30 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2bf40 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72  lite3RowidConstr
2bf50 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
2bf60 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20  , Table*);.Expr 
2bf70 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28  *sqlite3ExprDup(
2bf80 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2bf90 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  nt);.ExprList *s
2bfa0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75  qlite3ExprListDu
2bfb0 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  p(sqlite3*,ExprL
2bfc0 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69  ist*,int);.SrcLi
2bfd0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
2bfe0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  stDup(sqlite3*,S
2bff0 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64  rcList*,int);.Id
2c000 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
2c010 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
2c020 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74  IdList*);.Select
2c030 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44   *sqlite3SelectD
2c040 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  up(sqlite3*,Sele
2c050 63 74 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65  ct*,int);.FuncDe
2c060 66 20 2a 73 71 6c 69 74 65 33 46 75 6e 63 74 69  f *sqlite3Functi
2c070 6f 6e 53 65 61 72 63 68 28 69 6e 74 2c 63 6f 6e  onSearch(int,con
2c080 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2c090 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69  sqlite3InsertBui
2c0a0 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65  ltinFuncs(FuncDe
2c0b0 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66  f*,int);.FuncDef
2c0c0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
2c0d0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
2c0e0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75  onst char*,int,u
2c0f0 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
2c100 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
2c110 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  inFunctions(void
2c120 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2c130 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
2c140 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2c150 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
2c160 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f  sterPerConnectio
2c170 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  nBuiltinFunction
2c180 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
2c190 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
2c1a0 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
2c1b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
2c1c0 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
2c1d0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2c1e0 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
2c1f0 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
2c200 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
2c210 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
2c220 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2c230 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2c240 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
2c250 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
2c260 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
2c270 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  xpr*, ExprList*,
2c280 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  Expr*,int);.#end
2c290 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2c2a0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
2c2b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
2c2c0 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
2c2d0 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
2c2e0 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
2c2f0 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
2c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c310 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
2c320 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2c330 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
2c340 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
2c350 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
2c360 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c370 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
2c380 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
2c390 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2c3a0 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
2c3b0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
2c3c0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
2c3d0 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
2c3e0 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
2c3f0 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
2c400 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
2c410 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
2c420 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
2c430 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
2c440 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c450 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
2c460 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
2c470 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
2c480 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
2c490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
2c4b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
2c4c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
2c4d0 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
2c4e0 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
2c4f0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
2c500 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
2c510 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
2c520 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
2c530 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
2c540 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
2c550 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
2c560 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
2c570 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
2c580 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
2c590 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
2c5a0 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
2c5b0 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
2c5c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5e0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
2c5f0 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
2c600 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
2c610 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
2c620 72 49 6e 73 65 72 74 53 74 65 70 28 50 61 72 73  rInsertStep(Pars
2c630 65 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  e*,Token*, IdLis
2c640 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
2c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c660 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65              Sele
2c670 63 74 2a 2c 75 38 2c 55 70 73 65 72 74 2a 2c 0a  ct*,u8,Upsert*,.
2c680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6a0 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2c6b0 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
2c6c0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
2c6d0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
2c6e0 70 64 61 74 65 53 74 65 70 28 50 61 72 73 65 2a  pdateStep(Parse*
2c6f0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2c700 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 0a 20 20  *, Expr*, u8,.  
2c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c730 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2c740 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2c750 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
2c760 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c  qlite3TriggerDel
2c770 65 74 65 53 74 65 70 28 50 61 72 73 65 2a 2c 54  eteStep(Parse*,T
2c780 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20  oken*, Expr*,.  
2c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7b0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2c7c0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2c7d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
2c7e0 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
2c7f0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
2c800 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
2c810 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2c820 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
2c830 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
2c840 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
2c850 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
2c860 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
2c870 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
2c880 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
2c890 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
2c8a0 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
2c8b0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
2c8c0 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
2c8d0 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
2c8e0 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
2c8f0 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
2c900 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
2c910 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
2c920 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
2c930 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
2c940 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
2c950 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
2c960 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
2c970 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
2c980 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
2c990 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
2c9a0 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
2c9b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2c9c0 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
2c9d0 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
2c9e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2c9f0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
2ca00 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
2ca10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2ca20 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
2ca30 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
2ca40 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
2ca50 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
2ca60 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
2ca70 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
2ca80 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
2ca90 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
2caa0 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
2cab0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
2cac0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
2cad0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
2cae0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2caf0 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
2cb00 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
2cb10 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
2cb20 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
2cb30 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
2cb40 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
2cb50 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
2cb60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
2cb70 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
2cb80 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
2cb90 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
2cba0 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
2cbb0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
2cbc0 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
2cbd0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2cbe0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2cbf0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2cc00 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
2cc10 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
2cc20 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
2cc30 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2cc40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
2cc50 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
2cc60 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
2cc70 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
2cc80 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
2cc90 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
2cca0 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
2ccb0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2ccc0 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
2ccd0 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
2cce0 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
2ccf0 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
2cd00 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
2cd10 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
2cd20 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
2cd30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
2cd40 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
2cd50 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
2cd60 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2cd70 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
2cd80 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
2cd90 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2cda0 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
2cdb0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2cdc0 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
2cdd0 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
2cde0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
2cdf0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
2ce00 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
2ce10 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
2ce20 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
2ce30 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
2ce40 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
2ce50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2ce60 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
2ce70 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2ce80 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
2ce90 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
2cea0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2ceb0 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
2cec0 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
2ced0 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
2cee0 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
2cef0 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
2cf00 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
2cf10 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
2cf20 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
2cf30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2cf40 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
2cf50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2cf60 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73  OMIT_UTF16.int s
2cf70 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
2cf80 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
2cf90 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
2cfa0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2cfb0 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28  ite3Utf8CharLen(
2cfc0 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
2cfd0 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75  a, int nByte);.u
2cfe0 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65  32 sqlite3Utf8Re
2cff0 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  ad(const u8**);.
2d000 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
2d010 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73  gEst(u64);.LogEs
2d020 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41  t sqlite3LogEstA
2d030 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74  dd(LogEst,LogEst
2d040 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2d050 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2d060 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  BLE.LogEst sqlit
2d070 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62  e3LogEstFromDoub
2d080 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64  le(double);.#end
2d090 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2d0a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
2d0b0 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c  T_SCANSTATUS) ||
2d0c0 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
2d0d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
2d0e0 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20  T3_OR_STAT4) || 
2d0f0 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
2d100 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54  LITE_EXPLAIN_EST
2d110 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34  IMATED_ROWS).u64
2d120 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f   sqlite3LogEstTo
2d130 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e  Int(LogEst);.#en
2d140 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74  dif.VList *sqlit
2d150 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74  e3VListAdd(sqlit
2d160 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74  e3*,VList*,const
2d170 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b   char*,int,int);
2d180 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2d190 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61  ite3VListNumToNa
2d1a0 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  me(VList*,int);.
2d1b0 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74  int sqlite3VList
2d1c0 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a  NameToNum(VList*
2d1d0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2d1e0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  );../*.** Routin
2d1f0 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
2d200 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
2d210 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
2d220 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
2d230 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
2d240 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
2d250 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
2d260 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
2d270 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  til.c.** file..*
2d280 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
2d290 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
2d2a0 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20  char*, u64);.u8 
2d2b0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2d2c0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2d2d0 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
2d2e0 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
2d2f0 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
2d300 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
2d310 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2d320 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
2d330 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  ;../*.** The com
2d340 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20  mon case is for 
2d350 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61  a varint to be a
2d360 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
2d370 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  hey following.**
2d380 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74   macros handle t
2d390 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77  he common case w
2d3a0 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75  ithout a procedu
2d3b0 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65  re call, but the
2d3c0 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72  n call.** the pr
2d3d0 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67  ocedure for larg
2d3e0 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23  er varints..*/.#
2d3f0 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
2d400 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
2d410 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
2d420 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
2d430 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
2d440 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
2d450 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
2d460 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
2d470 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
2d480 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
2d490 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
2d4a0 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
2d4b0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2d4c0 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  t((A),(B))).#def
2d4d0 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
2d4e0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2d4f0 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
2d500 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
2d510 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
2d520 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
2d530 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71  exAffinityStr(sq
2d540 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b  lite3*, Index*);
2d550 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
2d560 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
2d570 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
2d580 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
2d590 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
2d5a0 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
2d5b0 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
2d5c0 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
2d5d0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
2d5e0 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
2d5f0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62  .char sqlite3Tab
2d600 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  leColumnAffinity
2d610 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68  (Table*,int);.ch
2d620 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
2d630 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
2d640 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2d650 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
2d660 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
2d670 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  8);.int sqlite3D
2d680 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e  ecOrHexToI64(con
2d690 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b  st char*, i64*);
2d6a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
2d6b0 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65  orWithMsg(sqlite
2d6c0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2d6d0 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
2d6e0 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
2d6f0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
2d700 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72   sqlite3SystemEr
2d710 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
2d720 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
2d730 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
2d740 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
2d750 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
2d760 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
2d770 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
2d780 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
2d790 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
2d7a0 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
2d7b0 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
2d7c0 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
2d7d0 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
2d7e0 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
2d7f0 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  (int);.#endif..#
2d800 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2d810 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a  BLE_DESERIALIZE.
2d820 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62  int sqlite3Memdb
2d830 49 6e 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64  Init(void);.#end
2d840 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  if..const char *
2d850 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
2d860 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
2d870 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20  eadSchema(Parse 
2d880 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65  *pParse);.CollSe
2d890 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f  q *sqlite3FindCo
2d8a0 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75  llSeq(sqlite3*,u
2d8b0 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61  8 enc, const cha
2d8c0 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  r*,int);.int sql
2d8d0 69 74 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e  ite3IsBinary(con
2d8e0 73 74 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f  st CollSeq*);.Co
2d8f0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
2d900 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
2d910 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
2d920 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
2d930 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
2d940 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
2d950 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
2d960 45 78 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Expr);.CollSeq *
2d970 73 71 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c  sqlite3ExprNNCol
2d980 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
2d990 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29  se, Expr *pExpr)
2d9a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2d9b0 72 43 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61  rCollSeqMatch(Pa
2d9c0 72 73 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  rse*,Expr*,Expr*
2d9d0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2d9e0 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
2d9f0 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
2da00 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
2da10 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78  Token*, int);.Ex
2da20 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2da30 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
2da40 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
2da50 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
2da60 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
2da70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
2da80 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2da90 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2daa0 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
2dab0 20 73 71 6c 69 74 65 33 57 72 69 74 61 62 6c 65   sqlite3Writable
2dac0 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 29  Schema(sqlite3*)
2dad0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
2dae0 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
2daf0 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  se *, const char
2db00 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2db10 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
2db20 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b  sqlite3 *, int);
2db30 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49  .int sqlite3AddI
2db40 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2db50 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e  int sqlite3SubIn
2db60 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
2db70 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  nt sqlite3MulInt
2db80 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2db90 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
2dba0 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  2(int);.#ifdef S
2dbb0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
2dbc0 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69  _NAMES.void sqli
2dbd0 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63  te3FileSuffix3(c
2dbe0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
2dbf0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2dc00 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  ne sqlite3FileSu
2dc10 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69  ffix3(X,Y).#endi
2dc20 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42  f.u8 sqlite3GetB
2dc30 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61  oolean(const cha
2dc40 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74  r *z,u8);..const
2dc50 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
2dc60 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
2dc70 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
2dc80 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
2dc90 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
2dca0 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
2dcb0 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
2dcc0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2dcd0 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
2dce0 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20  *,u8,.          
2dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
2dd00 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
2dd10 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2dd20 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  SetNull(sqlite3_
2dd30 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71  value*);.void sq
2dd40 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73  lite3ValueFree(s
2dd50 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
2dd60 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
2dd70 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73  qlite3ValueNew(s
2dd80 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64  qlite3 *);.#ifnd
2dd90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
2dda0 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74  TF16.char *sqlit
2ddb0 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
2ddc0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
2ddd0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e  *, int, u8);.#en
2dde0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  dif.int sqlite3V
2ddf0 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
2de00 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
2de10 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
2de20 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
2de30 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
2de40 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
2de50 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
2de60 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
2de70 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
2de80 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2de90 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2dea0 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
2deb0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2dec0 20 63 68 61 72 20 73 71 6c 69 74 65 33 53 74 72   char sqlite3Str
2ded0 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e  BINARY[];.extern
2dee0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2def0 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65  char sqlite3Uppe
2df00 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65  rToLower[];.exte
2df10 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2df20 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74  d char sqlite3Ct
2df30 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e  ypeMap[];.extern
2df40 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c   const Token sql
2df50 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b  ite3IntTokens[];
2df60 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
2df70 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  SD struct Sqlite
2df80 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  3Config sqlite3C
2df90 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75  onfig;.extern Fu
2dfa0 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65  ncDefHash sqlite
2dfb0 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
2dfc0 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
2dfd0 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
2dfe0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
2dff0 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
2e000 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 56  .#endif.#ifdef V
2e010 44 42 45 5f 50 52 4f 46 49 4c 45 0a 65 78 74 65  DBE_PROFILE.exte
2e020 72 6e 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36  rn sqlite3_uint6
2e030 34 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c  4 sqlite3NProfil
2e040 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  eCnt;.#endif.voi
2e050 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
2e060 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
2e070 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2e080 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
2e090 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
2e0a0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
2e0b0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
2e0c0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2e0d0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2e0e0 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
2e0f0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
2e100 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2e110 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 43  ite3AlterRenameC
2e120 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 53 72  olumn(Parse*, Sr
2e130 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
2e140 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2e150 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
2e160 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2e170 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
2e180 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
2e190 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
2e1a0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
2e1b0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
2e1c0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
2e1d0 6e 74 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  nts(sqlite3*, in
2e1e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2e1f0 43 6f 64 65 52 68 73 4f 66 49 4e 28 50 61 72 73  CodeRhsOfIN(Pars
2e200 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
2e210 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
2e220 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a  Subselect(Parse*
2e230 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2e240 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70  qlite3SelectPrep
2e250 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2e260 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
2e270 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2e280 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73  ectWrongNumTerms
2e290 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61  Error(Parse *pPa
2e2a0 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b  rse, Select *p);
2e2b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63  .int sqlite3Matc
2e2c0 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20  hSpanName(const 
2e2d0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2e2e0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2e2f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69   const char*);.i
2e300 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
2e310 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43  eExprNames(NameC
2e320 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
2e330 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
2e340 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73  lveExprListNames
2e350 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2e360 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  xprList*);.void 
2e370 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
2e380 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a  lectNames(Parse*
2e390 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
2e3a0 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
2e3b0 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66  lite3ResolveSelf
2e3c0 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a  Reference(Parse*
2e3d0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72  ,Table*,int,Expr
2e3e0 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
2e3f0 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2e400 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
2e410 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
2e420 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
2e430 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2e440 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
2e450 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
2e460 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2e470 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
2e480 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
2e490 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
2e4a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2e4b0 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
2e4c0 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
2e4d0 74 20 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  t *);.void *sqli
2e4e0 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65 6e 4d 61  te3RenameTokenMa
2e4f0 70 28 50 61 72 73 65 2a 2c 20 76 6f 69 64 2a 2c  p(Parse*, void*,
2e500 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2e510 71 6c 69 74 65 33 52 65 6e 61 6d 65 54 6f 6b 65  qlite3RenameToke
2e520 6e 52 65 6d 61 70 28 50 61 72 73 65 2a 2c 20 76  nRemap(Parse*, v
2e530 6f 69 64 20 2a 70 54 6f 2c 20 76 6f 69 64 20 2a  oid *pTo, void *
2e540 70 46 72 6f 6d 29 3b 0a 76 6f 69 64 20 73 71 6c  pFrom);.void sql
2e550 69 74 65 33 52 65 6e 61 6d 65 45 78 70 72 55 6e  ite3RenameExprUn
2e560 6d 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  map(Parse*, Expr
2e570 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e580 52 65 6e 61 6d 65 45 78 70 72 6c 69 73 74 55 6e  RenameExprlistUn
2e590 6d 61 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  map(Parse*, Expr
2e5a0 4c 69 73 74 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  List*);.CollSeq 
2e5b0 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
2e5c0 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
2e5d0 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
2e5e0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
2e5f0 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
2e600 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 43 6f  (const char*, Co
2e610 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lumn*);.void sql
2e620 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
2e630 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2e640 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2e650 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
2e660 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 2c 20  r(BusyHandler*, 
2e670 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 29 3b 0a  sqlite3_file*);.
2e680 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2e690 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
2e6a0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2e6b0 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
2e6c0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2e6d0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2e6e0 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
2e6f0 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
2e700 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2e710 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
2e720 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
2e730 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2e740 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
2e750 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2e760 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
2e770 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
2e780 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2e790 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
2e7a0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2e7b0 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
2e7c0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
2e7d0 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
2e7e0 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
2e7f0 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
2e800 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
2e810 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
2e820 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
2e830 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
2e840 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2e850 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
2e860 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
2e870 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55   sqlite3KeyInfoU
2e880 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  nref(KeyInfo*);.
2e890 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2e8a0 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e  KeyInfoRef(KeyIn
2e8b0 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2e8c0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49  qlite3KeyInfoOfI
2e8d0 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64  ndex(Parse*, Ind
2e8e0 65 78 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  ex*);.KeyInfo *s
2e8f0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 46 72 6f  qlite3KeyInfoFro
2e900 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
2e910 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2e920 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 64 65 66 20  , int);..#ifdef 
2e930 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
2e940 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49   sqlite3KeyInfoI
2e950 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e  sWriteable(KeyIn
2e960 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  fo*);.#endif.int
2e970 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
2e980 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  nc(sqlite3 *, co
2e990 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  nst char *, int,
2e9a0 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20   int, void *,.  
2e9b0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2e9c0 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2e9d0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2e9e0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2e9f0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2ea00 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2ea10 2a 29 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28  *), .  void (*)(
2ea20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2ea30 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
2ea40 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
2ea50 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
2ea60 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2ea70 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
2ea80 2a 29 2c 20 0a 20 20 46 75 6e 63 44 65 73 74 72  *), .  FuncDestr
2ea90 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
2eaa0 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  or.);.void sqlit
2eab0 65 33 4e 6f 6f 70 44 65 73 74 72 75 63 74 6f 72  e3NoopDestructor
2eac0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
2ead0 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71  lite3OomFault(sq
2eae0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2eaf0 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71  lite3OomClear(sq
2eb00 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2eb10 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
2eb20 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
2eb30 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
2eb40 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
2eb50 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
2eb60 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
2eb70 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65  trAccum*, sqlite
2eb80 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  3*, char*, int, 
2eb90 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
2eba0 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
2ebb0 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
2ebc0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2ebd0 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44  DestInit(SelectD
2ebe0 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45  est*,int,int);.E
2ebf0 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61  xpr *sqlite3Crea
2ec00 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c  teColumnExpr(sql
2ec10 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20  ite3 *, SrcList 
2ec20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76  *, int, int);..v
2ec30 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
2ec40 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33  pRestart(sqlite3
2ec50 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64  _backup *);.void
2ec60 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70   sqlite3BackupUp
2ec70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63  date(sqlite3_bac
2ec80 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e  kup *, Pgno, con
2ec90 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64  st u8 *);..#ifnd
2eca0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
2ecb0 55 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69  UBQUERY.int sqli
2ecc0 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50  te3ExprCheckIN(P
2ecd0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23  arse*, Expr*);.#
2ece0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2ecf0 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e  lite3ExprCheckIN
2ed00 28 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (x,y) SQLITE_OK.
2ed10 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2ed20 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
2ed30 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64  T3_OR_STAT4.void
2ed40 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46   sqlite3AnalyzeF
2ed50 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2ed60 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2ed70 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20  ProbeSetValue(. 
2ed80 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a     Parse*,Index*
2ed90 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  ,UnpackedRecord*
2eda0 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c  *,Expr*,int,int,
2edb0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
2edc0 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  e3Stat4ValueFrom
2edd0 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70  Expr(Parse*, Exp
2ede0 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  r*, u8, sqlite3_
2edf0 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73  value**);.void s
2ee00 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
2ee10 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
2ee20 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ord*);.int sqlit
2ee30 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71  e3Stat4Column(sq
2ee40 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f  lite3*, const vo
2ee50 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73  id*, int, int, s
2ee60 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2ee70 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64  .char sqlite3Ind
2ee80 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79  exColumnAffinity
2ee90 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78  (sqlite3*, Index
2eea0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
2eeb0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
2eec0 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
2eed0 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
2eee0 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
2eef0 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2ef00 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  N.  void *sqlite
2ef10 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
2ef20 64 2a 28 2a 29 28 75 36 34 29 2c 20 50 61 72 73  d*(*)(u64), Pars
2ef30 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
2ef40 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
2ef50 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
2ef60 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  d*));.#endif.voi
2ef70 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
2ef80 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
2ef90 6e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  n);.int sqlite3P
2efa0 61 72 73 65 72 46 61 6c 6c 62 61 63 6b 28 69 6e  arserFallback(in
2efb0 74 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41  t);.#ifdef YYTRA
2efc0 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a  CKMAXSTACKDEPTH.
2efd0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
2efe0 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69  serStackPeak(voi
2eff0 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  d*);.#endif..voi
2f000 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61  d sqlite3AutoLoa
2f010 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  dExtensions(sqli
2f020 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  te3*);.#ifndef S
2f030 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
2f040 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64  EXTENSION.  void
2f050 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2f060 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
2f070 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2f080 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  e sqlite3CloseEx
2f090 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64  tensions(X).#end
2f0a0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2f0b0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
2f0c0 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACHE.  void sqli
2f0d0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72  te3TableLock(Par
2f0e0 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  se *, int, int, 
2f0f0 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  u8, const char *
2f100 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2f110 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  ne sqlite3TableL
2f120 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23  ock(v,w,x,y,z).#
2f130 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2f140 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20  LITE_TEST.  int 
2f150 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75  sqlite3Utf8To8(u
2f160 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a  nsigned char*);.
2f170 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2f180 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2f190 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
2f1a0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  e sqlite3VtabCle
2f1b0 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20  ar(Y).#  define 
2f1c0 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2f1d0 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  X,Y) SQLITE_OK.#
2f1e0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f1f0 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a  VtabRollback(X).
2f200 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2f210 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23  3VtabCommit(X).#
2f220 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2f230 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30  VtabInSync(db) 0
2f240 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2f250 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20  e3VtabLock(X).# 
2f260 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2f270 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
2f280 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2f290 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
2f2a0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2f2b0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
2f2c0 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
2f2d0 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
2f2e0 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
2f2f0 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
2f300 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
2f310 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
2f320 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
2f330 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
2f340 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
2f350 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
2f360 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
2f370 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
2f380 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56  c(sqlite3 *db, V
2f390 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  dbe*);.   int sq
2f3a0 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
2f3b0 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  k(sqlite3 *db);.
2f3c0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2f3d0 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33  abCommit(sqlite3
2f3e0 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73   *db);.   void s
2f3f0 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56  qlite3VtabLock(V
2f400 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
2f410 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
2f420 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2f430 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2f440 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c  abUnlockList(sql
2f450 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73  ite3*);.   int s
2f460 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2f470 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  int(sqlite3 *, i
2f480 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69  nt, int);.   voi
2f490 64 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  d sqlite3VtabImp
2f4a0 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c  ortErrmsg(Vdbe*,
2f4b0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b   sqlite3_vtab*);
2f4c0 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69  .   VTable *sqli
2f4d0 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c  te3GetVTable(sql
2f4e0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
2f4f0 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74     Module *sqlit
2f500 65 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75  e3VtabCreateModu
2f510 6c 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33  le(.     sqlite3
2f520 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68  *,.     const ch
2f530 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20  ar*,.     const 
2f540 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c  sqlite3_module*,
2f550 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20  .     void*,.   
2f560 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
2f570 0a 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65  .   );.#  define
2f580 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
2f590 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56  nc(db) ((db)->nV
2f5a0 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d  Trans>0 && (db)-
2f5b0 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e  >aVTrans==0).#en
2f5c0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  dif.int sqlite3V
2f5d0 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c  tabEponymousTabl
2f5e0 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64  eInit(Parse*,Mod
2f5f0 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ule*);.void sqli
2f600 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73  te3VtabEponymous
2f610 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74  TableClear(sqlit
2f620 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  e3*,Module*);.vo
2f630 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61  id sqlite3VtabMa
2f640 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65  keWritable(Parse
2f650 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20  *,Table*);.void 
2f660 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2f670 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
2f680 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
2f690 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ken*, int);.void
2f6a0 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69   sqlite3VtabFini
2f6b0 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  shParse(Parse*, 
2f6c0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2f6d0 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74  lite3VtabArgInit
2f6e0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
2f6f0 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74  qlite3VtabArgExt
2f700 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  end(Parse*, Toke
2f710 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2f720 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73  VtabCallCreate(s
2f730 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
2f740 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72  nst char *, char
2f750 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   **);.int sqlite
2f760 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74  3VtabCallConnect
2f770 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2f780 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2f790 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c  bCallDestroy(sql
2f7a0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2f7b0 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
2f7c0 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
2f7d0 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c  sqlite3 *, VTabl
2f7e0 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  e *);.FuncDef *s
2f7f0 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f  qlite3VtabOverlo
2f800 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  adFunction(sqlit
2f810 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69  e3 *,FuncDef*, i
2f820 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b  nt nArg, Expr*);
2f830 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
2f840 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
2f850 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
2f860 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
2f870 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
2f880 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
2f890 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
2f8a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
2f8b0 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
2f8c0 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
2f8d0 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
2f8e0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2f8f0 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 23  Reset(Parse*);.#
2f900 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2f910 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a 63 68  BLE_NORMALIZE.ch
2f920 61 72 20 2a 73 71 6c 69 74 65 33 4e 6f 72 6d 61  ar *sqlite3Norma
2f930 6c 69 7a 65 28 56 64 62 65 2a 2c 20 63 6f 6e 73  lize(Vdbe*, cons
2f940 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
2f950 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
2f960 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
2f970 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
2f980 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
2f990 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2f9a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
2f9b0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
2f9c0 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
2f9d0 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
2f9e0 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
2f9f0 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
2fa00 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
2fa10 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
2fa20 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
2fa30 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
2fa40 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2fa50 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
2fa60 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2fa70 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2fa80 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
2fa90 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
2faa0 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
2fab0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
2fac0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
2fad0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2fae0 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
2faf0 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
2fb00 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
2fb10 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2fb20 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
2fb30 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
2fb40 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
2fb50 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
2fb60 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
2fb70 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
2fb80 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
2fb90 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
2fba0 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
2fbb0 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2fbc0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e  x,y).#endif.#ifn
2fbd0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2fbe0 55 50 53 45 52 54 0a 20 20 55 70 73 65 72 74 20  UPSERT.  Upsert 
2fbf0 2a 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e 65  *sqlite3UpsertNe
2fc00 77 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  w(sqlite3*,ExprL
2fc10 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
2fc20 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 20 20 76  ist*,Expr*);.  v
2fc30 6f 69 64 20 73 71 6c 69 74 65 33 55 70 73 65 72  oid sqlite3Upser
2fc40 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
2fc50 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 55 70 73  ,Upsert*);.  Ups
2fc60 65 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65  ert *sqlite3Upse
2fc70 72 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 55  rtDup(sqlite3*,U
2fc80 70 73 65 72 74 2a 29 3b 0a 20 20 69 6e 74 20 73  psert*);.  int s
2fc90 71 6c 69 74 65 33 55 70 73 65 72 74 41 6e 61 6c  qlite3UpsertAnal
2fca0 79 7a 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  yzeTarget(Parse*
2fcb0 2c 53 72 63 4c 69 73 74 2a 2c 55 70 73 65 72 74  ,SrcList*,Upsert
2fcc0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2fcd0 65 33 55 70 73 65 72 74 44 6f 55 70 64 61 74 65  e3UpsertDoUpdate
2fce0 28 50 61 72 73 65 2a 2c 55 70 73 65 72 74 2a 2c  (Parse*,Upsert*,
2fcf0 54 61 62 6c 65 2a 2c 49 6e 64 65 78 2a 2c 69 6e  Table*,Index*,in
2fd00 74 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  t);.#else.#defin
2fd10 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 4e  e sqlite3UpsertN
2fd20 65 77 28 76 2c 77 2c 78 2c 79 2c 7a 29 20 28 28  ew(v,w,x,y,z) ((
2fd30 55 70 73 65 72 74 2a 29 30 29 0a 23 64 65 66 69  Upsert*)0).#defi
2fd40 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72 74  ne sqlite3Upsert
2fd50 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 64 65 66  Delete(x,y).#def
2fd60 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65 72  ine sqlite3Upser
2fd70 74 44 75 70 28 78 2c 79 29 20 20 20 20 20 20 20  tDup(x,y)       
2fd80 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23 65 6e  ((Upsert*)0).#en
2fd90 64 69 66 0a 0a 0a 2f 2a 20 44 65 63 6c 61 72 61  dif.../* Declara
2fda0 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69  tions for functi
2fdb0 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41  ons in fkey.c. A
2fdc0 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20  ll of these are 
2fdd0 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e  replaced by.** n
2fde0 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f  o-op macros if O
2fdf0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2fe00 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74  is defined. In t
2fe10 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65  his case no fore
2fe20 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74  ign.** key funct
2fe30 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69  ionality is avai
2fe40 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54  lable. If OMIT_T
2fe50 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65  RIGGER is define
2fe60 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f  d but.** OMIT_FO
2fe70 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74  REIGN_KEY is not
2fe80 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74  , only some of t
2fe90 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
2fea0 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20   no-oped. In.** 
2feb0 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67  this case foreig
2fec0 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65  n keys are parse
2fed0 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20  d, but no other 
2fee0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
2fef0 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
2ff00 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
2ff10 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
2ff20 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
2ff30 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
2ff40 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2ff50 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2ff60 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
2ff70 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2ff80 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
2ff90 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
2ffa0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2ffb0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2ffc0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2ffd0 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
2ffe0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
2fff0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
30000 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
30010 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
30020 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
30030 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
30040 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
30050 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
30060 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
30070 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
30080 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
30090 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
300a0 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
300b0 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
300c0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
300d0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
300e0 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
300f0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
30100 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
30110 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
30120 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
30130 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
30140 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
30150 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
30160 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
30170 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
30180 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23  ,b,c,d)    0.  #
30190 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
301a0 52 65 66 65 72 65 6e 63 65 73 28 61 29 20 20 20  References(a)   
301b0 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69       0.#endif.#i
301c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
301d0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
301e0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
301f0 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
30200 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73  Table*);.  int s
30210 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
30220 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  dex(Parse*,Table
30230 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c  *,FKey*,Index**,
30240 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  int**);.#else.  
30250 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
30260 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23  kDelete(a,b).  #
30270 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
30280 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c  LocateIndex(a,b,
30290 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a  c,d,e).#endif...
302a0 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20  /*.** Available 
302b0 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e  fault injectors.
302c0 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62    Should be numb
302d0 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
302e0 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ith 0..*/.#defin
302f0 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
30300 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20  JECTOR_MALLOC   
30310 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
30320 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
30330 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f  _COUNT      1../
30340 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
30350 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69  ce to the code i
30360 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66  n fault.c used f
30370 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22  or identifying "
30380 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f  benign".** mallo
30390 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73  c failures. This
303a0 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74   is only present
303b0 20 69 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53   if SQLITE_UNTES
303c0 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20  TABLE.** is not 
303d0 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
303e0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
303f0 54 41 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c  TABLE.  void sql
30400 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
30410 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76  alloc(void);.  v
30420 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65  oid sqlite3EndBe
30430 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
30440 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
30450 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  e sqlite3BeginBe
30460 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23  nignMalloc().  #
30470 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e  define sqlite3En
30480 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  dBenignMalloc().
30490 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c  #endif../*.** Al
304a0 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
304b0 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
304c0 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f  FindInIndex().*/
304d0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
304e0 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31  X_ROWID        1
304f0 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65     /* Search the
30500 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
30510 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ble */.#define I
30520 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
30530 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72       2   /* Sear
30540 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ch an ephemeral 
30550 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  b-tree */.#defin
30560 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
30570 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45  _ASC    3   /* E
30580 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53  xisting index AS
30590 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
305a0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
305b0 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20  X_DESC   4   /* 
305c0 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44  Existing index D
305d0 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ESCENDING */.#de
305e0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
305f0 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f  OP         5   /
30600 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c  * No table avail
30610 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72  able. Use compar
30620 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41  isons */./*.** A
30630 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72  llowed flags for
30640 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74   the 3rd paramet
30650 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e  er to sqlite3Fin
30660 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23  dInIndex()..*/.#
30670 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
30680 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30  NOOP_OK     0x00
30690 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74  01  /* OK to ret
306a0 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  urn IN_INDEX_NOO
306b0 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  P */.#define IN_
306c0 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50  INDEX_MEMBERSHIP
306d0 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20    0x0002  /* IN 
306e0 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f  operator used fo
306f0 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73  r membership tes
30700 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  t */.#define IN_
30710 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20  INDEX_LOOP      
30720 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20    0x0004  /* IN 
30730 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73  operator used as
30740 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73   a loop */.int s
30750 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
30760 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  x(Parse *, Expr 
30770 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e  *, u32, int*, in
30780 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20  t*, int*);..int 
30790 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
307a0 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
307b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
307c0 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
307d0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
307e0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
307f0 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29  e(sqlite3_vfs *)
30800 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
30810 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
30820 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20  IC_WRITE) \. || 
30830 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
30840 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
30850 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20  IC_WRITE).  int 
30860 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
30870 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
30880 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e *);.#endif..in
30890 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
308a0 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74  IsInMemory(sqlit
308b0 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69  e3_file *p);.voi
308c0 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
308d0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
308e0 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  file *);..void s
308f0 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69  qlite3ExprSetHei
30900 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73  ghtAndFlags(Pars
30910 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
30920 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  *p);.#if SQLITE_
30930 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
30940 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
30950 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
30960 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
30970 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
30980 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
30990 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
309a0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
309b0 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20  ctExprHeight(x) 
309c0 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
309d0 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
309e0 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  ht(x,y).#endif..
309f0 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62  u32 sqlite3Get4b
30a00 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a  yte(const u8*);.
30a10 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34  void sqlite3Put4
30a20 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a  byte(u8*, u32);.
30a30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
30a40 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
30a50 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IFY.  void sqlit
30a60 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
30a70 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73  ked(sqlite3 *, s
30a80 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69  qlite3 *);.  voi
30a90 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
30aa0 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69  ionUnlocked(sqli
30ab0 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64  te3 *db);.  void
30ac0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
30ad0 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33  onClosed(sqlite3
30ae0 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23   *db);.#else.  #
30af0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
30b00 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
30b10 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
30b20 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
30b30 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64  Unlocked(x).  #d
30b40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
30b50 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29  nectionClosed(x)
30b60 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
30b70 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76  SQLITE_DEBUG.  v
30b80 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
30b90 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68  rTrace(FILE*, ch
30ba0 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ar *);.#endif.#i
30bb0 66 20 64 65 66 69 6e 65 64 28 59 59 43 4f 56 45  f defined(YYCOVE
30bc0 52 41 47 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  RAGE).  int sqli
30bd0 74 65 33 50 61 72 73 65 72 43 6f 76 65 72 61 67  te3ParserCoverag
30be0 65 28 46 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66  e(FILE*);.#endif
30bf0 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ../*.** If the S
30c00 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54  QLITE_ENABLE IOT
30c10 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e  RACE exists then
30c20 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
30c30 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49  able.** sqlite3I
30c40 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e  oTrace is a poin
30c50 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d  ter to a printf-
30c60 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65  like routine use
30c70 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f  d to.** print I/
30c80 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67  O tracing messag
30c90 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  es..*/.#ifdef SQ
30ca0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
30cb0 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  ACE.# define IOT
30cc0 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c  RACE(A)  if( sql
30cd0 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73  ite3IoTrace ){ s
30ce0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b  qlite3IoTrace A;
30cf0 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65   }.  void sqlite
30d00 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
30d10 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41  Vdbe*);.SQLITE_A
30d20 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  PI SQLITE_EXTERN
30d30 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44   void (SQLITE_CD
30d40 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72  ECL *sqlite3IoTr
30d50 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
30d60 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ,...);.#else.# d
30d70 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
30d80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
30d90 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
30da0 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
30db0 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20   These routines 
30dc0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  are available fo
30dd0 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62  r the mem2.c deb
30de0 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  ugging memory al
30df0 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e  locator.** only.
30e00 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20    They are used 
30e10 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64  to verify that d
30e20 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22  ifferent "types"
30e30 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c   of memory.** al
30e40 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72  locations are pr
30e50 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62  operly tracked b
30e60 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a  y the system..**
30e70 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
30e80 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74  bugSetType() set
30e90 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20  s the "type" of 
30ea0 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f  an allocation to
30eb0 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d   one of.** the M
30ec0 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20  EMTYPE_* macros 
30ed0 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20  defined below.  
30ee0 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65  The type must be
30ef0 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a   a bitmask with.
30f00 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20  ** a single bit 
30f10 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  set..**.** sqlit
30f20 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
30f30 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
30f40 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62   if any of the b
30f50 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
30f60 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
30f70 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
30f80 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
30f90 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
30fa0 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71  SetType()..** sq
30fb0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
30fc0 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64  Type() is intend
30fd0 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64  ed for use insid
30fe0 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
30ff0 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ments..**.** sql
31000 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
31010 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
31020 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  e if none of the
31030 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
31040 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
31050 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
31060 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
31070 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
31080 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a  ugSetType()..**.
31090 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d  ** Perhaps the m
310a0 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f  ost important po
310b0 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65  int is the diffe
310c0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45  rence between ME
310d0 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e  MTYPE_HEAP.** an
310e0 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  d MEMTYPE_LOOKAS
310f0 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f  IDE.  If an allo
31100 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50  cation is MEMTYP
31110 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61  E_LOOKASIDE, tha
31120 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69  t means.** it mi
31130 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c  ght have been al
31140 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61  located by looka
31150 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65  side, except the
31160 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a   allocation was.
31170 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20  ** too large or 
31180 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c  lookaside was al
31190 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20  ready full.  It 
311a0 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
311b0 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61  verify.** that a
311c0 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20  llocations that 
311d0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
311e0 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f  satisfied by loo
311f0 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a  kaside are not.*
31200 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f  * passed back to
31210 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
31220 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20  ree() routines. 
31230 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73   Asserts such as
31240 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20   the.** example 
31250 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64  above are placed
31260 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b   on the non-look
31270 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
31280 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a  tines to verify.
31290 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  ** this constrai
312a0 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  nt..**.** All of
312b0 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66   this is no-op f
312c0 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20  or a production 
312d0 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20  build.  It only 
312e0 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c  comes into.** pl
312f0 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49  ay when the SQLI
31300 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70  TE_MEMDEBUG comp
31310 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
31320 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64  is used..*/.#ifd
31330 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
31340 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
31350 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
31360 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
31370 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
31380 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75  gHasType(void*,u
31390 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
313a0 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
313b0 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65  void*,u8);.#else
313c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
313d0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
313e0 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  (X,Y)  /* no-op 
313f0 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  */.# define sqli
31400 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
31410 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66  pe(X,Y)  1.# def
31420 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
31430 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20  bugNoType(X,Y)  
31440 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e   1.#endif.#defin
31450 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20  e MEMTYPE_HEAP  
31460 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65       0x01  /* Ge
31470 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63  neral heap alloc
31480 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
31490 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  e MEMTYPE_LOOKAS
314a0 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65  IDE  0x02  /* He
314b0 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ap that might ha
314c0 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64  ve been lookasid
314d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  e */.#define MEM
314e0 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20  TYPE_PCACHE     
314f0 30 78 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61  0x04  /* Page ca
31500 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  che allocations 
31510 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64  */../*.** Thread
31520 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f  ing interface.*/
31530 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
31540 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30  WORKER_THREADS>0
31550 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
31560 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54  adCreate(SQLiteT
31570 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29  hread**,void*(*)
31580 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a  (void*),void*);.
31590 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
315a0 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65  dJoin(SQLiteThre
315b0 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65  ad*, void**);.#e
315c0 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
315d0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
315e0 44 42 50 41 47 45 5f 56 54 41 42 29 20 7c 7c 20  DBPAGE_VTAB) || 
315f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
31600 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33  EST).int sqlite3
31610 44 62 70 61 67 65 52 65 67 69 73 74 65 72 28 73  DbpageRegister(s
31620 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66  qlite3*);.#endif
31630 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
31640 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41  ITE_ENABLE_DBSTA
31650 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e  T_VTAB) || defin
31660 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
31670 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61  int sqlite3Dbsta
31680 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65  tRegister(sqlite
31690 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  3*);.#endif..int
316a0 20 73 71 6c 69 74 65 33 45 78 70 72 56 65 63 74   sqlite3ExprVect
316b0 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78  orSize(Expr *pEx
316c0 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
316d0 45 78 70 72 49 73 56 65 63 74 6f 72 28 45 78 70  ExprIsVector(Exp
316e0 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20  r *pExpr);.Expr 
316f0 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69  *sqlite3VectorFi
31700 65 6c 64 53 75 62 65 78 70 72 28 45 78 70 72 2a  eldSubexpr(Expr*
31710 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
31720 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65 63 74  lite3ExprForVect
31730 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45  orField(Parse*,E
31740 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  xpr*,int);.void 
31750 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72  sqlite3VectorErr
31760 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78  orMsg(Parse*, Ex
31770 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  pr*);..#ifndef S
31780 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
31790 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63  LEOPTION_DIAGS.c
317a0 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69  onst char **sqli
317b0 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  te3CompileOption
317c0 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23  s(int *pnOpt);.#
317d0 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a  endif..#endif /*
317e0 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a   SQLITEINT_H */.